【问题标题】:Order a list in Flutter在 Flutter 中排序列表
【发布时间】:2020-02-17 22:55:27
【问题描述】:

在 ListView(或类似小部件)上排序列表的最佳方法是什么?

我正在使用table_calendar 在日历上显示事件,因此我需要按日期订购不同的事件(该字段已为每个事件创建)。

【问题讨论】:

    标签: flutter


    【解决方案1】:
      final items = List.generate(10, (index) => index + 1);
    
      void order() {
        final ascending = items[0] > items[1];
    
        setState(() {
          if (ascending) {
            items.sort();
          } else {
            items.sort((a, b) => b - a);
          }
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return ListView.builder(
            itemCount: items.length + 1,
            itemBuilder: (context, index) {
              if (index == items.length) {
                return FlatButton(
                  onPressed: order,
                  child: Text("Order"),
                );
              }
    
              return Center(child: Text("Entry ${items[index]}"));
            });
      }
    

    【讨论】:

    • 所以基本上每次我加载我的小部件时都会渲染
    • 我不明白你的意思?
    • 基本上我会在拥有日历的每一天至少点击一次,所以我想我们需要一直运行这些过滤器来重新排序事件。我想ListView 中没有这样的按字段排序的方法,但我只是想知道是否可以避免额外的工作(也许我只是想多了,因为这对应用程序来说并没有太多的工作)
    • 我来自 JS,所以我有点担心我想避免这些额外的循环。不知道这是否是个问题
    • 从头开始重建部分 UI 而不是修改它是可以的。 Flutter 的速度足以做到这一点,如果需要的话,即使在每一帧上。
    【解决方案2】:

    下面的示例显示了如何按升序或降序排列日期列表:

    final list = [
          DateTime.now(),
          DateTime.now().subtract(Duration(days: 1)),
          DateTime.now().subtract(Duration(days: 2)),
          DateTime.now().subtract(Duration(days: 3)),
        ];
    
        //Order By Descending
        list.sort((a, b) => a.isAfter(b) ? -1 : 1);
    
        //Order By Ascending
        list.sort((a, b) => a.isBefore(b) ? -1 : 1);
    
        for (var item in list) {
          print(item);
        }
    

    排序可用于任何集合,用于比较日期字段的事件列表

    【讨论】:

      猜你喜欢
      • 2020-03-16
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 2022-01-22
      • 2019-12-10
      • 1970-01-01
      相关资源
      最近更新 更多