Блок Flutter: BlocBuilder не вызывается после обновления, ListView по-прежнему отображает старые данные - PullRequest
0 голосов
/ 03 апреля 2019

Я использую 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.

1 Ответ

3 голосов
/ 04 апреля 2019

Мне удалось решить эту проблему с помощью Феликса Ангелова на github. Проблема в том, что я расширяю Equatable, но не передаю реквизиты суперклассу в классе TodoModel. Мне пришлось обновить конструктор TodoModel с супер ([]).

...