【问题标题】:Sort a list of different objects with the same property (timestamp) in Flutter/Dart在 Flutter/Dart 中对具有相同属性(时间戳)的不同对象列表进行排序
【发布时间】:2020-07-30 16:12:06
【问题描述】:

我想按日期对包含 2 个不同对象(ClassA 和 ClassB)的列表进行排序,具有相同的属性时间戳“createdAt”。我已经尝试过这个解决方案:

_list.sort((a, b) => a.createdAt.compareTo(b.createdAt));

仅当 _list 包含单一类型的对象(ClassA 或 ClassB)时才有效,但不能同时包含两者。

有人有想法吗? 谢谢。

解决方案:创建一个带有 createdAt 属性的抽象类并在 childs 上实现它

【问题讨论】:

    标签: list sorting flutter dart timestamp


    【解决方案1】:

    我认为问题在于您有一个动态类型的列表。因此,我建议创建一个包含 ClassA 和 ClassB 信息的抽象类,以便 dart 编译器理解。

    List<Parent> _list = [
      ClassA(DateTime(2020, 04, 04)),
      ClassB(DateTime(2020, 03, 04)),
      ClassA(DateTime(2020, 02, 04)),
      ClassB(DateTime(2020, 01, 04))
    ];
    
    _list.sort((a,b)=> b.createdAt.compareTo(a.createdAt));
    
    abstract class Parent {
      DateTime createdAt;
    }
    
    class ClassA implements Parent {
      DateTime createdAt;
      ClassA(this.createdAt);
    }
    
    class ClassB implements Parent {
      DateTime createdAt;
      ClassB(this.createdAt);
    }
    

    这也是一个 CodePen,我可以在其中对列表进行排序。

    https://codepen.io/md-weber/pen/RwWaMgz

    【讨论】:

    • 谢谢,这就是解决方案。就我而言,由于 fromJson 方法,createdAt 是从 firebase 获取的,所以我收到错误“方法 'compareTo' 在 null 上被调用”。你知道如何解决这个问题吗?
    • 您可以使用多种方法,您可以使用 where 子句删除空值。或者您可以改进您希望如何处理空值的排序功能。我用其中一个选项更新了 codepen。
    • 我解决了这个问题,createAt 在 B 类上为空,现在可以正常工作了。感谢您的时间和我不知道的 where 子句提示
    猜你喜欢
    • 2020-03-08
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多