4

状態管理に flutter_bloc を使用していて、この問題に遭遇しました。フィールドを更新して保存すると、BlocBuilder がページを更新しません。追加または削除時に正常に機能しています。ここで何が間違っているのかわかりません。

別の画面に移動してこの画面に戻っても、ファイルが更新されているにもかかわらず、古いデータが表示されます。

これを無駄にデバッグしようとして2時間以上費やしました。初期化してupdatedTodos = []から、各 todo を 1 つずつ追加して、それが何かを行うかどうかを確認しようとしましたが、それもうまくいきませんでした。

ここで何か助けていただければ幸いです。

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 が更新されるかを期待しています。

4

2 に答える 2