Commit 94fc6066 authored by 汪林玲's avatar 汪林玲

支持null-safety

parents
File added
{
"configVersion": 2,
"packages": [
{
"name": "async",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/async-2.8.1",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "boolean_selector",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/boolean_selector-2.1.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "characters",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/characters-1.1.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "charcode",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.3.1",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "clock",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/clock-1.1.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "collection",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/collection-1.15.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "fake_async",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/fake_async-1.2.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "flutter",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/packages/flutter",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "flutter_test",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/packages/flutter_test",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "matcher",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/matcher-0.12.10",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "meta",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/meta-1.7.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "nested",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/nested-1.0.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "path",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/path-1.8.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "provider",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/provider-6.0.1",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "pull_to_refresh",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-2.0.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "sky_engine",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/bin/cache/pkg/sky_engine",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "source_span",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.8.1",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "stack_trace",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/stack_trace-1.10.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "stream_channel",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/stream_channel-2.1.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "string_scanner",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.1.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "term_glyph",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.2.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "test_api",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/test_api-0.4.2",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "typed_data",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.3.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "vector_math",
"rootUri": "file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.1.0",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{
"name": "mvp",
"rootUri": "../",
"packageUri": "lib/",
"languageVersion": "2.12"
}
],
"generated": "2021-10-15T01:52:18.473248Z",
"generator": "pub",
"generatorVersion": "2.14.2"
}
mvp
2.12
file:///Users/qiaomeng/Desktop/test/mvp/
file:///Users/qiaomeng/Desktop/test/mvp/lib/
async
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/async-2.8.1/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/async-2.8.1/lib/
boolean_selector
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/boolean_selector-2.1.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/boolean_selector-2.1.0/lib/
characters
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/characters-1.1.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/characters-1.1.0/lib/
charcode
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.3.1/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.3.1/lib/
clock
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/clock-1.1.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/clock-1.1.0/lib/
collection
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/collection-1.15.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/collection-1.15.0/lib/
fake_async
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/fake_async-1.2.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/fake_async-1.2.0/lib/
matcher
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/matcher-0.12.10/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/matcher-0.12.10/lib/
meta
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/meta-1.7.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/meta-1.7.0/lib/
nested
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/nested-1.0.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/nested-1.0.0/lib/
path
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/path-1.8.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/path-1.8.0/lib/
provider
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/provider-6.0.1/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/provider-6.0.1/lib/
pull_to_refresh
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-2.0.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-2.0.0/lib/
source_span
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.8.1/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.8.1/lib/
stack_trace
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/stack_trace-1.10.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/stack_trace-1.10.0/lib/
stream_channel
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/stream_channel-2.1.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/stream_channel-2.1.0/lib/
string_scanner
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.1.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.1.0/lib/
term_glyph
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.2.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.2.0/lib/
test_api
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/test_api-0.4.2/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/test_api-0.4.2/lib/
typed_data
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.3.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.3.0/lib/
vector_math
2.12
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.1.0/
file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.1.0/lib/
sky_engine
2.12
file:///Users/qiaomeng/flutter_2.5.1/bin/cache/pkg/sky_engine/
file:///Users/qiaomeng/flutter_2.5.1/bin/cache/pkg/sky_engine/lib/
flutter
2.12
file:///Users/qiaomeng/flutter_2.5.1/packages/flutter/
file:///Users/qiaomeng/flutter_2.5.1/packages/flutter/lib/
flutter_test
2.12
file:///Users/qiaomeng/flutter_2.5.1/packages/flutter_test/
file:///Users/qiaomeng/flutter_2.5.1/packages/flutter_test/lib/
2
2.5.1
\ No newline at end of file
# This file is deprecated. Tools should instead consume
# `.dart_tool/package_config.json`.
#
# For more info see: https://dart.dev/go/dot-packages-deprecation
#
# Generated by pub on 2021-10-15 09:52:18.458985.
async:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/async-2.8.1/lib/
boolean_selector:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/boolean_selector-2.1.0/lib/
characters:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/characters-1.1.0/lib/
charcode:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/charcode-1.3.1/lib/
clock:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/clock-1.1.0/lib/
collection:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/collection-1.15.0/lib/
fake_async:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/fake_async-1.2.0/lib/
flutter:file:///Users/qiaomeng/flutter_2.5.1/packages/flutter/lib/
flutter_test:file:///Users/qiaomeng/flutter_2.5.1/packages/flutter_test/lib/
matcher:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/matcher-0.12.10/lib/
meta:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/meta-1.7.0/lib/
nested:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/nested-1.0.0/lib/
path:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/path-1.8.0/lib/
provider:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/provider-6.0.1/lib/
pull_to_refresh:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/pull_to_refresh-2.0.0/lib/
sky_engine:file:///Users/qiaomeng/flutter_2.5.1/bin/cache/pkg/sky_engine/lib/
source_span:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/source_span-1.8.1/lib/
stack_trace:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/stack_trace-1.10.0/lib/
stream_channel:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/stream_channel-2.1.0/lib/
string_scanner:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.1.0/lib/
term_glyph:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.2.0/lib/
test_api:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/test_api-0.4.2/lib/
typed_data:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.3.0/lib/
vector_math:file:///Users/qiaomeng/flutter_2.5.1/.pub-cache/hosted/pub.flutter-io.cn/vector_math-2.1.0/lib/
mvp:lib/
import '../models/base_model.dart';
import 'package:flutter/material.dart';
abstract class BaseAction<T extends BaseModel?> {
T? _model;
void initState();
void initBuilder(BuildContext context) {
_model!.attachContext(context);
}
void dispose() {}
T? getModel() {
return _model;
}
void setModel(T model) {
_model = model;
}
}
import 'package:pull_to_refresh/pull_to_refresh.dart';
import './base_model.dart';
abstract class BaseListModel<T> extends BaseModel {
// 当前页
int _page = 1;
// 页数据长度
int _pageSize = 20;
// 是否请求完毕
bool _isRequestDone = false;
// 是否加载失败
bool _isLoadFail = false;
// 是否加载完全部
bool _isLoadAll = false;
// 是否第一次加载
bool _isFirstLoad = true;
// 列表数据
List<T> _list = [];
// 列表数据2
List<Map> _list2 = [];
// 下拉刷新控制器
RefreshController _refreshController = RefreshController();
// 获取当前页
int getPage() {
return _page;
}
// 获取页数据长度
int getPageSize() {
return _pageSize;
}
//设置pageSize
setPageSize(int size) {
this._pageSize = size;
}
// 是否加载完毕
bool isRequestDone() {
return _isRequestDone;
}
// 是否记载失败
bool isLoadFail() {
return _isLoadFail;
}
// 是否首次加载
bool isFirstLoad() {
return _isFirstLoad;
}
// 是否加载完全部
bool isLoadAll() {
return _isLoadAll;
}
// 获取数据
List<T> getList() {
return _list;
}
List<Map> getList2() {
return _list2;
}
// 获取下拉刷新控制器
RefreshController getRefreshController() {
return this._refreshController;
}
// 获取分页信息
Map<String, dynamic> getPagination() {
return {"page": getPage(), "pagesize": getPageSize()};
}
// 加载数据
Future<void> getData() async {
this._isRequestDone = false;
try {
List<T> list = await request();
// 第一页清除旧数据
if (getPage() == 1) {
getList().replaceRange(0, getList().length, list);
} else {
getList().addAll(list);
}
if (list.length == 0 || list.length < getPageSize()) {
List<Map> list2 = await request2();
if (getPage() == 1) {
getList2().replaceRange(0, getList2().length, list2);
} else {
getList2().addAll(list2);
}
}
if (list.length > 0) {
if (getPage() == 1) {
getRefreshController().refreshCompleted();
getRefreshController().loadComplete();
} else {
getRefreshController().loadComplete();
}
_page++;
_isLoadAll = false;
} else {
_isLoadAll = true;
if (getPage() == 1) {
getRefreshController().refreshCompleted();
getRefreshController().loadComplete();
} else {
getRefreshController().loadNoData();
}
}
} catch (e) {
_isLoadFail = true;
if (getPage() == 1) {
getRefreshController().refreshCompleted();
} else {
getRefreshController().loadFailed();
}
}
_isRequestDone = true;
_isFirstLoad = false;
notifyListeners();
}
// 刷新数据
Future<void> refresh() async {
_page = 1;
_isLoadAll = false;
_isLoadFail = false;
await getData();
return null;
}
// 清除数据并通知更新,并滚动至顶部
void clear() {
getList().clear();
_page = 1;
_isLoadAll = false;
_isLoadFail = false;
_isRequestDone = false;
notifyListeners();
}
// 请求数据2
Future<List<Map>> request2() async {
return [];
}
// 请求数据
Future<List<T>> request();
}
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
abstract class BaseModel extends ChangeNotifier {
///
/// 当前model的状态[viewState]
///
ViewState viewState = ViewState.idle;
// 关联provider上下文
BuildContext? _context;
// widget是否摧毁
bool _disposed = true;
// 关联provider上下文
void attachContext(BuildContext context) {
_disposed = false;
_context = context;
}
BuildContext? getContext() {
return _context;
}
// 列表滚至顶部
void scrollTop() {
if (_context != null) {
RenderSliver? renderSliver =
_context!.findAncestorRenderObjectOfType<RenderSliver>();
if (renderSliver != null &&
(renderSliver.constraints.overlap > 0 ||
renderSliver.constraints.cacheOrigin < 0)) {
Scrollable.ensureVisible(_context!);
}
}
}
@override
void dispose() {
_disposed = true;
super.dispose();
}
@override
void notifyListeners() {
// widget未被摧毁数据更新通知
if (!_disposed) {
super.notifyListeners();
}
}
}
/// 页面状态类型
enum ViewState {
idle,
busy, //加载中
empty, //无数据
error, //加载失败
unAuthorized, //未登录
}
library mvp;
export './actions/base_action.dart';
export './models/base_model.dart';
export './models/base_list_model.dart';
export './providers/provider.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../models/base_model.dart';
import '../actions/base_action.dart';
class QMProvider<T extends BaseModel> extends StatelessWidget {
final T model;
final Widget Function(
BuildContext context,
T model,
Widget? child,
) builderWidget;
QMProvider.value({
Key? key,
required this.model,
required this.builderWidget,
});
@override
Widget build(BuildContext context) {
model.attachContext(context);
return ChangeNotifierProvider<T>.value(
key: key,
value: model,
child: Consumer<T>(
builder: builderWidget,
),
);
}
}
class ActionProvider<T extends BaseModel, A extends BaseAction<T>>
extends StatefulWidget {
final A action;
final Widget Function(BuildContext context, Widget? child) builder;
ActionProvider({Key? key, required this.action, required this.builder});
@override
State<StatefulWidget> createState() => _ActionProviderState<T, A>();
}
class _ActionProviderState<T extends BaseModel?, A extends BaseAction<T>>
extends State<ActionProvider> {
@override
void initState() {
super.initState();
widget.action.initState();
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<T?>.value(
value: widget.action.getModel() as T?,
child: Consumer<T>(
builder: (context, vm, child) {
widget.action.initBuilder(context);
return widget.builder(context, child);
},
),
);
}
@override
void dispose() {
widget.action.dispose();
super.dispose();
}
}
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
async:
dependency: transitive
description:
name: async
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.8.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.15.0"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.12.10"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.7.0"
nested:
dependency: transitive
description:
name: nested
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.0"
provider:
dependency: "direct main"
description:
name: provider
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.0.1"
pull_to_refresh:
dependency: "direct main"
description:
name: pull_to_refresh
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.2"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.0"
sdks:
dart: ">=2.12.0 <3.0.0"
flutter: ">=2.0.0"
name: mvp
description: A new Flutter package project.
version: 0.0.1
homepage: /
environment:
sdk: '>=2.12.0 <3.0.0'
flutter: ">=1.17.0"
dependencies:
flutter:
sdk: flutter
provider: ^6.0.1
pull_to_refresh: ^2.0.0
dev_dependencies:
flutter_test:
sdk: flutter
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment