在设置提供程序包的依赖项时遇到问题和困境。
我的代码:

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

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

问题:
  • 在每次代码重建时(在build方法上设置了providers)
    ChangeNotifierProvider<AuthModel>(
            builder: (context) => AuthModel(userRepository: UserRepository()))
    

  • 重新创建AuthModel实例?
  • 在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();
        }
      }
    }
    

    10-08 03:35