扑;小部件的排序列表

Posted

技术标签:

【中文标题】扑;小部件的排序列表【英文标题】:Flutter; Sort List of Widgets 【发布时间】:2021-08-08 09:31:05 【问题描述】:

我目前有一个小部件列表

List<LessonItem> _lessons = [];

此列表中的一个小部件,由用户添加,应如下所示

LessonItem('Bio', 'Mrs Pithan', 'A1.012', HourMinute('08', '00'),
        HourMinute('11', '50'), Colors.green), //lesson, teacher, room, from, to, color

现在我想按小部件中的特定属性对列表进行排序。我该怎么做?

感谢您的帮助!

【问题讨论】:

这能回答你的问题吗? Dart comparison operators 你能详细说明你想要排序的属性......比如时差吗?......顺便说一下,你可以使用 sort() 函数和 comapreTo 函数来获得你的目标结果。见这里Sort method “ListItem”中的“from”属性保存在另一个小部件“HourMinute”(两个字符串)中。我想合并这两个字符串(在本例中为“08”和“00”),将它们转换为整数,然后转换为分钟(第一个字符串 * 60),然后将它们与其他小部件进行比较。最后,我想将它们从最低到最高重新排序。 【参考方案1】:

我会尝试使用 dart 中的排序方法。

您选择要排序的属性,然后定义如何比较任意两个元素。

这里我通过 id 比较每个元素(较小的 id 将在排序后首先出现):

  _lessons.sort((LessonItem a, LessonItem b) => a.id - b.id);

在这种情况下,我按名称排序(使用 String 中的 compareTo() 方法):

  _lessons.sort((LessonItem a, LessonItem b) => a.name.compareTo(b.name));

您可以在以下位置找到更详细的信息和一些示例: dart documentation 和 this helpful post

【讨论】:

是的,谢谢,看起来不错。我在哪里可以插入这种排序方法?如果我直接在列表下执行此操作,我的有状态小部件会出错。我需要一个新功能吗? 嗯,这取决于小部件的结构。您通常应该能够在用项目填充列表后立即调用 sort() 。所以我应该问的一些问题是:1)你的代码看起来如何?和 2) 你得到什么错误信息? 我必须将它包裹在 initState() 中。感谢您的帮助!

以上是关于扑;小部件的排序列表的主要内容,如果未能解决你的问题,请参考以下文章

如何从子小部件调用父小部件中的函数 |扑

为啥我的 Center 小部件在 Dart 中不起作用? |扑

如何将 googleMapController 传递给自定义小部件? (扑)

在其状态类中访问有状态小部件的功能?扑

在模拟器中或根据不同的屏幕尺寸将小部件定位在堆栈中的位置变化。扑

如何在 Flutter 中对 DataTable 小部件上的 Future<List> 数据类型进行排序?