dart 在Flutter中从子Provider中的主Provider访问数据(Provider重构)

lhcgjxsq  于 2023-05-11  发布在  Flutter
关注(0)|答案(1)|浏览(179)

我对Flutter相对较新,我试图将我的提供程序拆分为一个主提供程序,它保存我所有的数据,以及多个扩展它的子提供程序。这些子提供程序负责操作数据并提供一些getter。
我尝试在主Provider上使用extend关键字来创建子Provider。一切似乎都很好,但我无法访问子提供商的数据。
在下面的示例代码中,load()函数在启动时将数据加载到mainData中,然后可以从MainProvider访问数据,没有任何问题。但是,如果我试图从SubProvider访问数据,我会得到一个错误,因为mainData为null(或者为空,这无关紧要),所以似乎看不到MainProvider状态的任何更改。
我在这里做错了什么,这是重构提供程序的最佳方法吗?还是我遗漏了什么?

class MainProvider extends ChangeNotifier {
  late List<String> mainData;

  void load() {
    // loads data from shared preferences into mainData
  }
}

class SubProvider extends MainProvider {
  void add() {}
  void remove() {}
  // ...
  void printLength() {
    debugPrint(mainData.length.toString()); //error: e.g. mainData has not been initialized
  }
}

我试着用谷歌搜索这个问题,没有结果。。

fd3cxomn

fd3cxomn1#

这是我的粗略猜测,因为我看不到代码的其余部分,但您需要在SubProvider类的每个示例上调用loadSubProvider共享MainProvider类/接口,而不是它的对象。

相关问题