如何在 Flutter 中管理对象列表流?
Posted
技术标签:
【中文标题】如何在 Flutter 中管理对象列表流?【英文标题】:How to manage a stream of List of objects in Flutter? 【发布时间】:2019-09-30 07:58:14 【问题描述】:我这几天一直在研究 Flutter,我正在尝试制作一个简单的 ToDo 应用,作为一个学习项目。我正在尝试实现类似 BLoC 的东西。 ListItem 小部件列表是使用 ListView.builder 构建的,包装在 StreamBuilder 中。我已经实现了一个 StreamController''>',每当我向列表中添加一个新注释时,我都设法将它添加到一个临时列表中,然后通过 StreamSink 传递列表,虽然我怀疑每次添加项目时它都会重建整个 ListView。
我正在尝试逐步学习,以孤立地理解流。有什么更好的方法来实现这一点?我只能找到 Stream 等简单类型的示例,但无法找到 Lists 等复杂类型的示例。
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 添加一个新条目。我试图不使用任何外部包,因为我只想学习基础知识。
【问题讨论】:
是的,每次添加项目时它都会重建整个ListView
。 - 没有任何问题
【参考方案1】:
对于从列表中添加和删除项目,重建整个列表没有任何问题(这就是它应该工作的方式)。
但是,为了不断更新列表中的项目,您可以为每个项目设置一个子流,以便在项目更改时仅更新该项目。
【讨论】:
你有什么例子吗?如何使用流控制器更新列表中的项目以上是关于如何在 Flutter 中管理对象列表流?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter listview streambuilder 中停止自动滚动?
如何在 Flutter 的同一屏幕中管理两个带有数据的 ListView