问题标签 [bloc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
969 浏览

dart - Flutter 中何时何地调用 API

我正在实现包含三个选项卡的颤振应用程序,在这个应用程序中我使用块模式,块包含 API 调用和流。

现在 API 调用是在块类的构造函数中进行的。

我有三个选项卡,因此它将创建三个实例,FeedListingBlock并且我必须StreamWidgets收听流。

如果我这样做,它会在每次主屏幕状态发生变化时进行 API 调用,因为它会重新绘制选项卡。

那么当我们使用TabBarView类似的小部件时,在哪里调用 API 呢?

我们是否必须在initStatebuild方法中调用API?

0 投票
1 回答
1330 浏览

flutter - BottomNavigationBar 页面更改导致 StreamBuilder 数据重新加载

在底部导航里面我有 2 页。从网络加载数据并显示在 SliverList 中的第一页和显示静态列表数据的另一页。

从第 1 页移动到第 2 页后,第 1 页所有网络数据都消失了。我已经使用了 PageStorageKey 但仍然无法正常工作。但第二页从未重新加载。

为什么第一页没有保存具有 StreamBuilder 的状态?

我的代码:

底部导航页面:

主页:

类 HomePage 扩展 StatefulWidget { HomePage({ Key key, }) : super(key: key); @override _HomePageState createState() => _HomePageState(); }

聊天页面:

类 Chat 扩展 StatelessWidget { Chat({ Key key, }): super (key: key);

0 投票
1 回答
2720 浏览

flutter - Scoped Model、BLoC 模式、StreamBuilder 和 Inherited Widget(或 Model)我应该选择哪一个,为什么?

我想我现在至少对如何在我的应用程序中使用BLoCStream BuilderInherited Widget(或Model)有了一个模糊的想法(没什么特别的,但对我来说这需要时间),但是使用Scoped Model
我有一个一种生存危机:我觉得他们大多可以做同样的事情,或者至少我可以用他们中的任何一个获得相同的明显结果,但我没有能力理解何时 以及为什么一个人比另一个人更好。

0 投票
3 回答
2178 浏览

firebase - Flutter:Firebase 身份验证和 Firestore 快照流

在我的颤振应用程序中,我使用 firebase 进行身份验证和 firestore 数据库。我也在尝试遵循 BLOC 模式。

成功登录后,我需要使用存储在文档中的一些数据来构建我的 UI 屏幕:

现在,一切正常。

Auth 是 Firebase Auth 扩展 InheritedWidget 的包装类,其中 .uid() 方法返回带有用户标识符的 Future。然后我使用 StreamBuilder 构建 UI,通过 uid 获取 DocumentSnapshot。

所以这是我的问题:是否有更好的方法来实现这一点并避免将 StreamBuilder 嵌套在 FutureBuilder 中?

0 投票
2 回答
6391 浏览

dart - 如何在 Flutter 中使用 Bloc 正确设置 DropdownButton 的值?

我是 Bloc 编程模式的新手,在我的 bloc 类中使用 Dropdown 时遇到问题:

在我的小部件页面中,我添加了以下下拉小部件,以便所有内容都由 Bloc 类处理:

但是这样做,在设置 DropdownButton 的值(值:snapshot.data)时出现此错误:

我尝试了很多想法,例如在设置时检查 snapshotValues.data 是否不为空。我知道该值必须是列表中的某个值或 null。但是我放在那里的任何逻辑都没有使这个错误消失。如果我将值设置为 null,它可以工作,但所选值不会显示。我做错了吗?有更好的方法吗?我该如何解决这个问题?谢谢!

0 投票
0 回答
196 浏览

dart - 在 Firestore 中更改后从 BLoC 返回更改

我正在用 Flutter 做一些实验并遇到了一些问题。基本上,我使用带有 BLoC 模式的 Flutter 和 Firestore 作为远程存储。我有这样的事情:

排队:

我想用对象集合返回新状态。如果我只是简单地返回新状态,那么我在StatefulWidget中的构建方法不会被调用。您有什么建议我如何在 Firestore 集合中的每次更改后并基于该重建小部件通过集合传递新状态?

0 投票
1 回答
7183 浏览

dart - Flutter BloC 模式:基于另一个 BloC 的流更新 BloC 流

设想

我正在尝试创建一个具有两个屏幕的 Flutter 应用程序:ContactsScreenEditContactScreen. 在ContactsScreen中,用户将看到一个DropdownButtonTextDropdownButton保存Contact通过 api 获取的对象列表。每当用户从 中选择一个ContactDropdownButton,该Text对象将显示有关该特定联系人的信息。此外,在Contact选择时,RaisedButton将出现一个,单击它时,将引导用户到EditContactScreen编辑选定的Contact。我正在使用 BloC 模式。我创建了两个 BloC,每个屏幕一个:ContactsScreenBlocEditContactScreenBloc. ContactsScreenBloc持有 aStream<Contact>和 aSink<Contact>用于管理选定的Contact. 而EditContactScreenBloc持有流和汇Contact字段。最后,我有一个GlobalBloc包含Contacts 的列表。是GlobalBloc一个InheritedWidget包裹MaterialApp. 该应用程序过于简单,并且是较大应用程序的一部分,因此,我无法合并ContactsScreenBlocand EditContactScreenBloc,并且应该有一个GlobalBloc具有Contacts 列表的应用程序。

问题

我实际上对 Flutter 还很陌生,所以我不确定我的方法是否合理。如果是,那么当用户导航到EditContactScreen并成功更新 时Contact,我如何将其反映在所Contact选中ContactsScreen

代码片段

联系人.dart

全局.bloc.dart

Contacts_screen.bloc.dart

edit_contacts_screen.bloc.dart

global.provider.dart

联系人.screen.dart

edit_contact.screen.dart

0 投票
1 回答
4095 浏览

dart - 如何在 Flutter TextField 中使用 BLOC 模式进行后端验证?

我想创建一个 TextField 来检查数据库中是否存在该值。

如何使用带有TextField小部件的 BLOC 模式进行异步验证?我应该使用StreamTransformer将错误添加到Stream? 我尝试使用DebounceStreamTransformer,但它只是阻止Stream接收新值。

这是我的Observable

这是我的StreamTransformer

这是我的Widget

0 投票
1 回答
267 浏览

oop - 通过字段、方法或 getter 公开 BLOC 流

我正在为我最新的 Flutter 应用程序使用 BLOC 模式,并且我开始在输出流中使用类似这样的东西:

但慢慢地,我发现自己在做类似这样的事情,一段时间后使用一种方法(或吸气剂):

对于想看的人... getter for todosin TodosInteractor

当我查看不同的代码时,我看到第一个示例使用字段而不是方法来公开流,但我不明白为什么我会选择一个而不是另一个。在我看来,创建另一个控制器只是为了推动流有点多……除了在我的 todos 流定义中不可变之外,这还有什么好处吗?还是我只是分裂头发?

0 投票
1 回答
128 浏览

sql - 如何在 BLoC 模式中调用 sink.fromFuture?

我陷入了这种情况:我正在尝试利用 BLoC 模式来处理数据库,但是当我不知道如何在 Stream 的接收器中调用 .fromFuture 时

这是代码:

该错误显然表明

你能帮助我吗?提前谢谢你弗朗切斯科