Flutter动态时间线展示插件dynamic_timeline的使用

Flutter 动态时间线展示插件 dynamic_timeline 的使用

简介

本插件用于创建每日时间线、课程表、甘特图等。请注意,此包目前处于早期阶段,并未经过大量数据的测试。

日常时间线

日常时间线

周期性时间表

周期性时间表

甘特图

甘特图

支持甘特图功能尚需改进。

特点

  • 易于使用的 API。
  • 可调整大小的时间线项目。
  • 自定义标签构建器。

使用方法

安装

pubspec.yaml 文件中添加以下依赖:

dependencies:
  dynamic_timeline: ^0.1.2

基本设置

确保查看示例以获取更多详细信息。动态时间线需要提供 firstDateTimelastDateTimelabelBuilder 和一个事件列表。

  • labelBuilder: 用于构建每个标记的标签,通常使用日期格式化函数。
  • items: 时间线的事件,根据其开始和结束时间定位。

另一个重要的属性是 intervalDuration,即每两个标记之间的时间间隔。

示例代码

以下是一个每日时间线的示例:

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

class DailyTimeline extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return DynamicTimeline(
      firstDateTime: DateTime(1970, 1, 1, 7), // 开始时间为早上7点
      lastDateTime: DateTime(1970, 1, 1, 22), // 结束时间为晚上10点
      labelBuilder: (dateTime) => DateFormat('HH:mm').format(dateTime), // 日期格式化为 HH:mm
      intervalDuration: const Duration(hours: 1), // 每个标记之间的时间间隔为1小时
      children: [
        TimelineItem(
          startDateTime: DateTime(1970, 1, 1, 7), // 事件开始时间为早上7点
          endDateTime: DateTime(1970, 1, 1, 8), // 事件结束时间为早上8点
          child: const Event(title: 'Event 1'), // 事件标题为 "Event 1"
        ),
        TimelineItem(
          startDateTime: DateTime(1970, 1, 1, 10), // 事件开始时间为上午10点
          endDateTime: DateTime(1970, 1, 1, 12), // 事件结束时间为中午12点
          child: const Event(title: 'Event 2'), // 事件标题为 "Event 2"
        ),
        TimelineItem(
          startDateTime: DateTime(1970, 1, 1, 15), // 事件开始时间为下午3点
          endDateTime: DateTime(1970, 1, 1, 17), // 事件结束时间为下午5点
          child: const Event(title: 'Event 3'), // 事件标题为 "Event 3"
        ),
      ],
    );
  }
}

主程序

主程序文件 main.dart 如下所示:

import 'package:dynamic_timeline_example/pages/pages.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () => Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (_) => const DailyTimeline(),
                ),
              ),
              child: const Text('日常时间线'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () => Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (_) => const WeeklyTimetable(),
                ),
              ),
              child: const Text('周期性时间表'),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () => Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (_) => const GanttChart(),
                ),
              ),
              child: const Text('甘特图'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用dynamic_timeline插件来展示动态时间线的示例代码。假设你已经将dynamic_timeline插件添加到了你的pubspec.yaml文件中,并且已经运行了flutter pub get

1. 添加依赖

首先,确保在你的pubspec.yaml文件中添加dynamic_timeline依赖:

dependencies:
  flutter:
    sdk: flutter
  dynamic_timeline: ^最新版本号  # 替换为最新的版本号

2. 导入插件

在你的Dart文件中导入dynamic_timeline

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

3. 创建时间线数据

定义你的时间线数据模型。通常,你需要一个包含时间线事件的列表。这里我们创建一个简单的示例数据:

class TimelineEvent {
  String title;
  String description;
  DateTime dateTime;

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

List<TimelineEvent> timelineEvents = [
  TimelineEvent(
    title: 'Event 1',
    description: 'This is the description for event 1.',
    dateTime: DateTime(2023, 10, 1, 10, 0),
  ),
  TimelineEvent(
    title: 'Event 2',
    description: 'This is the description for event 2.',
    dateTime: DateTime(2023, 10, 2, 15, 30),
  ),
  TimelineEvent(
    title: 'Event 3',
    description: 'This is the description for event 3.',
    dateTime: DateTime(2023, 10, 3, 8, 45),
  ),
];

4. 构建时间线

在你的Scaffold中构建时间线:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Dynamic Timeline Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: TimelineScreen(),
    );
  }
}

class TimelineScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Dynamic Timeline Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: DynamicTimeline(
          events: timelineEvents.map((event) => TimelineModel(
            date: event.dateTime,
            title: event.title,
            description: event.description,
          )).toList(),
          // Optional: Customize the appearance
          dotBuilder: (context, index, date) {
            return Container(
              decoration: BoxDecoration(
                color: Colors.blue,
                shape: BoxShape.circle,
              ),
              width: 12,
              height: 12,
            );
          },
          lineBuilder: (context, index, date) {
            return Container(
              decoration: BoxDecoration(
                color: Colors.grey.withOpacity(0.5),
                shape: BoxShape.rectangle,
              ),
              width: 4,
              height: 16,
            );
          },
          connectorBuilder: (context, index, date) {
            return Container(
              width: 16,
              height: 16,
              decoration: BoxDecoration(
                shape: BoxShape.circle,
                color: Colors.transparent,
                border: Border.all(
                  color: Colors.grey.withOpacity(0.5),
                  width: 2,
                ),
              ),
            );
          },
        ),
      ),
    );
  }
}

5. 运行应用

现在你可以运行你的Flutter应用,应该会看到一个动态时间线展示。

这个示例展示了如何使用dynamic_timeline插件来创建一个简单的时间线视图。你可以根据需要进一步自定义每个事件点的样式、线条样式以及连接点的样式。插件的文档通常会提供更多详细的自定义选项,可以根据需要进行调整。

回到顶部