这个问题:
ExampleView X = ExampleView(bloc,...)
仅当您将 bloc 用作带有 some 的普通类/提供者时才有意义Stream\ValueNotifier
。否则会有一些问题。
如果它是全球集团,那么通过它会更费力。您应该XBlocProvider
在MaterialApp
.
顺便说一句,如果它是全球/顶级集团,你可以这样做:
XBlocProvider(
bloc: xBloc, // Singleton
child XPage,
...
这样,您可以从应用程序的任何位置访问此块,您也可以访问listen
它。
如果是 local bloc,因为我们监听的方式Bloc
或者ChangeNotifierProvider
viaInheritedWidget
的updateShouldNotify
方法,传递 as 是没有意义的,constructor
因为你不能按照你的意图直接使用它。您需要将该实例放入其中BlocProvider
并再次使用它,因此这是额外的工作。
https://api.flutter.dev/flutter/widgets/InheritedWidget/updateShouldNotify.html
要克服多嵌套BlocProvider
的 s,您可以使用MultiProvider
or MultiBlocProvider
。
例子:
MultiBlocProvider(
providers: [
XProvider(...),
YProvider(...),
ZProvider(...),
],
child: someWidget,
)
有多种方法可以通过取决于您的需要,但不要担心,InheritedWidget
因为它是获取您的XBlocProvider
.
最后,尝试理解每一种方法,我特别建议你掌握这篇文章:
https://www.didierboelens.com/2018/12/reactive-programming---streams---bloc---practical-use-cases/
您将了解何时将 bloc 与提供程序一起使用或作为单例或实例化(如您的示例等)。