我目前正在使用Flutter编写应用程序,并开始使用MobX重构状态管理。由于我有多个商店可以相互通信,因此我尝试按照MobX最佳做法中的建议“连接”这些商店:https://mobx.js.org/best/store.html#combining-multiple-stores。
创建一个“根”存储,将其他存储作为成员保存,每个存储都包含对根存储的引用。
出于某种原因,我无法执行此看似简单的操作。我已经搜索了很多,但是找不到答案。
这基本上是我想做的:
class StoreA {
final Root _root;
StoreA(this._root);
}
class root {
final StoreA = StoreA(this);
}
飞镖分析仪抱怨:
对“ this”表达式的无效引用
您不能在初始化程序中使用this
,但是如果您删除final
限定符,则可以在构造函数中使用它。
class Root {
StoreA storeA;
Root() {
storeA = StoreA(this);
}
}
Richard Heap的答案目前是正确的答案,但是在Dart的未来发行版中,它包含非空类型系统,您可以编写以下内容:
class StoreA {
final Root _root;
StoreA(this._root);
}
class root {
late final StoreA = StoreA(this);
}
您可以在late
处看到默认为不可为空(NNBD)的规范以及相关功能,例如Dart language repository字段。