Flutter日历功能插件flutter_plugin_calendar的使用
Flutter日历功能插件flutter_plugin_calendar的使用
flutter_plugin_calendar
是一个自定义的日历组件,可以显示月视图和周视图,并且支持视图之间的切换。它还支持自定义图标和颜色等功能。
获取开始
在项目的 pubspec.yaml
文件中添加依赖:
dependencies:
flutter_gt_plugin: 0.0.3
然后运行 flutter packages get
命令以安装依赖。
使用
首先,在你的 Dart 文件中导入 flutter_plugin_calendar
包:
import 'package:flutter_plugin_calendar/flutter_plugin_calendar.dart';
展示日历组件
showModalBottomSheet 展开
你可以通过 showModalBottomSheet
方法来展示日历组件:
Map<String, dynamic> dateMap = {
'2021-07-14': '课',
'2021-07-16': '课',
'2021-07-02': '休',
'2021-07-01': '休',
'2021-07-31': '课',
'2021-09-30': '课',
'2021-09-29': '课',
'2021-08-18': '课',
'2021-10-28': '休',
'2021-10-15': '休',
'2021-10-11': '课',
};
FlutterPluginCalendar.showCalendarView(
context,
dateMap: dateMap,
align: ControlAlign.top,
format: DateFormat.chinese,
previousTitle: '',
nextTitle: '',
iconColor: Colors.grey,
onSelectedDateTime: (monthChanged, dateTime) {
if(monthChanged){
// 切换月份时刷新每个月的展示数据
dateMap = {
'2021-05-14': '课',
'2021-07-16': '课',
'2021-07-02': '休',
'2021-07-01': '休',
'2021-07-31': '课',
'2021-08-18': '课',
'2021-09-30': '课',
'2021-09-29': '课',
'2021-10-28': '休',
'2021-10-15': '休',
'2021-10-11': '课',
};
}
},
);
添加到 widget 树
你也可以直接将 CalendarView
组件添加到你的 widget 树中:
/// 仅显示周
CalendarView(
dateMap: dateMap,
defaultMode: CalendarMode.week,
showExpandMore: false,
startDateTime: DateTime(DateTime.now().year - 2, 1, 1),
endDateTime: DateTime(DateTime.now().year + 2, 1, 1),
onSelectedDateTime: (monthChanged, dateTime) {
debugPrint(dateTime.toString());
if (monthChanged) {
dateMap = {
'2021-07-14': '课',
'2021-07-16': '课',
'2021-07-02': '休',
'2021-07-01': '休',
'2021-07-31': '课',
'2021-09-30': '课',
'2021-09-29': '课',
'2021-08-18': '课',
'2021-10-28': '休',
'2021-10-15': '休',
'2021-10-11': '课',
};
setState(() {});
}
},
),
/// 仅显示月
CalendarView(
dateMap: dateMap,
showExpandMore: true,
startDateTime: DateTime(DateTime.now().year - 2, 1, 1),
endDateTime: DateTime(DateTime.now().year + 2, 1, 1),
onSelectedDateTime: (monthChanged, dateTime) {
debugPrint(dateTime.toString());
if (monthChanged) {
dateMap = {
'2021-07-14': '课',
'2021-07-16': '课',
'2021-07-02': '休',
'2021-07-01': '休',
'2021-07-31': '课',
'2021-09-30': '课',
'2021-09-29': '课',
'2021-08-18': '课',
'2021-10-28': '休',
'2021-10-15': '休',
'2021-10-11': '课',
};
setState(() {});
}
},
),
预览
完整示例代码
import 'package:flutter/material.dart';
import 'package:flutter_plugin_calendar/flutter_plugin_calendar.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(home: ExampleApp());
}
}
class ExampleApp extends StatefulWidget {
[@override](/user/override)
_ExampleAppState createState() => _ExampleAppState();
}
class _ExampleAppState extends State<ExampleApp> {
Map<String, dynamic> dateMap = {
'2021-07-14': '课',
'2021-07-16': '课',
'2021-07-02': '休',
'2021-07-01': '休',
'2021-07-31': '课',
'2021-09-30': '课',
'2021-09-29': '课',
'2021-08-18': '课',
'2021-10-28': '休',
'2021-10-15': '休',
'2021-10-11': '课',
};
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
actions: [
IconButton(
icon: Icon(Icons.calendar_view_day),
onPressed: () {
FlutterPluginCalendar.showCalendarView(
context,
dateMap: dateMap,
align: ControlAlign.top,
format: DateFormat.chinese,
previousTitle: '',
nextTitle: '',
iconColor: Colors.grey,
onSelectedDateTime: (monthChanged, dateTime) {
if (monthChanged) {
// 切换月份时刷新每个月的展示数据
dateMap = {
'2021-05-14': '课',
'2021-07-16': '课',
'2021-07-02': '休',
'2021-07-01': '休',
'2021-07-31': '课',
'2021-08-18': '课',
'2021-09-30': '课',
'2021-09-29': '课',
'2021-10-28': '休',
'2021-10-15': '休',
'2021-10-11': '课',
};
}
},
);
},
),
],
),
body: Container(
color: Colors.white,
child: Column(mainAxisAlignment: MainAxisAlignment.start, children: [
Text('周---月---切换'),
CalendarView(
dateMap: dateMap,
showExpandMore: true,
startDateTime: DateTime(DateTime.now().year - 2, 1, 1),
endDateTime: DateTime(DateTime.now().year + 2, 1, 1),
onSelectedDateTime: (monthChanged, dateTime) {
debugPrint(dateTime.toString());
if (monthChanged) {
dateMap = {
'2021-07-14': '课',
'2021-07-16': '课',
'2021-07-02': '休',
'2021-07-01': '休',
'2021-07-31': '课',
'2021-09-30': '课',
'2021-09-29': '课',
'2021-08-18': '课',
'2021-10-28': '休',
'2021-10-15': '休',
'2021-10-11': '课',
};
setState(() {});
}
},
),
Text('仅显示周'),
CalendarView(
dateMap: dateMap,
defaultMode: CalendarMode.week,
showExpandMore: false,
startDateTime: DateTime(DateTime.now().year - 2, 1, 1),
endDateTime: DateTime(DateTime.now().year + 2, 1, 1),
onSelectedDateTime: (monthChanged, dateTime) {
debugPrint(dateTime.toString());
if (monthChanged) {
dateMap = {
'2021-07-14': '课',
'2021-07-16': '课',
'2021-07-02': '休',
'2021-07-01': '休',
'2021-07-31': '课',
'2021-09-30': '课',
'2021-09-29': '课',
'2021-08-18': '课',
'2021-10-28': '休',
'2021-10-15': '休',
'2021-10-11': '课',
};
setState(() {});
}
},
),
]),
),
);
}
}
更多关于Flutter日历功能插件flutter_plugin_calendar的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复