跨多个视图和其他提供商内部的Flutter提供商



这里的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更改的通知

最新更新