我正在使用flutter_bloc进行状态管理,并着手解决此问题。在更新字段并保存它时,BlocBuilder不会刷新页面。添加或删除时,它工作正常。我不确定我在做什么错。
即使我转到其他屏幕并返回此屏幕,即使文件已更新,它仍然显示旧数据。
我花了2个多小时试图调试它,但无济于事。我尝试初始化updatedTodos = []
,然后将每个待办事项一一添加,以查看是否有作用,但这也不起作用。
这里的任何帮助将不胜感激。
TodosBloc.dart:
Stream<TodosState> _mapUpdateTodoToState(
TodosLoaded currentState,
UpdateTodo event,
) async* {
if (currentState is TodosLoaded) {
final index = currentState.Todos
.indexWhere((todo) => event.todo.id == todo.id);
final List<TodoModel> updatedTodos =
List.from(currentState.todos)
..removeAt(index)
..insert(index, event.todo);
yield TodosLoaded(updatedTodos);
_saveTodos(updatedTodos);
}
}
todos_screen.dart:
...
Widget build(BuildContext context) {
return BlocBuilder(
bloc: _todosBloc,
builder: (BuildContext context, TodosState state) {
List<TodoModel> todos = const [];
String _strings = "";
if (state is TodosLoaded) {
todos = state.todos;
}
return Expanded(
child: ListView.builder(
itemCount: todos.length,
itemBuilder: (BuildContext ctnx, int index) {
return Dismissible(
key: Key(todo.toString()),
child: DetailCard(
todo: todos[index],
),
);
},
),
);
...
我希望BlocBuilder何时被调用并刷新ListView。
答案 0 :(得分:1)
我能够在github上的Felix Angelov的帮助下解决此问题。 问题是我正在扩展Equatable,但没有将道具传递给TodoModel类的超类。我必须用super([])更新TodoModel的构造函数。