Flutter按日期分组列表插件grouped_list_by_date的使用

Flutter按日期分组列表插件grouped_list_by_date的使用

Grouped List by Date

一个用于轻松按日期类别(如今天、昨天、本周、上周及更早)对项目进行分组的Flutter包。它简化了按日期分组展示列表的任务,非常适合需要根据时间范围显示内容的应用。


特性

  • 按日期类别分组:今天昨天本周上周更早
  • 通过itemBuilder自定义项目渲染。
  • StatefulWidget无缝集成,支持动态数据更新。
  • 轻量级且易于使用。

开始使用

要在项目中使用此包,请将其添加到项目的pubspec.yaml文件中:

dependencies:
  grouped_list_by_date: ^0.1.2

然后运行以下命令以安装依赖:

flutter pub get

使用示例

以下是一个简单的示例,演示如何在Flutter应用中使用GroupedListByDate包:

import 'package:flutter/material.dart';
import 'package:grouped_list_by_date/grouped_list_by_date.dart';
import 'package:intl/intl.dart'; // 用于格式化日期

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: GroupedListExample(),
    );
  }
}

class GroupedListExample extends StatelessWidget {
  // 定义一组带日期的项目
  final List<Map<String, dynamic>> items = [
    {'name': '任务 1', 'date': DateTime.now()}, // 当前日期
    {'name': '任务 2', 'date': DateTime.now().subtract(const Duration(days: 1))}, // 昨天
    {'name': '任务 3', 'date': DateTime.now().subtract(const Duration(days: 3))}, // 前几天
    {'name': '任务 4', 'date': DateTime.now().subtract(const Duration(days: 8))}, // 上周
    {'name': '任务 5', 'date': DateTime.now().subtract(const Duration(days: 10))}, // 更早
  ];

  GroupedListExample({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('按日期分组列表'),
      ),
      body: GroupedListByDate(
        items: items, // 数据源
        itemCount: items.length, // 数据数量
        groupByParameter: 'date', // 按日期分组
        stickyHeader: true, // 粘性头部
        headingChild: (heading) => Padding(
          padding: const EdgeInsets.all(18.0),
          child: Text(
            heading,
            style: const TextStyle(
                fontSize: 18,
                fontWeight: FontWeight.bold,
                color: Colors.white),
          ),
        ), // 自定义分组标题样式
        itemBuilder: (context, item) {
          return Card(
            shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(5)), // 卡片圆角
            child: ListTile(
              title: Text(item['name']), // 列表项标题
              subtitle: Text(DateFormat('dd MMM yyyy').format(item['date'])), // 列表项副标题(日期)
            ),
          );
        }, // 自定义列表项渲染
      ),
    );
  }
}

更多关于Flutter按日期分组列表插件grouped_list_by_date的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter按日期分组列表插件grouped_list_by_date的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


grouped_list_by_date 是一个用于在 Flutter 中按日期分组显示列表的插件。它可以帮助你将列表项按日期分组,并以分组的样式显示在界面上。以下是如何使用 grouped_list_by_date 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 grouped_list_by_date 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  grouped_list_by_date: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入包

在你的 Dart 文件中导入 grouped_list_by_date 包:

import 'package:grouped_list_by_date/grouped_list_by_date.dart';

3. 准备数据

假设你有一个包含日期和内容的列表,例如:

class Item {
  final DateTime date;
  final String content;

  Item(this.date, this.content);
}

List<Item> items = [
  Item(DateTime(2023, 10, 1), 'Item 1'),
  Item(DateTime(2023, 10, 1), 'Item 2'),
  Item(DateTime(2023, 10, 2), 'Item 3'),
  Item(DateTime(2023, 10, 3), 'Item 4'),
  Item(DateTime(2023, 10, 3), 'Item 5'),
];

4. 使用 GroupedListByDate

你可以在你的 Widget 中使用 GroupedListByDate 来显示分组的列表:

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Grouped List by Date'),
      ),
      body: GroupedListByDate<Item>(
        elements: items,
        groupBy: (item) => item.date,
        groupHeaderBuilder: (DateTime date) => Padding(
          padding: const EdgeInsets.all(8.0),
          child: Text(
            '${date.year}-${date.month}-${date.day}',
            style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
          ),
        ),
        itemBuilder: (BuildContext context, Item item) {
          return ListTile(
            title: Text(item.content),
          );
        },
      ),
    );
  }
}
回到顶部