gpt4 book ai didi

flutter - BLoC:如何通过呢?

转载 作者:IT王子 更新时间:2023-10-29 06:53:12 26 4
gpt4 key购买 nike

我想知道通过 Bloc 的最佳方式。我阅读了有关 bloc 提供程序的信息,但是使用它们与仅在构造函数中传递 bloc 之间有什么区别,例如:

ExampleView X = ExampleView(bloc,...)

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

XBlocProvider(
bloc: XBloc,
child: YBlocProvider(
bloc: Y,
child: ZBlocProvider...
)

也许这只是我缺乏知识。那么,有哪些好处呢?

最佳答案

这个问题:

ExampleView X = ExampleView(bloc,...)

只有当您将 bloc 用作带有一些 Stream\ValueNotifier 的普通类/提供者时才有意义。否则会有一些问题。

如果是global bloc,通过它是比较费力的方式。您应该在 MaterialApp 之上使用 XBlocProvider

顺便说一句,如果它是全局/顶级 Bloc ,您可以这样做:

XBlocProvider(
bloc: xBloc, // Singleton
child XPage,
...

这样,您就可以从应用程序的任何位置访问此 bloc,并且您还可以收听

如果是本地 bloc,因为我们通过 InheritedWidgetupdateShouldNotify 方法监听 BlocChangeNotifierProvider ,作为 constructor 传递是没有意义的,因为您不能按预期直接使用它。您需要将该实例放入 BlocProvider 中并再次使用它,所以这是额外的工作。

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

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

例子:

MultiBlocProvider(
providers: [
XProvider(...),
YProvider(...),
ZProvider(...),
],
child: someWidget,
)

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

最后,尝试理解每一种方法,我特别建议你掌握这篇文章:

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

您会了解何时将 bloc 与提供者一起使用或作为单例或像您的示例一样实例化等。

关于flutter - BLoC:如何通过呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56163563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com