Dart 颤振:修改项目时,我的列表视图不会更新

Dart 颤振:修改项目时,我的列表视图不会更新,dart,flutter,bloc,Dart,Flutter,Bloc,我正在开发一个使用BloC架构模式的“todo”Flatter应用程序 我的“主页”界面显示待办事项列表,用户可以单击项目按钮将状态从待办事项更改为完成 当一个项目完成时,它应该以不同于其他未完成TODO的另一种颜色显示 但当我单击“完成”按钮时,列表视图不会更新 下面是我的UI代码: 类主页扩展了无状态小部件{ 最终托托存款_托托存款; 最后的家园集团; HomePagethis.\u todoRepository:this.bloc=HomeBloc\u todoRepository; @凌

我正在开发一个使用BloC架构模式的“todo”Flatter应用程序

我的“主页”界面显示待办事项列表,用户可以单击项目按钮将状态从待办事项更改为完成

当一个项目完成时,它应该以不同于其他未完成TODO的另一种颜色显示

但当我单击“完成”按钮时,列表视图不会更新

下面是我的UI代码:

类主页扩展了无状态小部件{ 最终托托存款_托托存款; 最后的家园集团; HomePagethis.\u todoRepository:this.bloc=HomeBloc\u todoRepository; @凌驾 小部件构建上下文上下文{ 返回脚手架 正文:中 孩子:StreamBuilder 流:bloc.todos, 生成器:上下文、快照{ 返回列表视图 子项:snapshot.data.map\u buildItem.toList, ; }, , ; } 小部件\u buildItemTodo todo{ 如果要完成{ 返回completedtodo; }否则{ 返回未完成的todo; } } 小部件不完整todo todo{ 返回物料按钮 textColor:Colors.white, 颜色:颜色。绿色, 孩子:文本完成, 按下按钮:{ bloc.done.addtodo; } ; } 小部件已完成待办事项{ 返回物料按钮 textColor:Colors.white, 颜色:颜色,红色, 孩子:文本取消, 按下按钮:{ bloc.done.addtodo; } ; } } 这是我的集团课程:

阶级家庭集团{ 最终_gettossobject=出版主题; 最终_doneTodoSubject=出版主题; 最终_cancelTodoSubject=出版主题; 最终托托存款_托托存款; var_todos=[]; Stream get todos=>\u gettodossobject.Stream; Sink get done=>\u doneTodoSubject.Sink; Sink get cancel=>\u doneTodoSubject.Sink; HomeBloctThis.\u to存款{ _盖托多斯,那么{ _gettossObject.add_todos; }; _doneTodoSubject.listen_doneTodo; _CancelToDoObject.listen\u cancelTodo; } Future\u gettoos异步{ 等待(todoRepository.getAll.thenlist){ _todos=列表; }; } 无效{ todo.complete=true; _updatetodo; } void\u取消todo todo异步{ todo.complete=false; _updatetodo; } void\u updateTodo todo异步{ wait_todoRepository.savetodo; _盖托多斯; } }
这是因为在调用getTodos后,您不会刷新列表。下面是修改:

HomeBloc(this._todoRepository) {
    _getTodos() //Remove the adding part it's done in the function

    _doneTodoSubject.listen(_doneTodo);

    _cancelTodoSubject.listen(_cancelTodo);
  }

  Future<Null> _getTodos() async {
    await _todoRepository.getAll().then((list) {
      _todos = list;
      _getTodosSubject.add(list); //You can actually remove the buffer _todos object 
    });
  }
正如我在评论中提到的,您可以删除_todos缓冲区,但我不想对您的代码进行太多的折射

有了这几次调整,它应该可以工作了。
希望能帮上忙

谢谢,它很管用_getToDosObject.sink.addlist;也行。你知道这两者有什么不同吗?