flutter 中有一个需求,在举报列表中有某一天和另一天的数据,如果我想当天的数据放在一起,另一天数据放的外面怎么做呢?代码?
时间: 2024-02-23 14:00:31 浏览: 123
您可以使用 `ListView.builder` 来构建举报列表,然后判断当前项的日期是否与前一项相同,相同则将其添加到同一个 `Card` 中,否则新建一个 `Card`。具体实现代码如下:
```dart
class Report {
String title;
DateTime date;
Report({required this.title, required this.date});
}
class ReportList extends StatefulWidget {
@override
_ReportListState createState() => _ReportListState();
}
class _ReportListState extends State<ReportList> {
List<Report> _reports = [
Report(title: 'Report 1', date: DateTime(2022, 8, 1)),
Report(title: 'Report 2', date: DateTime(2022, 8, 1)),
Report(title: 'Report 3', date: DateTime(2022, 8, 2)),
Report(title: 'Report 4', date: DateTime(2022, 8, 2)),
Report(title: 'Report 5', date: DateTime(2022, 8, 2)),
];
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: _reports.length,
itemBuilder: (context, index) {
final report = _reports[index];
final isSameDate = index > 0 && _reports[index - 1].date == report.date;
return isSameDate ? _buildReportCard(report) : _buildDateCard(report);
},
);
}
Widget _buildReportCard(Report report) {
return Card(
child: ListTile(
title: Text(report.title),
subtitle: Text(report.date.toString()),
),
);
}
Widget _buildDateCard(Report report) {
return Column(
children: [
SizedBox(height: 16),
Text(report.date.toString(),
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
SizedBox(height: 8),
_buildReportCard(report),
],
);
}
}
```
在这个示例中,我们将 `_reports` 列表中的数据按日期分类展示。如果当前项的日期与前一项相同,我们将其添加到同一个 `Card` 中;否则,我们将新建一个日期 `Card`,并将当前项添加到其中。在 `_buildDateCard` 方法中,我们使用 `Column` 来对日期 `Text` 和报告 `Card` 进行布局。
您可以根据自己的实际需求进行修改和优化。
阅读全文