异步完成后 Flutter bloc 更新对象状态
Flutter bloc update object state after async finish
我正在处理 flutter 和 bloc 模式。 Todo 教程 (https://bloclibrary.dev/#/fluttertodostutorial?id=bloc) 很好地解释了 bloc。
但不,我想使用有关 "object sync completed/running" 的信息扩展示例应用程序。我附上了一张图片,上面写着我对它应该如何工作的想法。
我认为下面的函数在做类似的事情——改变完整的布尔值。但是如何更改函数以在异步调用后更改 1 个对象的布尔值并将其直接触发到 UI。在对象 1 之后转到对象 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);
}
}
我正在处理 flutter 和 bloc 模式。 Todo 教程 (https://bloclibrary.dev/#/fluttertodostutorial?id=bloc) 很好地解释了 bloc。
但不,我想使用有关 "object sync completed/running" 的信息扩展示例应用程序。我附上了一张图片,上面写着我对它应该如何工作的想法。
我认为下面的函数在做类似的事情——改变完整的布尔值。但是如何更改函数以在异步调用后更改 1 个对象的布尔值并将其直接触发到 UI。在对象 1 之后转到对象 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);
}
}