【发布时间】:2020-05-11 22:03:10
【问题描述】:
我知道FutureProvider 可以在Future 给出模型时使用。需要通过它的init() async方法来初始化模型,所以我尝试了FutureProvider。但是FutureProvider 没有给出模型的实例。它给了null。
此外,在使用 ChangeNotifierProvider 成功更新 UI 时,FutureProvider 在调用 notifyListeners() 时似乎没有更新 UI。 Consumer 给出相同的结果。有什么需要修复的吗?谢谢。
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class MyModel extends ChangeNotifier {
int _point = 0;
int get point => _point;
set point(int value) {
if (_point != value) {
_point = value;
notifyListeners();
}
}
Future<void> init() async { /* Use await doSomething(); */ }
}
void main() => runApp(
FutureProvider<MyModel>(
create: (context) async {
final model = MyModel();
await model.init();
return Future.value(model);
},
lazy: false,
updateShouldNotify: (_, __) => true,
child: MyHomePage(),
),
);
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
final model = Provider.of<MyModel>(context);
return MaterialApp(
home: Scaffold(
appBar: AppBar(),
body: Center(
child: Text(
'${model.point}',
style: Theme.of(context).textTheme.display1,
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
model.point++;
},
child: Icon(Icons.add),
),
),
);
}
}
【问题讨论】:
标签: flutter future flutter-provider