Dart依赖注入-为什么不能将实例引用传递给类成员?

问题描述 投票:1回答:2

我目前正在使用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”表达式的无效引用

flutter dart dependency-injection syntax mobx
2个回答
4
投票

您不能在初始化程序中使用this,但是如果您删除final限定符,则可以在构造函数中使用它。

class Root {
  StoreA storeA;

  Root() {
    storeA = StoreA(this);
  }
}

1
投票

Richard Heap的答案目前是正确的答案,但是在Dart的未来发行版中,它包含非空类型系统,您可以编写以下内容:

class StoreA {
  final Root _root;

  StoreA(this._root);
}

class root {
  late final StoreA = StoreA(this);
}

您可以在late处看到默认为不可为空(NNBD)的规范以及相关功能,例如Dart language repository字段。

© www.soinside.com 2019 - 2024. All rights reserved.