如何在 flutter Provider 中为单个小部件使用多个消费者
How to use multiple Consumers for a single widget in flutter Provider
我无法将 多个消费者 用于具有提供者的单个小部件?假设我的小部件是 CurvedNavigationBar 并且我在该小部件中有 4 个项目。我还有 4 个不同的 class 扩展 ChangeNotifier 并且 负责 CurvedNavigationBar 中的每个项目。
如何在单个小部件中收听这 4 个更改通知程序?我查看了文档,找不到这样的例子。这有可能吗?我发现 Consumer 有一个 builder 方法,所以这意味着你可以构建一个 widget 只 once/and 听一次。
我是否应该有一个 class 来扩展 ChangeNotifier 然后更新该小部件中的值并仅使用一个消费者来侦听更新的值?
还有一些其他 Consumer
小部件。 Consumer2
、Consumer3
、Consumer4
直到 Consumer6
。如果你想听 4 ChangeNotifier 你可以使用 Consumer4
Consumer4(
builder: (context, changeNotifier1, changeNotifier2, changeNotifier3, changeNotifier4, child) {
// your widget
}
)
是的,您最多可以添加 6 个消费者,如下所示
Consumer2<AuthProvider, StorageProvider>(
builder: (context, authProvider, storageProvider, child) {
}
)
还有另一种访问您的提供商的方法:Provider.of<SomeProvider>(context)
:
Widget build(BuildContext context) {
final authProvider = Provider.of<AuthProvider>(context);
final apiProvider = Provider.of<ApiProvider>(context);
final storageProvider = Provider.of<StorageProvider>(context);
// Do your usual stuff without wrapping it into Consumer,
// just pass providers directly to your targets.
return MyAwesomeWidget(
authProvider,
apiProvider,
storageProvider,
);
}
我无法将 多个消费者 用于具有提供者的单个小部件?假设我的小部件是 CurvedNavigationBar 并且我在该小部件中有 4 个项目。我还有 4 个不同的 class 扩展 ChangeNotifier 并且 负责 CurvedNavigationBar 中的每个项目。
如何在单个小部件中收听这 4 个更改通知程序?我查看了文档,找不到这样的例子。这有可能吗?我发现 Consumer 有一个 builder 方法,所以这意味着你可以构建一个 widget 只 once/and 听一次。
我是否应该有一个 class 来扩展 ChangeNotifier 然后更新该小部件中的值并仅使用一个消费者来侦听更新的值?
还有一些其他 Consumer
小部件。 Consumer2
、Consumer3
、Consumer4
直到 Consumer6
。如果你想听 4 ChangeNotifier 你可以使用 Consumer4
Consumer4(
builder: (context, changeNotifier1, changeNotifier2, changeNotifier3, changeNotifier4, child) {
// your widget
}
)
是的,您最多可以添加 6 个消费者,如下所示
Consumer2<AuthProvider, StorageProvider>(
builder: (context, authProvider, storageProvider, child) {
}
)
还有另一种访问您的提供商的方法:Provider.of<SomeProvider>(context)
:
Widget build(BuildContext context) {
final authProvider = Provider.of<AuthProvider>(context);
final apiProvider = Provider.of<ApiProvider>(context);
final storageProvider = Provider.of<StorageProvider>(context);
// Do your usual stuff without wrapping it into Consumer,
// just pass providers directly to your targets.
return MyAwesomeWidget(
authProvider,
apiProvider,
storageProvider,
);
}