在有状态小部件的状态中创建依赖于提供程序的对象



我有一个类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重新创建。 (我可以做一个信条平等检查,并在里面创建商店,但这对我来说似乎只是一个修复)。 我只是不认为这是正确的方法。 我们如何优雅地解决颤振中的这种模式?

根据Store的使用方式,您可以使用ProxyProvider

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

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

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);
}
}

相关内容

最新更新