我对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
}
}
我试着用谷歌搜索这个问题,没有结果。。
1条答案
按热度按时间fd3cxomn1#
这是我的粗略猜测,因为我看不到代码的其余部分,但您需要在
SubProvider
类的每个示例上调用load
。SubProvider
共享MainProvider
类/接口,而不是它的对象。