首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BLoC:怎么通过?

BLoC:怎么通过?
EN

Stack Overflow用户
提问于 2019-05-16 07:54:27
回答 3查看 4.1K关注 0票数 6

我想知道通过欧盟的最佳方式。我读到了有关集团提供商的文章,但是使用它们和仅仅在构造函数中传递组有什么不同:

代码语言:javascript
复制
ExampleView X = ExampleView(bloc,...)

实际上,我发现这种方法更容易测试,也是保持代码更干净的更好方法。例如,如果我有更多的区块,这样的事情就会发生:

代码语言:javascript
复制
XBlocProvider(
                  bloc: XBloc,
                  child: YBlocProvider(
                      bloc: Y,
                      child: ZBlocProvider...
                    )

也可能是因为我缺乏知识。那么,哪些是好处呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-16 13:18:48

问题是:

代码语言:javascript
复制
ExampleView X = ExampleView(bloc,...)

只有当您将集团作为普通类/提供程序与某些Stream\ValueNotifier一起使用时,才有意义。否则它会有一些问题。

如果它是全球集团,它是更累人的方式通过它。您应该在XBlocProvider之上使用MaterialApp

顺便说一句,如果是全球/顶级集团,您可以这样做:

代码语言:javascript
复制
XBlocProvider(
  bloc: xBloc, // Singleton
  child XPage,
...

这样,您可以从应用程序的任何位置访问该集团,也可以访问listen

如果它是本地的,因为我们通过BlocChangeNotifierProvider通过InheritedWidgetupdateShouldNotify方法收听updateShouldNotify,那么传递为constructor是没有意义的,因为您不能按照您的意愿直接使用它。您需要将这个实例放入BlocProvider中,然后再使用它,所以这是额外的工作。

https://api.flutter.dev/flutter/widgets/InheritedWidget/updateShouldNotify.html

要克服多个嵌套的BlocProvider,可以使用MultiProviderMultiBlocProvider

示例:

代码语言:javascript
复制
MultiBlocProvider(
  providers: [
    XProvider(...),
    YProvider(...),
    ZProvider(...),
  ],
  child: someWidget,
)

有多种传递方式取决于您的需要,但是不要担心InheritedWidget,因为它是获取XBlocProvider的非常快捷和方便的方法。

最后,试着理解每一种方法,我特别建议你抓住这篇文章:

https://www.didierboelens.com/2018/12/reactive-programming---streams---bloc---practical-use-cases/

您将知道什么时候与提供程序一起使用You,或者作为单个实例使用,或者像您的示例那样实例化等等。

票数 7
EN

Stack Overflow用户

发布于 2019-05-16 09:25:16

第一个不同之处是如何从小部件中访问集团。

  • 当您通过构造函数传递它时,可以直接访问它。
  • 那么,当您使用BlocProvider时,在大多数情况下取决于您的bloc实现,您必须通过Provider获得它,后者使用context扩展了InheritedWidget,例如:
代码语言:javascript
复制
final xBloc = Provider.of<XBloc>(context);

更重要的是,当您用bloc包装BlocProvider时,bloc的作用域仅限于这个小部件的子树,因此只能由BlocProvider的后代访问。

票数 1
EN

Stack Overflow用户

发布于 2019-05-16 09:30:15

不必在构造函数中传递组成员是使用提供程序的好处。它通过在InheritedWidget的帮助下向小部件树传播信息,从而降低了应用程序的复杂性。您所需要的只是使用BlocProvider.of(context)从子部件访问这个组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56163563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档