我在设置与 Provider 包的依赖关系时遇到问题和困境。
我的代码:
providers: [
ChangeNotifierProvider<AuthModel>(
builder: (context) => AuthModel(userRepository: UserRepository())),
ChangeNotifierProxyProvider<AuthModel, AppModel>(
initialBuilder: (_) => AppModel(),
builder: (_, auth, app) => app..authModel = auth,
),
],
Run Code Online (Sandbox Code Playgroud)
使用ChangeNotifierProxyProvider
, authModel 上的更改使构建器ChangeNotifierProxyProvider
每次都运行。AuthModel 是一个 ChangeNotifier 设置一次,因为依赖就足够了。
问题:
在每个代码重建(提供者设置在构建方法上)执行
ChangeNotifierProvider<AuthModel>(
builder: (context) => AuthModel(userRepository: UserRepository()))
Run Code Online (Sandbox Code Playgroud)重新创建 AuthModel 实例?
在 AuthModel 上的每次更改中
ChangeNotifierProxyProvider<AuthModel, AppModel>(
initialBuilder: (_) => AppModel(),
builder: (_, auth, app) => app..authModel = auth,
),
Run Code Online (Sandbox Code Playgroud)builder 再分配?AuthModel 是一个 ChangeNotifier,没有重新分配的意义。
ChangeNotifierProxyProvider
builder 都会再次运行?Rém*_*let 13
的默认构造函数ChangeNotiferProvider
将调用builder
一次且仅一次。
ChangeNotiferProxyProvider
另一方面,builder
每次更新其依赖项时都会再次调用。
但它完全没问题。有builder
被再次调用并不意味着家属必须要更新。仅当builder
调用notifyListeners
通知程序时才执行更新。
这意味着您的通知程序可以像这样过滤更新:
class MyNotifier with Notifier {
A _a;
A get a => _a;
set a(A value) {
// don't unnecessarily call `notifyListeners` if nothing changed
if (value != _a) {
_a = value;
notifyListeners();
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8750 次 |
最近记录: |