这里的Flutter新手,我目前正在使用我的状态管理提供者,并有几个问题,它实际上是如何工作的。
我是这样声明我的提供者的…
main.dart
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider<ProviderFoo>(create: (_) => ProviderA(),
ChangeNotifierProvider<ProviderBar>(create: (_) => ProviderB(),
],
),
);
ProviderFoo和ProviderBar类都扩展了ChangeNotifier。
问题1:
如果我有两个不同的视图,我需要在两个视图上使用FooProvider,所以
widget1.dart
var providerOneFoo = Provider.of<FooProvider>(context);
widget2.dart
var providerTwoFoo = Provider.of<FooProvider>(context);
是否providerOneFoo与providerTwoFoo相同,即使它们在两个单独的文件上?是提供商。创建提供程序的新实例或只是引用全局实例,设置在小部件树的顶部,我们在MultiProviders中声明它们?
问题2:
是否有任何设计缺陷,如果我在一个提供程序作为参数传递在另一个提供程序的函数?
widget1.dart
var fooProvider = Provider.of<FooProvider>(context);
var barProvider = Provider.of<BarProvider>(context);
fooProvider.someFunction(barProvider);
provider_foo.dart
class FooProvider extends ChangeNotifier{
...
void someFunction(barProvider) {
barProvider.someVar = 0;
notifyListeners();
}
}
如果可能的话,我可以将外部提供者作为另一个提供者的属性吗?
谢谢:)
问题1
使用Provider<ProviderClass>.of(context)
总是引用所提供的相同的全局提供者(没有双关语)
问题2
最好在providerBar
上实现该方法,并从中调用notifyListeners()
。
在您的示例中,在FooProvider
中调用notifyListeners()
只会通知侦听器FooProvider.
如果某个小部件依赖于BarProvider
,在您的示例中,它将不会收到barProvider.someVar
更改的通知