【问题标题】:Was unable to sort a list of objects in flutter无法对颤动的对象列表进行排序
【发布时间】:2019-12-03 12:36:35
【问题描述】:

我正在处理一个项目,我需要对其中包含对象的列表进行排序,但它给出了错误。

The expression here has a type of 'void', and therefore can't be used.

这是我的代码:-

    @override
  void initState() {
    super.initState();
    subscription = collectionReference.snapshots().listen((datasnapshot) {
      setState(() {
        messageList = datasnapshot.documents
            .map(
              (v) => Message(
                  message: v.data['msg'],
                  sender: v.data['sender'],
                  imgUrl: v.data['imgUrl'],
                  id: v.data['id']),
            )
            .toList().sort((m, m2) => int.parse(m.id).compareTo(int.parse(m2.id)));


      });
    });
  }

它在排序方法中引发错误:-

.toList().sort((m, m2) => int.parse(m.id).compareTo(int.parse(m2.id)));

我应该怎么做才能修复它,或者有没有其他方法可以对对象列表进行排序。

还有一个额外的问题。我的 Firestore 集合中的文档没有按时间顺序添加。所以,我必须手动完成。有谁知道为什么它们没有按时间顺序默认排序?

提前致谢。

【问题讨论】:

  • 感谢编辑。我英语不是那么好。我会改进它。谢谢
  • 文档未按时间顺序添加,因为这是在查询级别完成的。添加新文档时已自动应用索引,这就是查询快速排序文档的方式。

标签: firebase sorting flutter dart google-cloud-firestore


【解决方案1】:

sort 方法不返回列表,它是一个 void 函数。你应该这样做:

messageList = datasnapshot.documents
        .map(
          (v) => Message(
              message: v.data['msg'],
              sender: v.data['sender'],
              imgUrl: v.data['imgUrl'],
              id: v.data['id']),
        )
        .toList()

messageList.sort((m, m2) => int.parse(m.id).compareTo(int.parse(m2.id)));

【讨论】:

  • 是的,这完全有道理。感谢您的回答。从几个小时开始,我一直在为此而苦苦挣扎。非常感谢。再次感谢。
  • 我找不到这个答案和问题中的代码之间的区别。您是否对其进行了编辑以匹配此答案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2016-11-03
  • 2018-10-20
  • 1970-01-01
相关资源
最近更新 更多