flutter - 异步完成后 Flutter bloc 更新对象状态
问题描述
我正在使用颤振和集团模式。Todo 教程 ( https://bloclibrary.dev/#/fluttertodostutorial?id=bloc ) 很好地解释了这个集团。
但是不,我想使用有关“对象同步已完成/正在运行”的信息来扩展示例应用程序。我附上了一张我对它应该如何工作的想法的图片。
我认为下面的函数正在做类似的事情——改变完整的布尔值。但是如何在异步调用后更改函数以更改 1 obj 的布尔值并将其直接触发到 UI。在 obj 1 之后转到 obj 2,依此类推。
Stream<TodosState> _mapToggleAllToState() async* {
if (state is TodosLoadSuccess) {
final allComplete =
(state as TodosLoadSuccess).todos.every((todo) => todo.complete);
final List<Todo> updatedTodos = (state as TodosLoadSuccess)
.todos
.map((todo) => todo.copyWith(complete: !allComplete))
.toList();
yield TodosLoadSuccess(updatedTodos);
_saveTodos(updatedTodos);
}
}
我希望你能理解我的解释并能帮助我:-)
解决方案
我可以解决我的问题 :-) 我想分享它。
随意添加带有反馈和提示的评论!
Stream<DocsState> _mapTodosSyncToState() async* {
final todos = (state as TodosLoadSuccess).todos;
await for (Todo syncTodo in Stream.fromIterable(todos)) {
List<Todo> updatedTodos = (state as TodosLoadSuccess).todos.map((todo) {
return todo.id == syncTodo.id
? syncTodo.copyWith(task: syncTodo.task + " SYNCING")
: todo;
}).toList();
yield TodosLoadSuccess(updatedTodos);
await Future.delayed(Duration(seconds: 3));
updatedTodos = (state as TodosLoadSuccess).todos.map((todo) {
return todo.id == syncTodo.id
? syncTodo.copyWith(task: syncTodo.task + " COMPLETE")
: todo;
}).toList();
yield TodosLoadSuccess(updatedTodos);
}
}
推荐阅读
- c# - Azure 函数 - 如何传递自定义输入参数
- mysql - 按价格类型分组,计算反映到先前观察的价格变化百分比?
- mysql - 唯一键约束是否在幕后为表创建索引?
- google-sheets - 谷歌表格 - 解析数字/货币
- c# - 从 Dropbox 上的公共共享文件夹下载图像
- android-studio - 在 Recyclerview 中单击项目时如何获取项目的位置?
- html - HTML 解析和颤动
- android - 如何在整个 recyclerview 行上执行检查复选框
- javascript - document.querySelector() 可以找到所有显示动画 GIF 的 IMG 元素吗?
- c - Gdb 奇怪的行为 wrt printf vs strcpy [共享库加载]