Flutter Provider-ChangeNotifierProxyProvider设置依赖项

时间:2019-08-26 08:50:56

标签: flutter dart

在设置与提供程序包的依赖关系时遇到问题和难题。 我的代码:

providers: [
        ChangeNotifierProvider<AuthModel>(          
            builder: (context) => AuthModel(userRepository: UserRepository())),
        ChangeNotifierProxyProvider<AuthModel, AppModel>(
          initialBuilder: (_) => AppModel(),
          builder: (_, auth, app) => app..authModel = auth,
        ),
    ],

使用ChangeNotifierProxyProvider,对authModel的更改使ChangeNotifierProxyProvider上的构建器每次运行。 AuthModel是一个ChangeNotifier,只需将其设置一次即可,因为依赖就足够了。

问题:

  1. 在每次代码重建时(在构建方法上设置了提供程序)

    ChangeNotifierProvider(
                builder:(上下文)=> AuthModel(userRepository:UserRepository()))

重新创建AuthModel实例?

  1. 对于AuthModel的每次更改

    ChangeNotifierProxyProvider(               initialBuilder:()=> AppModel(),               构建器:(,auth,app)=> app..authModel = auth,             ),

建筑商再次分配? AuthModel是一个ChangeNotifier,没有重新分配的意义。

  1. 每次重建时,ChangeNotifierProxyProvider构建器会再次运行吗?

1 个答案:

答案 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();
    }
  }
}