Flutter中的不可变与可观察集合

时间:2019-06-01 10:29:32

标签: flutter dart

在将Flutter与实时数据库(例如Firebase数据库)一起使用时,不仅知道集合已更新,而且知道确切的位置是有益的。例如显示漂亮的list animation,或根据已更新的项目触发一些其他事件。 Dart已经有了amazing infrastructure来传递事件。

一个典型的示例是使用FirebaseAnimatedList,但它已粘贴到Firebase,并且不支持过滤和排序(非常基本的Firebase model除外)。我正在寻找一种更通用的解决方案,该解决方案将允许在数据库(用于通知项目更改/插入/删除)和上述AnimatedList之间注入一些逻辑,后者希望发生相同的事件。

最近的趋势似乎是支持不可变集合,例如built_value,这在Dart中很有意义,因为对象创建是very cheap。但是,不可变集合没有办法告诉哪个项目已更改,它们只是提供了一个新集合。这种方法还使得很难将某些本地信息附加到项上,例如,当用户多选项或自定义排序时,将“已选择”位附加到项上。因为,好吧,项目是不可变的,并且它们的引用(也就是指针,又是对象ID)不断变化。

一个替代解决方案是实现一种可观察的列表,例如package:observable所提供的列表,但是似乎其作者不再相信它的流行了。那么,在Flutter上创建由实时数据库支持的动画列表,筛选列表,排序列表,支持选择列表的方法是什么?

1 个答案:

答案 0 :(得分:0)

  

但是,不可变集合没有办法告诉哪个项目已更改,它们只是提供了一个新集合。

一些伪代码:(old collection) - (new collection) = (what changed)-也可以采用其他方法。

  

这种方法还使得很难将某些本地信息附加到项目上,例如,当用户多次选择项目时,“自选”位或自定义排序。

扩展所说的“项目”并添加属性selected(或order或您想要的其他任何信息),然后仅在正确设置这些属性的情况下构造新列表。

这些天来,有很多关于与Flutter进行状态管理的问题,所以为了避免重复自己,我宁愿将您链接到an answer of mine from earlier today.