如何在ChangeNotifier中使用期货? [英] How to use Futures inside ChangeNotifier?

查看:76
本文介绍了如何在ChangeNotifier中使用期货?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 sqlite 数据库,可以从中读取数据。我也有一个长长的小部件树。因此,经过一番研究,我发现了 provider Flutter软件包。但是我不知道如何在扩展 ChangeNotifier 的类中使用Futures或如何在窗口小部件树的任何位置使用它?

I have an sqlite database from which I read data. I also have a long widget tree. So after a bit of research I found the provider Flutter package. But I can't figure out how to use Futures inside the class extending ChangeNotifier or How to use it anywhere in my widget tree?

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


推荐答案

I建议您先了解一下Futures和Provider程序包是如何工作的。您可以使用.then()方法来等待Future直接在窗口小部件树中完成,也可以在提供程序中像下面这样处理:

I suggest you go and understand how Futures and the Provider package works first. You can either wait for the Future to finish directly in your widget tree using the .then() method or you can handle this in the provider like this:

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

但是还有很多其他方法可以解决这个问题。

That is just one way of doing it, but there are plenty of other ways to handle this.

这篇关于如何在ChangeNotifier中使用期货?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆