根据提供的列表和参数构建和排序新列表

时间:2018-09-10 05:55:38

标签: dart flutter

我有一个型号列表:

class Model {
final DateTime date;
final String text;

Model({this.date, this.text});
}

List<Model> _models = [
Model(date: DateTime(2018, 9, 1), text: 'Text1',),
Model(date: DateTime(2018, 9, 1), text: 'Text2',),
Model(date: DateTime(2018, 9, 2), text: 'Text3',),
Model(date: DateTime(2018, 9, 3), text: 'Text4',),
Model(date: DateTime(2018, 8, 31), text: 'Text7',),
Model(date: DateTime(2018, 9, 3), text: 'Text5',),
Model(date: DateTime(2018, 9, 3), text: 'Text6',),
];

我想要实现的是从每个模型中获取date参数,并将所有与该日期匹配的模型放入ListView()中。因此,我可以返回每个日期的模型列表。每次我将数据添加到列表时,我都希望它自动更新和按日期排序(没有手动内容)。日期格式在这里并不重要。问题:我该如何实现?

这就是我想要的样子:
2018/9/3
文字4
文字5
文字6

2018/9/2
文字3

2018/9/1
文字1
文字2

2018/8/31
文字7

1 个答案:

答案 0 :(得分:1)

使用现有小部件的简便解决方案;您可以使用side_header_list_view(https://pub.dartlang.org/packages/side_header_list_view

示例:

Widget _buildList(){ 

 return new SideHeaderListView(
      itemCount: _models.length,
      itemExtend: 100.0,
      headerBuilder: (BuildContext context, int index) {
        return Text(_models[index].date);
      },
      itemBuilder: (BuildContext context, int index) {
        return new Card(
          child: Text(_models[index].text),
        );
      },
      hasSameHeader: (int a, int b) {
        return _models[a].date == _models[b].date;
      },
    );

}

还没有测试它,理想情况下应该可以工作,只要提供,您可能需要对字符串类型进行某种日期格式化,然后再将其提供给Text。暂时将其视为伪代码。