dart - 如何在 Flutter 中管理对象列表流?
问题描述
这几天我一直在涉猎 Flutter,我正在尝试制作一个简单的 ToDo 应用程序,作为一个学习项目。我正在尝试实现类似 BLoC 的东西。ListItem 小部件列表是使用 ListView.builder 构建的,包装在 StreamBuilder 中。我已经实现了一个 StreamController'<'List'<'Note'>'>',每当我向列表中添加一个新注释时,我都设法将它添加到一个临时列表中,然后通过 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 添加一个新条目。我试图不使用任何外部软件包,因为我只想学习基础知识。
解决方案
对于从列表中添加和删除项目,重建整个列表没有任何问题(这就是它应该工作的方式)。
但是,为了不断更新列表中的项目,您可以为每个项目设置一个子流,以便在项目更改时仅更新该项目。
推荐阅读
- asp.net - ListView 中的 ASP.NET DropdownList
- javascript - 在第一个动画 css 的位置开始第二个动画 css
- neural-network - caffe:带有单个过滤器的卷积层的总和
- windows - AWS 命令行界面在通过 MSI 安装后失败
- javascript - MYSQL - 检查 var 是否存在,如果存在则更新
- r - R:如何用 apply 函数替换下面的 for 循环(`cumsum with condition`)?
- regex - 如何在正则表达式的替换中评估表达式
- c# - 如何进行灵活排序
- regex - 如果字符串部分为 31 个字符或更长,则在字符串内匹配
- javascript - 尝试向单个元素添加单击事件,但希望它们一次执行一个