问题标签 [flutter-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.
flutter - Flutter Bloc 未重建状态
我已经使用 flutter_bloc 包实现了一个简单的块:
与此事件:
这个状态:
我的用户界面如下所示:
不幸的是,如果我使用 MaterialButton 添加我的事件,则 Load() 状态将被忽略。UI 不会重建 Load 状态。输出如下:
I/flutter (1955):屈服状态:“负载”实例
I/flutter (1955):屈服状态:“初始化”实例
I/flutter (1955):构建状态:“Init”实例
asynchronous - 颤振和块异步产量
我正在使用带有 BLoC 模式的颤振(使用 flutter_bloc 库)并且我有这些事件:
PersonalFileAddedEvent(File file), PersonalFileUploadEvent(PersonalFile file)
(都从 延伸PersonalFileEvent
)
File 是来自文件选择器的文件, PersonalFile 是具有以下枚举状态的类:READY_TO_UPLOAD, UPLOADING, UPLOAD_FINISHED
.
而来自 BLoC 的这个状态:
PersonalFileListLoadedState(List<PersonalFile> files)
(从 扩展PersonalFileListState
)
当用户选择一个文件时,UI 调用该事件PersonalFileAddedEvent
并将其传递给 BLoC,该 BLoC 创建一个PersonalFile
对象并将其状态设置为READY_TO_UPLOAD
. 该PersonalFile
对象被添加到包含用户正在添加(和上传)的所有 PersonalFile 的列表中。然后 BLoC 向 UI 响应 ( yield
)PersonalFileListLoadedState(blocPersonalFileList)
以呈现信息。
添加后,“立即上传”按钮将在 UI 中呈现PersonalFile
。按下时,这会调用PersonalFileUploadEvent
事件并将 发送PersonalFile
到 BLoC 以启动上传过程(分段上传)。接收到事件后,BLoC 立即更新此 PersonalFile 的状态,UPLOADING
并为 UI 更新 PersonalFileyield
的PersonalFileListLoadedState
状态以显示它正在上传。
上传多部分文件的方法是异步的:
这是来自 flutter_bloc 的 mapEventToState:
在此mapEventToState
方法中,我正在等待上传方法将 PersonalFile 的状态更新为UPLOAD_FINISHED
.
问题现在开始了,因为用户从文件选择器中添加了几个文件,然后按下了所有的“上传”按钮。BLoC 在接收到第一个事件并处理“同步”事件后被阻塞,并且 UI 保持就好像在第一个完成(然后是下一个,依此类推)之前没有按下另一个 PersonalFile 的“上传”按钮。
在一个事件得到完全处理(上传完成)后,下一个事件得到处理,这是有道理的,因为我正在等待上传方法完成。
我如何编写此代码,以便如果用户在 UI 中按下多个“上传”按钮,BLoC 不会被阻止(因此 UI 因为 BLoC 无法进入yield
新状态)并且所有文件都被并行上传但只有在每个人完成 BLoC 才会发送新List
的PersonalFile
状态更改为UPLOAD_FINISHED
?
我尝试将上传方法的签名更改为:
并使用:
但里面的代码永远不会被执行。我尝试调试,但无法到达断点。
flutter - 带有颤振块的滚动控制器
我有这堂课:
基本上,我想要的是在添加新项目时滚动列表视图,但是,由于还没有附加的滚动视图,所以sc.hasClients
总是返回false 。
有一种不使用延迟的方法(使用延迟听起来很糟糕)?
flutter - Flutter BLoC:如何在 Navigator.push 之后添加新事件而不用 BlocProvider 包装 MaterialApp
所以我有ExploreScreen
一个启动我的 BLoC FilteredRecipesBloc的屏幕。在此屏幕内,有一个导航到新屏幕的按钮FilterScreen
。从 中FilterScreen
,我想添加一个影响两个屏幕的新事件。现在的问题是我收到此错误消息(onError Bad state: Cannot add new events after call close)。如果不使用 BlocProvider 包装 MaterialApp,这可能吗?我只想让本地集团访问两个屏幕。
探索屏幕:
过滤屏幕:
flutter - 缺少具体实现“getter Equatable”/道具问题
我正在研究许多关于 bloc 的教程,并且遇到了一些不一致的问题。
我正在使用 Android Studio 并使用 Intellij v1.6.0 中的插件创建 bloc 代码。
对于 bloc_event,我继续看到类似这样的示例。
当我生成我的 bloc 文件并查看生成的初始 _event 文件时,它看起来像这样。
如果我修改生成的代码以包含以下内容...
然后我收到以下错误“位置参数太多,预期为 0,找到 1”,它引用了上面显示的行末尾的道具。
如果我保留我的代码,因为它是由 bloc 插件生成的,然后尝试通过添加以下内容来实现我的事件......
然后我得到一个错误“缺少'getter Equatable.props'的具体实现
这是我目前的 bloc/song_event.dart
问题 我是否应该使用 FuitEvent 示例中包含道具的行?
我不明白我在这里缺少什么以及为什么当我尝试使用与许多教程中所示相同的方法时它显示错误。
flutter - BlocBuilder 没有更新状态变化
我正在尝试使用 BLOC 模式实现播放器。当我更改 mapEventToState() 方法中的状态时,BlocBulder() 小部件未按预期更新。
这是 PlayerBloc:-
这是 BlocBuilder:-
任何帮助将不胜感激。
api - Flutter 页面间共享块
我有一个基本的颤振应用程序,有 2 页和 1 个块。
- 主页显示用户列表(只有2个属性)
- 单击用户项目时,详细信息页面会显示所有属性
使用发出 2 个状态的块来获取用户数据
- 来自 api domain.com/users 的 AllUsersLoadedState
- 来自 api domain.com/users/id 的 UserLoadedState
因为当我导航到详细信息页面并点击后退按钮时,主页和详细信息页面在其 BlocBuilder 中使用相同的块,所以主页崩溃了。
有什么方法可以在不编写 2 个单独的块的情况下处理它?
flutter - Streambuilder没有在颤动的对话框内被调用
我正在使用下面的代码。我单击某个按钮,如果我的 OTP 匹配下面的方法被调用。在那种方法中,我正在调用 bloc。我正在使用的小部件是 Statefulwidget。
flutter - Flutter Bloc 冲突状态
在https://bloclibrary.dev/上提供的教程的帮助下,我正在尝试使用 Bloc 构建登录活动。我已经成功地将表单验证和登录流程组合到一个工作解决方案中,但是当添加一个按钮来切换密码可见性时,事情发生了混乱。
想我会遵循与验证和登录状态相同的格式(小部件的 onPressed 触发一个事件,块处理它并更改状态以更新视图),但由于状态是互斥的,切换密码可见性会导致其他信息(如验证错误或加载指示器)消失,因为它们需要显示的状态不再是活动状态。
我认为避免这种情况的一种方法是使用单独的 Bloc 来处理密码切换,但我认为这涉及在我看来嵌套第二个 BlocBuilder,更不用说实现另一组 Bloc+Events+States,这听起来像随着事情变得越来越复杂,可能会使代码更难理解/导航。这是 Bloc 的使用方式,还是有一种更清洁的方法可以更好地避免这种情况?
flutter - 嵌套 BlocBuilders 以管理同一个小部件上的多个状态
我想将文本 Update BlocBuilder 嵌套在另一个 BlocBuilder 中,该 BlocBuilder 通过滑块小部件控制其字体大小。但是,我无法让它工作。请帮忙!
这是 TextField Bloc 的代码...(当然它们在单独的文件中)。
这是设置块的代码...(它们也在单独的文件中)。