Flutter日历展示与管理插件flutter_material_calendar的使用

Flutter日历展示与管理插件flutter_material_calendar的使用

简介

Flutter Material Calendar 是一个提供简单且可定制的月度日历界面的Flutter包,非常适合添加、查看和管理任务或事件。

特性

  • 月度日历视图:提供一个干净简洁的基于月份的日历,便于导航。
  • 事件管理:允许用户在日历中添加、查看和管理事件。
  • 可定制的UI:灵活地自定义日历以适应你的应用设计。
  • 轻量级且易于使用:简单的集成方式适用于任何Flutter项目。

Flutter Material Calendar

视频演示

检查这个视频演示,以了解Flutter Material Calendar的实际效果。

安装

pubspec.yaml文件中添加该包:

dependencies:
  flutter:
    sdk: flutter
  flutter_material_calendar: ^1.0.0

然后运行flutter pub get来安装它。

使用

1. 事件列表设置

在使用日历之前,你需要设置一个事件列表:

late List<EventList> eventList = [
  EventList(
    "2024-03-01",
    {
      "2024-03-01": [
        EventName(Color(0xff008A5E), "10:20", "Event Title 1"),
      ]
    },
  ),
];

2. 添加Material Calendar到你的应用

import 'package:flutter/material.dart';
import 'package:flutter_material_calendar/flutter_material_calendar.dart';
import 'package:intl/intl.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    // 示例事件列表
    late List<EventList> eventList = [
      EventList(
        "2024-03-01",
        {
          "2024-03-01": [
            EventName(Color(0xff008A5E), "10:20", "Event Title 1"),
          ]
        },
      ),
    ];

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Material Calendar with Events'),
        ),
        body: Center(
          child: MaterialCalendarEvent(
            Colors.grey,
            Colors.blueAccent,
            DateFormat("MMMM-yyyy").format(DateTime.now()), // 显示格式
            eventList, // 事件列表
          ),
        ),
      ),
    );
  }
}

解释

  • EventList:表示特定日期事件的模型。每个EventList包含日期和与该日期关联的事件映射。
  • MaterialCalendarEvent:主要的日历部件,根据提供的事件列表、日期格式和颜色定制显示事件。

示例代码

以下是一个完整的示例:

import 'package:flutter/material.dart';
import 'package:flutter_material_calendar/flutter_material_calendar.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(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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 List<EventList> eventList = [
    EventList("2024-03-01",
        {"2024-03-01": [EventName(Color(0xff008A5E), "10:20", "10:20")]}),
    EventList("2024-03-03",
        {"2024-03-03": [EventName(Color(0xffF1BE41), "PH", "Public Holiday")]}),
    EventList("2024-03-05",
        {"2024-03-05": [EventName(Color(0xff008A5E), "10:20", "10:20"), EventName(Color(0xffB73434), "SL", "Sick Leave")]}),
    EventList("2024-03-06",
        {"2024-03-06": [EventName(Color(0xff008A5E), "10:20", "10:20")]}),
    EventList("2024-03-07",
        {"2024-03-07": [EventName(Color(0xffB73434), "CL", "Casual Leave")]}),
    EventList("2024-03-10",
        {"2024-03-10": [EventName(Color(0xffF1BE41), "PH", "Public Holiday")]}),
    EventList("2024-03-11",
        {"2024-03-11": [EventName(Color(0xff008A5E), "10:20", "10:20"),EventName(Color(0xffB73434), "CL", "Casual Leave")]}),
    EventList("2024-03-14",
        {"2024-03-14": [EventName(Color(0xffF1BE41), "CL", "Casual Leave")]}),
    EventList("2024-03-15",
        {"2024-03-15": [EventName(Color(0xffF1BE41), "PH", "Public Holiday")]}),
    EventList("2024-03-16",
        {"2024-03-16":[ EventName(Color(0xff008A5E), "10:20", "10:20")]}),
    EventList("2024-03-18",
        {"2024-03-18":[ EventName(Color(0xff008A5E), "10:20", "10:20"),EventName(Color(0xffB73434), "SL", "Sick Leave")]}),
    EventList("2024-03-20",
        {"2024-03-20": [EventName(Color(0xff008A5E), "10:20", "10:20")]}),
    EventList("2024-03-22",
        {"2024-03-22": [EventName(Color(0xffB73434), "SL", "Sick Leave")]}),
    EventList("2024-03-24",
        {"2024-03-24": [EventName(Color(0xff008A5E), "10:20", "10:20")]}),
    EventList("2024-03-26",
        {"2024-03-26":[ EventName(Color(0xffB73434), "CL", "Casual Leave")]}),
    EventList("2024-03-29",
        {"2024-03-29": [EventName(Color(0xff008A5E), "10:20", "10:20")]}),
    EventList("2024-03-30",
        {"2024-03-30": [EventName(Color(0xffF1BE41), "SL", "Sick Leave")]}),
  ];

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body:  SingleChildScrollView(child: MaterialCalendarEvent(Colors.grey, Colors.blueAccent, DateFormat("MMMM-yyyy")
          .format(DateTime.now()), eventList),),
    );
  }
}

更多关于Flutter日历展示与管理插件flutter_material_calendar的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter日历展示与管理插件flutter_material_calendar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_material_calendar 是一个 Flutter 插件,用于在应用程序中展示和管理日历事件。它提供了丰富的功能,允许开发者自定义日历的外观、事件管理以及用户交互。以下是如何在 Flutter 项目中使用 flutter_material_calendar 的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_material_calendar: ^0.0.1  # 请确保使用最新版本

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

2. 基本使用

在 Flutter 项目中,你可以通过以下步骤使用 flutter_material_calendar

导入包

首先,导入 flutter_material_calendar 包:

import 'package:flutter_material_calendar/flutter_material_calendar.dart';

创建日历

build 方法中创建一个简单的日历:

class CalendarPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Material Calendar'),
      ),
      body: MaterialCalendar(
        onDaySelected: (date) {
          print('Selected date: $date');
        },
      ),
    );
  }
}

在这个例子中,MaterialCalendar 是一个简单的日历组件,当用户选择某一天时,onDaySelected 回调会被触发,并打印选中的日期。

3. 自定义日历

flutter_material_calendar 提供了许多自定义选项,例如设置初始日期、事件标记、主题等。

设置初始日期

你可以通过 initialDate 属性设置日历的初始日期:

MaterialCalendar(
  initialDate: DateTime(2023, 10, 15),
  onDaySelected: (date) {
    print('Selected date: $date');
  },
)

添加事件标记

你可以通过 eventDates 属性为特定日期添加事件标记:

MaterialCalendar(
  eventDates: [
    DateTime(2023, 10, 10),
    DateTime(2023, 10, 20),
  ],
  onDaySelected: (date) {
    print('Selected date: $date');
  },
)

自定义主题

你可以通过 calendarTheme 属性自定义日历的主题:

MaterialCalendar(
  calendarTheme: CalendarThemeData(
    selectedDayBackgroundColor: Colors.blue,
    todayColor: Colors.green,
    weekendTextStyle: TextStyle(color: Colors.red),
  ),
  onDaySelected: (date) {
    print('Selected date: $date');
  },
)

4. 处理事件

你可以通过 onDaySelected 回调处理用户选择日期的操作,例如显示一个对话框或导航到另一个页面:

MaterialCalendar(
  onDaySelected: (date) {
    showDialog(
      context: context,
      builder: (context) {
        return AlertDialog(
          title: Text('Selected Date'),
          content: Text('You selected: $date'),
          actions: [
            TextButton(
              onPressed: () {
                Navigator.of(context).pop();
              },
              child: Text('OK'),
            ),
          ],
        );
      },
    );
  },
)

5. 完整示例

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

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: CalendarPage(),
    );
  }
}

class CalendarPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Material Calendar'),
      ),
      body: MaterialCalendar(
        initialDate: DateTime(2023, 10, 15),
        eventDates: [
          DateTime(2023, 10, 10),
          DateTime(2023, 10, 20),
        ],
        calendarTheme: CalendarThemeData(
          selectedDayBackgroundColor: Colors.blue,
          todayColor: Colors.green,
          weekendTextStyle: TextStyle(color: Colors.red),
        ),
        onDaySelected: (date) {
          showDialog(
            context: context,
            builder: (context) {
              return AlertDialog(
                title: Text('Selected Date'),
                content: Text('You selected: $date'),
                actions: [
                  TextButton(
                    onPressed: () {
                      Navigator.of(context).pop();
                    },
                    child: Text('OK'),
                  ),
                ],
              );
            },
          );
        },
      ),
    );
  }
}
回到顶部