如何在Flutter中管理对象列表流?

时间:2019-05-13 10:58:39

标签: dart flutter stream bloc

我已经忙了几天了,我正在尝试制作一个简单的ToDo应用,作为一个学习项目。我正在尝试实现类似BLoC的功能。 ListItem小部件的列表是使用ListView.builder构建的,并包装在StreamBuilder中。我已经实现了StreamController'<'List'<'Note'>'>',并且每当我向列表中添加新的Note时,我都设法将其添加到临时列表中,然后通过StreamSink传递列表,尽管我怀疑每次添加一个项目时它都会重建整个ListView。

我正在尝试逐步学习,以孤立地了解流。有什么更好的实现方法?我只能找到诸如Stream之类的简单类型的示例,而找不到诸如List之类的复杂类型的示例。

class Note {
  String title, note;
  Note(this.title, this.note);
}

class ListBloc {
  final notes = <Note>[];

  final _controller = StreamController<List<Note>>.broadcast();
  get controllerOut => _controller.stream.asBroadcastStream();
  get controllerIn => _controller.sink;

  addNewNote(Note note) {
    notes.add(note);
    controllerIn.add(notes);
  }

  void dispose() {
    _controller.close();
  }
}

我确信有更好的方法,它将为ListView添加一个新条目。因为我只想学习基础知识,所以我尝试不使用任何外部软件包。

1 个答案:

答案 0 :(得分:0)

要在列表中添加和删除项目,重建整个列表没有错(这就是它应该起作用的方式)。

但是,要不断更新列表中的项目,您可以为每个项目设置一个子流,以便仅在该项目更改时更新该项目。