在设置提供程序包的依赖项时遇到问题和困境。
我的代码:
providers: [
ChangeNotifierProvider<AuthModel>(
builder: (context) => AuthModel(userRepository: UserRepository())),
ChangeNotifierProxyProvider<AuthModel, AppModel>(
initialBuilder: (_) => AppModel(),
builder: (_, auth, app) => app..authModel = auth,
),
],
使用
ChangeNotifierProxyProvider
,对authModel的更改使ChangeNotifierProxyProvider
上的构建器每次运行。 AuthModel是一个ChangeNotifier,只需将其设置一次即可,因为依赖关系就足够了。问题:
ChangeNotifierProvider<AuthModel>(
builder: (context) => AuthModel(userRepository: UserRepository()))
重新创建AuthModel实例?
ChangeNotifierProxyProvider<AuthModel, AppModel>(
initialBuilder: (_) => AppModel(),
builder: (_, auth, app) => app..authModel = auth,
),
builder 再次分配? AuthModel是一个ChangeNotifier,没有重新分配的意义。
ChangeNotifierProxyProvider
构建器会再次运行吗? 最佳答案
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();
}
}
}