Flutter时间线日历插件flutter_timeline_calendar的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter时间线日历插件flutter_timeline_calendar的使用

1. 插件简介

flutter_timeline_calendar 是一个用于Flutter应用的时间线日历插件,支持Gregorian(公历)和Jalali(波斯历)两种日历类型。该插件提供了丰富的自定义选项,可以轻松地创建美观且功能强大的日历界面。

2. 安装步骤

要使用 flutter_timeline_calendar 插件,首先需要在项目的 pubspec.yaml 文件中添加依赖:

dependencies:
  flutter_timeline_calendar: ^1.0.9

然后通过命令行安装依赖包:

$ flutter pub get

或者,如果你的编辑器支持 flutter pub get,可以直接在编辑器中执行该操作。

3. 引入插件

在Dart代码中引入 flutter_timeline_calendar 插件:

import 'package:flutter_timeline_calendar/flutter_timeline_calendar.dart';

4. 基本用法

以下是一个完整的示例代码,展示了如何使用 flutter_timeline_calendar 创建一个简单的日历界面:

import 'package:flutter/material.dart';
import 'package:flutter_timeline_calendar/timeline/model/calendar_options.dart';
import 'package:flutter_timeline_calendar/timeline/model/datetime.dart';
import 'package:flutter_timeline_calendar/timeline/model/day_options.dart';
import 'package:flutter_timeline_calendar/timeline/model/headers_options.dart';
import 'package:flutter_timeline_calendar/timeline/provider/instance_provider.dart';
import 'package:flutter_timeline_calendar/timeline/utils/calendar_types.dart';
import 'package:flutter_timeline_calendar/timeline/utils/datetime_extension.dart';
import 'package:flutter_timeline_calendar/timeline/widget/timeline_calendar.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Timeline Calendar Example',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Timeline Calendar Example'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late CalendarDateTime selectedDateTime;
  late DateTime? weekStart;
  late DateTime? weekEnd;

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化日历提供者
    TimelineCalendar.calendarProvider = createInstance();
    // 获取当前日期
    selectedDateTime = TimelineCalendar.calendarProvider.getDateTime();
    // 获取当前周的起始和结束日期
    getLatestWeek();
  }

  // 获取当前周的起始和结束日期
  void getLatestWeek() {
    setState(() {
      weekStart = selectedDateTime.toDateTime().findFirstDateOfTheWeek();
      weekEnd = selectedDateTime.toDateTime().findLastDateOfTheWeek();
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        children: <Widget>[
          _timelineCalendar(),
        ],
      ),
    );
  }

  // 创建时间线日历
  Widget _timelineCalendar() {
    return TimelineCalendar(
      // 设置日历类型为公历
      calendarType: CalendarType.GREGORIAN,
      // 设置日历语言为英文
      calendarLanguage: "en",
      // 设置日历选项
      calendarOptions: CalendarOptions(
        // 设置初始视图为每日视图
        viewType: ViewType.DAILY,
        // 允许切换视图类型(每日/每月)
        toggleViewType: true,
        // 设置月头卡的阴影高度
        headerMonthElevation: 10,
        // 设置月头卡的阴影颜色
        headerMonthShadowColor: Colors.black26,
        // 设置月头卡的背景颜色
        headerMonthBackColor: Colors.transparent,
        // 设置周的起始日期
        weekStartDate: weekStart,
        // 设置周的结束日期
        weekEndDate: weekEnd,
      ),
      // 设置天选项
      dayOptions: DayOptions(
        // 启用紧凑模式
        compactMode: true,
        // 设置日期字体大小
        dayFontSize: 14.0,
        // 禁用淡出效果
        disableFadeEffect: true,
        // 设置选中的星期几的颜色
        weekDaySelectedColor: const Color(0xff3AC3E2),
        // 为今天设置不同的样式
        differentStyleForToday: true,
        // 设置今天的背景颜色
        todayBackgroundColor: Colors.black,
        // 设置选中的日期背景颜色
        selectedBackgroundColor: const Color(0xff3AC3E2),
        // 设置今天的文本颜色
        todayTextColor: Colors.white,
      ),
      // 设置头部选项
      headerOptions: HeaderOptions(
        // 设置星期几的显示格式(短格式)
        weekDayStringType: WeekDayStringTypes.SHORT,
        // 设置月份的显示格式(完整格式)
        monthStringType: MonthStringTypes.FULL,
        // 设置头部背景颜色
        backgroundColor: const Color(0xff3AC3E2),
        // 设置头部文本大小
        headerTextSize: 14,
        // 设置头部文本颜色
        headerTextColor: Colors.black,
      ),
      // 当日期发生变化时的回调
      onChangeDateTime: (dateTime) {
        print("Date Change $dateTime");
        selectedDateTime = dateTime;
        getLatestWeek();
      },
      // 当重置日期时的回调
      onDateTimeReset: (resetDateTime) {
        print("Date Reset $resetDateTime");
        selectedDateTime = resetDateTime;
        getLatestWeek();
      },
      // 当月份发生变化时的回调
      onMonthChanged: (monthDateTime) {
        print("Month Change $monthDateTime");
        selectedDateTime = monthDateTime;
        getLatestWeek();
      },
      // 当年份发生变化时的回调
      onYearChanged: (yearDateTime) {
        print("Year Change $yearDateTime");
        selectedDateTime = yearDateTime;
        getLatestWeek();
      },
      // 设置当前选中的日期
      dateTime: selectedDateTime,
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_timeline_calendar插件的示例代码。这个插件可以帮助你创建一个时间线日历视图,非常适合展示时间相关的事件。

首先,确保你的Flutter项目中已经添加了flutter_timeline_calendar依赖。在pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_timeline_calendar: ^最新版本号  # 请替换为最新版本号

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

接下来是一个简单的示例代码,展示如何使用flutter_timeline_calendar插件:

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

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

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

class TimelineCalendarPage extends StatefulWidget {
  @override
  _TimelineCalendarPageState createState() => _TimelineCalendarPageState();
}

class _TimelineCalendarPageState extends State<TimelineCalendarPage> {
  // 定义一些示例事件
  final List<TimelineEvent> events = [
    TimelineEvent(
      dateTime: DateTime(2023, 10, 1),
      title: '事件 1',
      description: '这是第一个事件',
    ),
    TimelineEvent(
      dateTime: DateTime(2023, 10, 5),
      title: '事件 2',
      description: '这是第二个事件',
    ),
    TimelineEvent(
      dateTime: DateTime(2023, 10, 10),
      title: '事件 3',
      description: '这是第三个事件',
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('时间线日历示例'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: TimelineCalendar(
          events: events,
          onEventSelected: (event) {
            // 当事件被选中时执行的回调
            showDialog(
              context: context,
              builder: (context) => AlertDialog(
                title: Text(event.title),
                content: Text(event.description),
                actions: [
                  TextButton(
                    onPressed: () => Navigator.of(context).pop(),
                    child: Text('关闭'),
                  ),
                ],
              ),
            );
          },
          // 其他可选配置
          locale: Locale('zh', 'CN'), // 设置语言为中文
          todayHighlightColor: Colors.blue, // 今天高亮颜色
          eventDotColor: Colors.red, // 事件点颜色
          eventDotBackgroundColor: Colors.grey[200], // 事件点背景颜色
          eventLineColor: Colors.black.withOpacity(0.3), // 事件线颜色
          headerTextStyle: TextStyle(fontSize: 18), // 头部文字样式
          eventTextStyle: TextStyle(fontSize: 16), // 事件文字样式
          headerHeight: 50, // 头部高度
          eventDotSize: 12, // 事件点大小
          eventDotPadding: 8, // 事件点内边距
          eventLineHeight: 40, // 事件线高度
        ),
      ),
    );
  }
}

// TimelineEvent的定义
class TimelineEvent {
  DateTime dateTime;
  String title;
  String description;

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

在这个示例中,我们定义了一个简单的TimelineEvent类来存储事件的日期、标题和描述。然后在TimelineCalendarPage中,我们创建了一个包含几个示例事件的列表,并将其传递给TimelineCalendar小部件。

TimelineCalendar小部件接受多个参数,例如事件列表、事件被选中时的回调函数以及其他可选配置。你可以根据需要调整这些参数以符合你的应用需求。

希望这个示例代码能帮助你理解如何在Flutter项目中使用flutter_timeline_calendar插件。

回到顶部