Я узнаю, FutureProvider
может использоваться, когда модель будет задана как Future
. Для инициализации модели необходимо использовать метод init() async
, поэтому я попытался FutureProvider
. Однако FutureProvider
не дал пример модели. Он дал null
.
Кроме того, при использовании ChangeNotifierProvider
успешно обновляет пользовательский интерфейс, FutureProvider
, кажется, не обновляет пользовательский интерфейс при вызове notifyListeners()
. 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),
),
),
);
}
}