Flutter时间线分组展示插件grouped_timeline的使用

Flutter时间线分组展示插件grouped_timeline的使用

特性

device-2024-03-07-164828
  • Flutter PackageFlutter Package

  • 单元测试状态

  • Pub PointsPub Points

  • 受欢迎程度Popularity

grouped_timeline 是一个为您的 Flutter 项目提供交互式时间线小部件的 Flutter 插件。

入门

grouped_timeline 基本上是一个改进的时间线包,因此您可以直接将其用作 TimeLine 小部件。

使用

TimeLine(
    /// 我们提供了一个时间线信息列表
    timeLineInfo: [
      TimeLineInfo(
        date: "12 May",
        title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
        images: ["https://source.unsplash.com/random/200x200?sig=1", "https://source.unsplash.com/random/200x200?sig=2"],
      ),
      TimeLineInfo(
        date: "14 May",
        title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
        images: ["https://source.unsplash.com/random/200x200?sig=3", "https://source.unsplash.com/random/200x200?sig=4"],
      ),
      TimeLineInfo(
        date: "12 May",
        title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
        images: ["https://source.unsplash.com/random/200x200?sig=5", "https://source.unsplash.com/random/200x200?sig=6"],
      ),
    ],
)

完整示例

以下是一个完整的示例代码,展示了如何在 Flutter 应用程序中使用 grouped_timeline 插件。

import 'package:flutter/material.dart';
import 'package:grouped_timeline/grouped_timeline.dart';

void main() {
  /// 根widget
  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      
      /// 自定义时间线小部件以显示时间线视图
      home: TimeLine(
        /// 提供一个时间线信息列表
        timeLineInfo: [
          TimeLineInfo(
            date: "12 May",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=1",
              "https://source.unsplash.com/random/200x200?sig=2"
            ],
          ),
          TimeLineInfo(
            date: "14 May",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=3",
              "https://source.unsplash.com/random/200x200?sig=4"
            ],
          ),
          TimeLineInfo(
            date: "12 May",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=5",
              "https://source.unsplash.com/random/200x200?sig=6"
            ],
          ),
          TimeLineInfo(
            date: "24 Jan",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=7",
              "https://source.unsplash.com/random/200x200?sig=8"
            ],
          ),
          TimeLineInfo(
            date: "24 Jan",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=9",
              "https://source.unsplash.com/random/200x200?sig=10"
            ],
          ),
          TimeLineInfo(
            date: "13 May",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=11",
              "https://source.unsplash.com/random/200x200?sig=12"
            ],
          ),
          TimeLineInfo(
            date: "13 May",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=13",
              "https://source.unsplash.com/random/200x200?sig=14"
            ],
          ),
          TimeLineInfo(
            date: "13 May",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=15",
              "https://source.unsplash.com/random/200x200?sig=16"
            ],
          ),
          TimeLineInfo(
            date: "14 May",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=17",
              "https://source.unsplash.com/random/200x200?sig=18"
            ],
          ),
          TimeLineInfo(
            date: "14 May",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=19",
              "https://source.unsplash.com/random/200x200?sig=20"
            ],
          ),
          TimeLineInfo(
            date: "11 Feb",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=21",
              "https://source.unsplash.com/random/200x200?sig=22"
            ],
          ),
          TimeLineInfo(
            date: "11 Feb",
            title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sollicitudin eu orci at bibendum. Etiam semper volutpat magna, a vehicula",
            images: [
              "https://source.unsplash.com/random/200x200?sig=23",
              "https://source.unsplash.com/random/200x200?sig=24"
            ],
          ),
        ],
      ),
    );
  }
}

更多关于Flutter时间线分组展示插件grouped_timeline的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter时间线分组展示插件grouped_timeline的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


grouped_timeline 是一个用于在 Flutter 应用中展示时间线分组内容的插件。它可以帮助你将事件或消息按照日期或其他条件进行分组,并以时间线的形式展示出来。以下是如何使用 grouped_timeline 插件的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 grouped_timeline 依赖:

dependencies:
  flutter:
    sdk: flutter
  grouped_timeline: ^0.1.0  # 请检查最新版本

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

2. 导入包

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

import 'package:grouped_timeline/grouped_timeline.dart';

3. 创建数据模型

为了展示时间线内容,你需要创建一个数据模型。例如,我们可以创建一个 TimelineEvent 类:

class TimelineEvent {
  final DateTime date;
  final String title;
  final String description;

  TimelineEvent({
    required this.date,
    required this.title,
    required this.description,
  });
}

4. 准备数据

接下来,准备一些示例数据:

List<TimelineEvent> events = [
  TimelineEvent(
    date: DateTime(2023, 10, 1),
    title: 'Event 1',
    description: 'This is the first event.',
  ),
  TimelineEvent(
    date: DateTime(2023, 10, 2),
    title: 'Event 2',
    description: 'This is the second event.',
  ),
  TimelineEvent(
    date: DateTime(2023, 10, 2),
    title: 'Event 3',
    description: 'This is the third event.',
  ),
  TimelineEvent(
    date: DateTime(2023, 10, 3),
    title: 'Event 4',
    description: 'This is the fourth event.',
  ),
];

5. 使用 GroupedTimeline 组件

现在,你可以使用 GroupedTimeline 组件来展示这些事件:

class TimelineScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Grouped Timeline'),
      ),
      body: GroupedTimeline<TimelineEvent>(
        events: events,
        groupBy: (event) => event.date,
        itemBuilder: (context, event) => ListTile(
          title: Text(event.title),
          subtitle: Text(event.description),
        ),
        groupHeaderBuilder: (context, date) => Padding(
          padding: const EdgeInsets.all(8.0),
          child: Text(
            '${date.year}-${date.month}-${date.day}',
            style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
          ),
        ),
      ),
    );
  }
}
回到顶部