在设置与提供程序包的依赖关系时遇到问题和难题。 我的代码:
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(
builder:(上下文)=> AuthModel(userRepository:UserRepository()))
重新创建AuthModel实例?
对于AuthModel的每次更改
ChangeNotifierProxyProvider( initialBuilder:()=> AppModel(), 构建器:(,auth,app)=> app..authModel = auth, ),
建筑商再次分配? AuthModel是一个ChangeNotifier,没有重新分配的意义。
答案 0 :(得分:1)
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();
}
}
}