3

我有一个sqlite从中读取数据的数据库。我也有一棵很长的小部件树。所以经过一番研究,我找到了providerFlutter 包。但我不知道如何在扩展类中使用 FuturesChangeNotifier或如何在我的小部件树的任何地方使用它?

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();
  }
}
4

1 回答 1

9

我建议你先去了解 Futures 和 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);
          );
       }
    }
  );
}

这只是一种方法,但还有很多其他方法可以处理这个问题。

于 2019-07-08T15:42:28.510 回答