在状态控件的状态下创建一个对象,该对象依赖提供者

时间:2019-08-03 17:28:21

标签: flutter flutter-dependencies

我有一个类Store,该类依赖于说类Credentials,例如

class Credentials {
  ...
}

class Store {
  ...
  Store(@required Credentials)
  ...
}

我的有状态窗口小部件的构建方法使用Store中的东西来生成窗口小部件。 Credentials对象是通过提供程序提供的。

我已经做到了

@override
didChangeDependencies() {
  super.didChangeDependencies();
  Credentials creds = Provider.of<Credentials>(context);
  _store = Store(creds);
  ...
}

但是即使信誉保持不变,也可以看到_store被重新创建。 (我可以做一个信用平等检查,并在其中创建存储,但是对我来说这似乎只是一个解决方法)。 我只是不认为这是正确的方法。 我们如何优雅地解决这种模式?

1 个答案:

答案 0 :(得分:0)

取决于如何使用Store,您可以使用ProxyProvider

ProxyProvider<Credentials, Store>(
  builder: (_, creds, __) => Store(creds),
  child: ...,
)

或在创建新的Credentials之前对Store进行相等性检查:

Credentials credentials;
Store store;

@override
void didChangeDependencies() {
  super.didChangeDependencies();
  final credentials = Provider.of<Credentials>(context);
  if (this.credentials != credentials) {
    this.credentials = credentials;
    store = Store(credentials);
  }
}