0

我正在编写我的应用程序,需要使用 ChangeNotifierProxyProvider。不幸的是,我的 ChangeNotifier(在本例中为 Entries)需要 3 个位置参数。我已经设法在更新中指定了参数,但是如何在创建中做到这一点?

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

嘿!我正在编写我的应用程序,需要使用 ChangeNotifierProxyProvider。不幸的是,我的 ChangeNotifier(在本例中为 Entries)需要 3 个位置参数。我已经设法在更新中指定了参数,但是如何在创建中做到这一点?

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

这是我的供应商代码:[]:

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

1 回答 1

0

在这个问题中 ChangeNotifierProxyProvider not started 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,但它不会受到伤害。

于 2021-03-31T11:03:53.377 回答