【问题标题】:Flutter MultiProvider Classes constructors issueFlutter MultiProvider Classes 构造函数问题
【发布时间】:2020-03-20 15:34:29
【问题描述】:

我正在使用 Flutter 创建一个购物应用程序,并使用 Provider 包进行状态管理。一切都很好,只是一个问题。我像这样声明我的 ChangeNotifierProviders。

void main() {
  runApp(MultiProvider(
    providers: <SingleChildWidget>[
      ChangeNotifierProvider(create: (_) => AuthStateManager.instance()),
      ChangeNotifierProvider(create: (_) => CartManager()),
      ChangeNotifierProvider(create: (_) => LocationManager()),
      ChangeNotifierProvider(create: (_) => BottomNavigationManager()),
      ChangeNotifierProvider(create: (_) => NotificationManager()),
    ],
    child: EvendorApp(),
  ));
}

所有的类都是一样的。

class NotificationManager with ChangeNotifier {
  NotificationManager() {
    print("Notification manager created");
  }
}

现在这些在状态管理方面运行良好,但我想在它们的构造上执行一些代码,例如我想在他们的构造函数中运行代码,但是 AuthStateManager.instance()BottomNavigationManager()CartManager() 在开始时正在执行代码,但其余的 LocationManager()NotificationManager() 没有执行代码,我不知道为什么会这样.我对所有课程都做同样的事情。

【问题讨论】:

  • 您是否尝试在构建后运行代码,例如在您的应用程序的第一个屏幕上,EvendorApp?
  • 是的,这可以工作,但是构造函数中的代码没有被执行。我只是想知道为什么在那里不起作用。
  • 不工作的类是否扩展了其他类?

标签: flutter provider


【解决方案1】:

我不确定这是否是我从未使用过的答案,但提供程序包文档确实说明了以下内容:

当使用提供者的创建/更新回调时,值得注意的是这个回调默认是惰性调用的。这意味着,在至少一次请求该值之前,不会调用创建/更新回调。

如果是这种情况,那么解决方案是添加值为 false 的惰性参数。像这样:

ChangeNotifierProvider(create: (_) =&gt; NotificationManager(), lazy: false)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多