我正在编写我的应用程序,需要使用 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,
),
),
],
答案 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
,但它并没有什么坏处。