颤振 ChangeNotifierProxyProvider ChangeNotifier 在创建需要参数

时间:2021-03-31 09:34:38

标签: flutter dart flutter-provider dart-pub flutter-change-notifier

我正在编写我的应用程序,需要使用 ChangeNotifierProxyProvider。不幸的是,我的 ChangeNotifier(在本例中为 Entries)需要 3 个位置参数。我已经设法在 update 中指定参数,但我如何在 create 中指定参数?

我会很高兴得到答案,因为我在互联网上找不到任何东西。

嘿! 我正在编写我的应用程序,需要使用 ChangeNotifierProxyProvider。不幸的是,我的 ChangeNotifier(在本例中为 Entries)需要 3 个位置参数。我已经设法在 update 中指定参数,但我如何在 create 中指定参数?

我会很高兴得到答案,因为我在互联网上找不到任何东西。

这是我的提供者代码:[]:

providers: [
   ChangeNotifierProvider.value(value: Auth()),
   ChangeNotifierProxyProvider<Auth, Entries>(
      create: (_) => Entries(),
      update: (_, auth, previousEntries) => Entries(
        auth.token,
        auth.userId,
        previousEntries == null ? [] : previousEntries.items,
     ),
   ),
], 

1 个答案:

答案 0 :(得分:0)

在这个问题 ChangeNotifierProxyProvider not initiated on build 中,作者是这样做的:

return MultiProvider(
        providers: [              
          ChangeNotifierProvider<WhatEver>(create: (context) => WhatEver()),
          ChangeNotifierProxyProvider<AuthProvider, ProductList>(
            create: (_) => ProductList(Provider.of<AuthProvider>(context, listen: false)),
            update: (_, auth, productList) => productList..reloadList(auth)
          ),
        ],

即他使用 Provider.of 来获得他的 AuthProvider 所需的 ProductList。您可以使用类似的方法,但我希望它需要在父上下文中创建。

请注意,另一个问题的答案指出需要使用 lazy: false。所以这是你的例子:

  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context) => AuthService(),
      builder: (context, _) => MultiProvider(
        providers: [
          ChangeNotifierProxyProvider<AuthService, Entries>(
            create: (_) =>
                Entries(Provider.of<AuthService>(context, listen: false).user),
            lazy: false,
            update: (_, auth, previousEntries) => Entries(
              auth.user,
            ),
          ),
        ],
        child: MaterialApp(

显然您不再需要使用 MultiProvider,但它并没有什么坏处。