Flutter日历管理插件clean_calendar的使用

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

Flutter日历管理插件clean_calendar的使用

Word from creator

Hello👋, Clean Calendar目前处于早期开发阶段,可能会有很多破坏性变化。如果您有任何问题或建议,请通过GitHub issues、邮件、discord或我GitHub个人资料上列出的任何方式联系我。

是的,给这个包一个👍(Pub)或⭐(Github)会鼓励我更多地工作。

Package description

准备好用这个很棒的日历包来增强你的Flutter应用程序吧!凭借其简单而优雅的设计,你可以创建一个完全定制的日历以满足你的需求。它提供了一个可定制的月视图,并且可以高亮显示具有连续性的日期。这只是开始,我们将会添加更多的功能。

Features

  • 显示连续日期
  • 月度日历
    • 深色模式 | 浅色模式
  • 周度日历
    • 深色模式 | 浅色模式

Getting started

添加依赖

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

dependencies:
  clean_calendar: 

导入包

在您的Dart文件中导入clean_calendar包:

import 'package:clean_calendar/clean_calendar.dart';

Basic Usage

下面是一个简单的使用示例,展示如何在应用中集成CleanCalendar组件:

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        elevation: 2,
        title: const Text("Calendar"),
      ),
      body: CleanCalendar(
        datesForStreaks: [
          DateTime.now().subtract(Duration(days: 5)),
          DateTime.now().subtract(Duration(days: 4)),
          DateTime.now().subtract(Duration(days: 3)),
          // Add more dates as needed
        ],
      ),
    );
  }
}

Customisations

您可以根据需要自定义日历的外观和行为。例如:

  • Customise date boundary behaviour and tap behaviour

    CleanCalendar(
      enableDenseViewForDates: true,
      enableDenseSplashForDates: true,
    )
    
  • Disable and hide different types of dates

    CleanCalendar(
      leadingTrailingDatesProperties: DatesProperties(
        disable: true,
        hide: true,
      ),
    )
    
  • Customise dates look by changing its properties

    CleanCalendar(
      currentDateProperties: DatesProperties(
        datesDecoration: DatesDecoration(
          datesBorderRadius: 1000,
          datesBackgroundColor: Colors.lightGreen.shade100,
          datesBorderColor: Colors.green,
          datesTextColor: Colors.black,
        ),
      ),
      generalDatesProperties: DatesProperties(
        datesDecoration: DatesDecoration(
          datesBorderRadius: 1000,
          datesBackgroundColor: Colors.lightGreen.shade100,
          datesBorderColor: Colors.blue.shade100,
          datesTextColor: Colors.black,
        ),
      ),
    )
    
  • Customise weekdays header by changing its properties

    CleanCalendar(
      weekdaysProperties: WeekdaysProperties(
        generalWeekdaysDecoration: WeekdaysDecoration(weekdayTextColor: Colors.red),
        sundayDecoration: WeekdaysDecoration(
          weekdayTextColor: Colors.green,
          weekdayTextStyle: Theme.of(context).textTheme.headlineMedium,
        ),
        saturdayDecoration: WeekdaysDecoration(
          weekdayTextColor: Colors.green,
          weekdayTextStyle: Theme.of(context).textTheme.headlineMedium,
        ),
      ),
    )
    
  • Customise navigator header by changing its properties

    CleanCalendar(
      headerProperties: HeaderProperties(
        monthYearDecoration: MonthYearDecoration(
          monthYearTextColor: Colors.amber,
          monthYearTextStyle: Theme.of(context).textTheme.labelMedium,
        ),
        navigatorDecoration: NavigatorDecoration(
          navigatorResetButtonIcon: Icon(Icons.restart_alt, color: Colors.amber),
          navigateLeftButtonIcon: Icon(Icons.arrow_circle_left, color: Colors.amber),
          navigateRightButtonIcon: Icon(Icons.arrow_circle_right, color: Colors.amber),
        ),
      ),
    )
    

Date Selection

Multiple date selection with customization

CleanCalendar(
  enableDenseViewForDates: true,
  enableDenseSplashForDates: true,
  datesForStreaks: [DateTime.now().subtract(Duration(days: 5)), ...],
  dateSelectionMode: DatePickerSelectionMode.singleOrMultiple,
  onSelectedDates: (List<DateTime> value) {
    if (selectedDates.contains(value.first)) {
      selectedDates.remove(value.first);
    } else {
      selectedDates.add(value.first);
    }
    setState(() {});
  },
  selectedDates: selectedDates,
  selectedDatesProperties: DatesProperties(
    datesDecoration: DatesDecoration(datesBorderRadius: 1000),
  ),
)

Single date selection

只需修改上述代码中的onSelectedDates逻辑以存储最新的单个日期作为选中日期。

Changing calendar view type

CleanCalendar(
  datePickerCalendarView: DatePickerCalendarView.weekView,
)

Changing calendar start weekday

CleanCalendar(
  startWeekday: WeekDay.monday,
)

Changing weekday and month symbols

CleanCalendar(
  weekdaysSymbol: const Weekdays(sunday: "s", monday: "m", tuesday: "t", wednesday: "w", thursday: "t", friday: "f", saturday: "s"),
  monthsSymbol: const Months(january: "Jan", february: "Feb", march: "Mar", april: "Apr", may: "May", june: "Jun", july: "Jul", august: "Aug", september: "Sep", october: "Oct", november: "Nov", december: "Dec"),
)

Accessing selected dates

CleanCalendar(
  onSelectedDates: (List<DateTime> selectedDates) {
    print(selectedDates);
  },
)

Providing pre-selected dates

CleanCalendar(
  selectedDates: [DateTime(2022, 8, 6), DateTime(2022, 8, 9), DateTime(2022, 8, 11)],
)

Providing start and end dates

CleanCalendar(
  startDateOfCalendar: DateTime(2022,6,5),
  endDateOfCalendar: DateTime(2022,10,15),
)

Providing initial month view for calendar

CleanCalendar(
  initialViewMonthDateTime: DateTime(2022,9,5),
)

Providing current date for calendar

CleanCalendar(
  currentDateOfCalendar: DateTime(2022,9,5),
)

Listening for calendar view week or month change

CleanCalendar(
  onCalendarViewDate: (DateTime calendarViewDate) {
    print(calendarViewDate);
  },
)

Additional information

支持计划包括但不限于:

  • 完整文档。
  • 禁用用户交互选项。
  • 更多自定义和预设模板。
  • 更多日历视图类型。
  • 日期选择选项如范围和多个范围选择。
  • 年、月或日视图选择。
  • 事件风格日期显示。
  • 低性能设备优化模式。

如果您认为还有其他重要的功能未被提及,请告知我。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用clean_calendar插件进行日历管理的代码示例。这个插件通常用于显示和选择日期,非常适合需要日历功能的应用。

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

dependencies:
  flutter:
    sdk: flutter
  clean_calendar: ^x.y.z  # 替换为最新版本号

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

接下来,是一个简单的示例,展示如何使用clean_calendar来显示一个日历并处理日期选择事件。

1. 导入必要的包

在你的Dart文件中,导入clean_calendar包:

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

2. 创建主要的Widget

在你的主文件中(通常是main.dart),创建一个包含CleanCalendar的Widget:

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

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

class CalendarScreen extends StatefulWidget {
  @override
  _CalendarScreenState createState() => _CalendarScreenState();
}

class _CalendarScreenState extends State<CalendarScreen> {
  DateTime? selectedDate;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Clean Calendar Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              'Selected Date: ${selectedDate != null ? selectedDate!.toLocal().toDateString() : 'None'}',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            Expanded(
              child: CleanCalendar(
                initialSelectedDate: DateTime.now(),
                onDateSelected: (date) {
                  setState(() {
                    selectedDate = date;
                  });
                },
                // 其他可选参数
                // currentMonth: DateTime.now(), // 设置当前月份
                // selectedDayTextStyle: TextStyle(color: Colors.red), // 设置选中日期的文本样式
                // todayTextStyle: TextStyle(color: Colors.blue), // 设置今天日期的文本样式
                // weekDays: WeekDays.all, // 设置显示哪些星期几
                // ...
              ),
            ),
          ],
        ),
      ),
    );
  }
}

3. 运行应用

现在,你可以运行你的Flutter应用,应该会看到一个包含日历的页面,你可以点击日期来选择并显示选中的日期。

注意事项

  • 确保你使用的是最新版本的clean_calendar插件,因为API可能会随着版本更新而变化。
  • 根据你的需求,你可以自定义CleanCalendar的其他参数,比如设置特定的日期范围、禁用某些日期等。

这个示例展示了基本的日历显示和日期选择功能,你可以根据实际需求进一步扩展和优化。

回到顶部