我有一个sqlite数据库,可以从中读取数据。我也有一个长长的小部件树。因此,经过一番研究,我发现了provider
抖动包。但是我无法弄清楚如何在扩展ChangeNotifier
的类中使用Futures或如何在窗口小部件树的任何位置使用它?
class MyProvider with ChangeNotifier {
dynamic _myValue;
dynamic get myValue => _myValue;
set myValue(dynamic newValue) {
_myValue = newValue;
notifyListeners();
}
MyProvider(){
loadValue();
}
Future<void> loadValue async {
myValue = await db.instance().getValue();
}
Future<void> refetch async {
myValue = await db.instance().newValue();
notifyListeners();
}
}
答案 0 :(得分:1)
我建议您先了解一下Future和Provider程序包是如何工作的。您可以使用.then()方法等待Future直接在小部件树中完成,也可以在提供程序中像下面这样处理:
class MyProvider with ChangeNotifier {
dynamic _myValue;
dynamic get myValue => _myValue;
set myValue(dynamic newValue) {
_myValue = newValue;
notifyListeners();
}
MyProvider(){
loadValue();
}
Future<void> loadValue async {
myValue = await db.instance().getValue();
}
}
然后在小部件树中:
build(context) {
return ChangeNotifierProvider.value(
value: MyProvider(),
child: Consumer<MyProvider>(builder:
(BuildContext context, MyProvider provider, Widget child) {
if(provider.myValue == null) {
return Center(
child: CircularProgressIndicator(),
);
} else {
return Container(
child: Text(provider.myValue);
);
}
}
);
}
那只是做到这一点的一种方法,但是还有很多其他方法可以解决这个问题。