问题标签 [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 回答
1053 浏览

listview - ListView 不显示带有 BLoC 模式的项目

我是一个颤振初学者,我目前正在开发一个应用程序,它可以让我拍照,然后更新 ListView 以在下面显示带有一点文字描述的照片。两者都放置在卡片内。我已经设法让它正常工作。最近我深入研究了 BLoC 模式,并尝试在这个应用程序上实现它。问题是即使快照包含添加的数据,ListView 也不显示流中的内容。

这是我的主要内容:

这是我的 HomePage 代码,其中包含暴露给 streamOutput 的 ListView

我知道当我打印(快照)包含添加的照片的列表时,StreamBuilder 会收到数据。

我在这里输入数据;

这是集团:

最后是 ManageListEvent 类

基本上我想导航到一个新页面,在那里我有我刚刚拍摄的照片,添加一些描述,将它放在接收器中,然后导航回主页。但是 ListView 不会使用新的小部件重新呈现,即使它通过快照接收它也是如此。提前感谢您的回答和您的时间

0 投票
2 回答
2269 浏览

dart - 使用 Inherited Widget 时如何处理 bloc?

我使用blocand制作了一个简单的应用程序InheritedWidget。以下是代码

我不明白在使用时如何调用 bloc 的 dispose 方法InheritedWidget。当然,我可以创建一个全局变量 bloc 并避免使用InheritedWidgetbloc 中存在的 dispose 方法来处理 bloc 但我真的想使用InheritedWidget.

使用PublishSubjectfrom是否会自动rxdart处理streamcontroller,是否具有生命周期意识,我在文档中找不到与此相关的任何内容。是否有任何调试过程以确保streamcontroller正确处理?

0 投票
1 回答
6609 浏览

dart - flutter Bloc模式——导航器后如何访问bloc数据

我有一个有 2 页的应用程序,当主页按钮上的选项卡导航到设置页面时。

但是在设置页面上,来自我的块的流数据都是 NULL。我不知道为什么,在主页上都很好。

我在设置页面的 Bloc 中添加了新数据作为测试,它显示得很好,所以 Bloc 实现工作正常,只是没有在 bloc 构造函数中获取启动的数据。

我做错了什么?

Bloc 数据在 bloc 构造函数中启动,这是我的 Bloc 代码

这是 bloc 如何提供给 main.dart

这是我的设置页面

0 投票
1 回答
10777 浏览

flutter - Flutter - 了解 Provider、Bloc 的生命周期以及何时处置流

需要了解什么时候应该Bloc模式和Bloc的生命周期(如何释放持有内存的对象)

我有一个屏幕,我正在从服务器获取数据,并且数据将仅用于单个屏幕。我正在使用 Bloc 模式来显示数据。

使用 Bloc 模式时,我有一个使用 StatelessWidget 的屏幕。我正在尝试处理“WillPopScope”上的流。一旦处理完毕,流就不能再使用了。因为访问同一个屏幕会导致崩溃,因为我已经用 Bloc 包装了 MaterialApp。

  1. 创建了一个流
  1. 处理流
  1. 在提供者中包装 Material App:
  1. Statelesswidget 'WillPopScope',我评论了代码的处置,因为据我了解,当前 bloc 已创建一次:

第一个问题,假设我创建了一个广播流并删除了“WillPopScope”中的代码处置,那么一切都按预期工作,但我认为,这样,我的 Bloc 为应用程序的生命周期保留了一个内存。

第二个问题,如何处理在屏幕内使用数据的情况。在这种情况下推荐使用 Bloc 模式吗?

0 投票
1 回答
9169 浏览

dart - 如何在颤振中基于同一个流控制器获取多个流?

我有一个 Bloc 类,它需要基于同一个流控制器的三个流。

这是一个有状态的待办事项列表。我想在与检索其他状态的流不同的流中检索具有活动状态的待办事项。

我有一个方法负责过滤并根据过滤器值返回一个流。这是方法:

稍后在小部件中使用,如下所示:

快照到目前为止是空的。我如何过滤我的原始流并根据应用于该流的过滤器返回不同的流?

0 投票
3 回答
2475 浏览

design-patterns - Flutter-如何在 Flutter 的整个应用程序生命周期中将数据保存在内存中?

我想知道,如何保存我在多个屏幕中使用的数据。我们应该在 Flutter 中使用 Singleton 设计模式吗?

假设我使用 BLoC 模式制作了登录模块,例如https://github.com/adamjohnlea/Flutter-Login-With-BLoC-Pattern

现在,如果对于服务器的每个请求,我都需要发送电子邮件和密码。

提供者代码:

集团代码:

1.我应该做单例课吗?AccountManager,我将在哪里存储用户详细信息并在需要的地方获取详细信息?还是我应该使用下面的 Provider 在应用程序的任何地方获取电子邮件和密码?

2. 是否建议将数据保存在 Singleton 类中?

0 投票
2 回答
2442 浏览

flutter - Flutter-如何从 Stream 中获取最后一个值没有 RxDart?

需要知道我是否可以在不使用第三方库的情况下从 Stream 中获取最后一个值。

我尝试的第一种方法是,当我可以将值发送到“changeEmail”中的流时,我可以将 newValue 存储在我的 BLoC 中的某个变量中。这是对的吗?

我尝试的第二种方法是添加一个侦听器,它也将完成与上述相同的工作,我需要将 newValue 存储在某个变量中。

我有蒸汽控制器:

final _emailController = StreamController<String>.broadcast();

有 gitters:

Stream<String> get email => _emailController.stream; // getting data from stream

get changeEmail => _emailController.sink.add; // sending data to stream

0 投票
2 回答
786 浏览

flutter - Flutter:BLoC 包 - bloc 提供者

我正在使用这个包:https ://pub.dartlang.org/packages/bloc 。我有 2 个视图:在第一个视图中,我使用“bloc1”显示元素列表,并且通过 FloatingActionButton,我可以导航到使用“bloc2”的第二个屏幕。在第二个屏幕中,我想通过“bloc1”的 Bloc 提供程序将一个元素添加到我以前的列表中,这样我就可以执行类似bloc1.dispatch(addElement). 我的问题是:如何声明 bloc1 的 bloc 提供者?例如: Bloc bloc = BlocProvider.of<Bloc1>(context)

0 投票
0 回答
1004 浏览

dart - 使用带有 bloc 模式的 RefreshIndicator 小部件时出现问题

我有一个名为 A 的类,它是一个Stateless类,我有一个名为 B 的类,它是一个Stateful

A类的build方法如下

我已经在 B 类中声明了我的 bloc 对象假设在 A 类的主体中,我用 包装SingleChildScrollViewRefreshIndicator那么我应该如何在其刷新属性中调用 Bloc 类的方法,其引用在 B 类中定义。

我想将所有内容移至 B 类并删除 A 类,但这会导致另一个问题,因为我必须Bloc在 init 方法中进行初始化,并且在构建之前调用 init,bloc 将始终导致 null,因为我将BlocProvider InheritedWidget在 B 类的构建方法中使用

0 投票
2 回答
2038 浏览

redux - Flutter 状态管理示例

在复杂的应用程序中,有时“附加”到小部件的全局变量可以通过一些“外部事件”来更改,例如(1)在另一个线程中运行的计时器,或(2)socket.io 服务器发出事件(3 ) 其他 ......

我们称这个全局变量为 gintCount,应用程序有 3 个页面,即:

  1. 第 1 页:需要显示 gintCount 最新值的“动态”页面。
  2. 第 2 页:另一个需要显示 gintCount 最新值的“动态”页面,带有文本输入字段。
  3. 第 3 页:当 gintCount 更改时不执行任何操作的“静态”页面。

假设用户在第 1 页或第 2 页中做某事,我们应该何时何地“刷新”页面以显示可能/可能被外部事件更改的最新值?

我在 Stack Overflow 中阅读了其他问答,据说 Flutter 的状态管理有 4 种方式,它们分别是:

  1. 使用 setState
  2. 使用 ScopedModal
  3. 将 Rxdart 与 BLoC 一起使用
  4. 使用 Redux

由于我是 Flutter 的新手,我完全迷失在 2 到 4 中,所以我使用 no 构建了一个应用程序。1,即setState。展示我们如何在颤动中管理状态。我希望,在未来,我能够(或其他人)通过使用 no 来提供答案。2到4。

让我们看一下以下动画 gif 中正在运行的应用程序:

屏幕截图 Gif

屏幕截图 Gif 链接

在gif中可以看到,在Page 1和Page 2中有一个Global Counter,而Page 3是一个静态Page。

让我解释一下我是如何做到的:

完整的源代码可以在以下地址找到:

https://github.com/lhcdims/statemanagement01

共有 7 个 dart 文件,它们分别是:

  1. gv.dart:存储所有全局变量。
  2. ScreenVariable.dart:获取屏幕的高度/宽度/字体大小等。你可以忽略它。
  3. BottomBar.dart:底部导航栏。
  4. main.dart:主程序。
  5. Page1.dart:第 1 页小部件。
  6. Page2.dart:第 2 页小部件。
  7. Page3.dart:第 3 页小部件。

我们先来看看gv.dart:

我如何模拟更改全局变量 gv.gintCount 的外部事件?

好的,我在 main.dart 中创建了一个线程,它运行计时器'funTimerExternal',并每秒增加 gv.gintCount!

现在,让我们看一下 main.dart:

如您所见,我使用另一个计时器“funTimerDefault”来跟踪 gv.gintCount 的变化,并确定是否应该每 XXX 毫秒调用一次 setState。(XXX 目前设置为 500)

我知道,这很愚蠢!

如何使用 ScopedModal 或 Rxdart 与 BLoC 或 Redux 来创建类似的示例?

在任何人提供任何答案之前,请记住全局变量 gintCount 不会被任何用户交互更改,而是不属于任何小部件的外部事件。例如,您可以将此应用程序视为:

  1. 一个聊天应用程序,'gintCount' 是其他人通过 socket.io 服务器发送给你的消息。或者,

  2. 多人在线游戏,'gintCount' 是另一个玩家在您的屏幕中的位置,由该玩家使用另一部手机控制!