Flutter自定义日历插件get_flutter_custom_calendar的使用

Flutter自定义日历插件get_flutter_custom_calendar的使用

概述

get_flutter_custom_calendar 是一个在 Flutter 上实现的自定义日历控件,支持公历、农历、节气、传统节日和常用节假日等。该插件提供了丰富的配置选项,允许开发者根据需求定制日历的样式和功能。

主要特性

  • 支持公历,农历,节气,传统节日,常用节假日。
  • 可以设置日期范围,支持禁用日期范围。
  • 支持单选、多选模式,提供多选超过限制个数的回调和多选超过指定范围的回调。
  • 跳转到指定日期,默认支持动画切换。
  • 自定义日历Item,支持组合widget的方式和利用canvas绘制的方式。
  • 自定义顶部的WeekBar。
  • 支持周视图和月视图的展示与切换联动。

效果图

使用

1. 添加依赖

pubspec.yaml 文件中添加依赖:

dependencies:
  get_flutter_custom_calendar:
    git:
      url: https://github.com/LXD312569496/flutter_custom_calendar.git

2. 导入库

import 'package:get_flutter_custom_calendar/get_flutter_custom_calendar.dart';

3. 创建日历控件

// 创建CalendarController对象
CalendarController controller = CalendarController(
  minYear: 2018,
  minYearMonth: 1,
  maxYear: 2020,
  maxYearMonth: 12,
  showMode: CalendarConstants.MODE_SHOW_MONTH_AND_WEEK,
);

// 创建CalendarViewWidget对象
CalendarViewWidget calendar = CalendarViewWidget(
  calendarController: controller,
);

4. 操作日历

// 切换月视图和周视图
controller.toggleExpandStatus();

// 切换到上一页
controller.previousPage();

// 切换到下一页
controller.nextPage();

2.0版本

主要改动

  • UI配置相关的参数,移动到 CalendarView 的构造方法里面(旧版本是在 controller 里面配置)。
  • 日历支持 paddingmargin 属性,item 的大小计算修改。
  • 实现日历整体自适应高度。
  • controller 提供 changeExtraDataMap 的方法,可以随时动态地修改自定义数据 extraDataMap
  • 支持显示月视图和周视图的情况,优先显示周视图,MODE_SHOW_WEEK_AND_MONTH
  • 支持 verticalSpacingitemSize 属性。

注意事项

  • 如果使用2.0之前的版本,则需要将UI配置相关的参数,移动到 CalendarView 的构造方法里面(旧版本是在 controller 里面配置)。
  • 暂时没有发现其他问题,如果有其他问题,可以跟我说一下。
  • 如果你用这个库做了日历,可以将展示结果分享给我,我贴到文档上进行展示。

示例代码

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

import 'pages/blue_style_page.dart';
import 'pages/custom_sign_page.dart';
import 'pages/custom_style_page.dart';
import 'pages/default_style_page.dart';
import 'pages/multi_select_style_page.dart';
import 'pages/only_week_page.dart';
import 'pages/progress_style_page.dart';
import 'pages/red_style_page.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return GetMaterialApp(
      routes: <String, WidgetBuilder>{
        "/default": (context) => DefaultStylePage(
          title: "默认风格+单选",
        ),
        "/custom": (context) => CustomStylePage(
          title: "自定义风格+单选",
        ),
        "/multi_select": (context) => MultiSelectStylePage(
          title: "自定义风格+多选",
        ),
        "/progress": (context) => ProgressStylePage(
          title: "进度条风格+单选",
        ),
        "/custom_sign": (context) => CustomSignPage(
          title: "自定义额外数据,实现标记功能",
        ),
        "/only_week_view": (context) => OnlyWeekPage(
          title: "仅显示周视图",
        ),
        "/blue_style_page": (context) => BlueStylePage(title: "蓝色背景Demo"),
        "/red_style_page": (context) => RedStylePage(title: "红色Demo"),
      },
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Column(
          children: <Widget>[
            ElevatedButton(
              onPressed: () {
                Navigator.pushNamed(context, "/default");
              },
              child: Text("默认风格+单选"),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.pushNamed(context, "/custom");
              },
              child: Text("自定义风格+单选"),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.pushNamed(context, "/multi_select");
              },
              child: Text("自定义风格+多选"),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.pushNamed(context, "/progress");
              },
              child: Text("进度条风格+单选"),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.pushNamed(context, "/custom_sign");
              },
              child: Text("自定义额外数据,实现标记功能"),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.pushNamed(context, "/only_week_view");
              },
              child: Text("仅显示周视图"),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.pushNamed(context, "/blue_style_page");
              },
              child: Text("蓝色Demo"),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.pushNamed(context, "/red_style_page");
              },
              child: Text("红色Demo"),
            )
          ],
        ),
      ),
    );
  }
}

更多关于Flutter自定义日历插件get_flutter_custom_calendar的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


get_flutter_custom_calendar 是一个用于 Flutter 的自定义日历插件,允许开发者根据自己的需求定制日历的外观和行为。以下是如何使用这个插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 get_flutter_custom_calendar 依赖:

dependencies:
  flutter:
    sdk: flutter
  get_flutter_custom_calendar: ^latest_version

然后运行 flutter pub get 来获取依赖。

2. 导入库

在你的 Dart 文件中导入 get_flutter_custom_calendar

import 'package:get_flutter_custom_calendar/get_flutter_custom_calendar.dart';

3. 使用日历组件

在你的 Widget 中使用 CustomCalendar 组件:

class MyCalendarPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Calendar'),
      ),
      body: CustomCalendar(
        onDaySelected: (DateTime date) {
          print("Selected date: $date");
        },
        onMonthChanged: (DateTime date) {
          print("Current month: $date");
        },
        // 其他自定义选项
      ),
    );
  }
}

4. 自定义选项

CustomCalendar 提供了多种自定义选项,以下是一些常用的属性:

  • onDaySelected: 当用户选择某一天时触发的回调。
  • onMonthChanged: 当用户切换月份时触发的回调。
  • selectedDate: 设置默认选中的日期。
  • currentDate: 设置当前显示的日期。
  • calendarStyle: 自定义日历的样式,如背景颜色、文本颜色等。
  • headerStyle: 自定义日历头部的样式,如月份和年份的显示样式。
  • weekDays: 自定义星期几的显示文本。

5. 示例代码

以下是一个完整的示例代码,展示了如何使用 get_flutter_custom_calendar

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Custom Calendar Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyCalendarPage(),
    );
  }
}

class MyCalendarPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Calendar'),
      ),
      body: CustomCalendar(
        onDaySelected: (DateTime date) {
          print("Selected date: $date");
        },
        onMonthChanged: (DateTime date) {
          print("Current month: $date");
        },
        selectedDate: DateTime.now(),
        currentDate: DateTime.now(),
        calendarStyle: CalendarStyle(
          backgroundColor: Colors.white,
          selectedColor: Colors.blue,
          todayColor: Colors.green,
          textStyle: TextStyle(color: Colors.black),
          selectedTextStyle: TextStyle(color: Colors.white),
        ),
        headerStyle: HeaderStyle(
          centerHeaderTitle: true,
          titleTextStyle: TextStyle(color: Colors.black, fontSize: 20),
          leftIcon: Icon(Icons.chevron_left, color: Colors.black),
          rightIcon: Icon(Icons.chevron_right, color: Colors.black),
        ),
        weekDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
      ),
    );
  }
}
回到顶部