📅  最后修改于: 2021-01-02 05:22:49             🧑  作者: Mango
日历是一种用于组织用于商业,宗教,社会或行政目的的日,周或月的系统。它保留有关特定日期发生哪些事件以及何时发生特殊事件的记录。在本节中,我们将解释如何在Flutter应用程序中显示和使用日历小部件。
Flutter提供了一个名为table_calendar的简单小部件,用于在我们的应用中显示日历。桌面日历高度可定制,并具有许多功能,例如手势,动画和多种格式。
table_calendar提供了许多功能,如下所示:
让我们逐步查看如何创建和显示日历。
步骤1:在您使用的IDE中创建一个新的Flutter项目,并将其标题命名为Flutter Calendar Example。
步骤2:打开项目,导航到lib文件夹,然后打开pubspec.yaml文件。在此文件中,我们需要添加table_calendar依赖项,如下所示:
dependencies:
flutter:
sdk: flutter
table_calendar: ^2.1.0
步骤3:添加以上依赖项后,我们需要运行以下命令以获取所需的软件包:
$ flutter pub get
步骤4:接下来,将依赖项导入dart文件,如下所示:
import 'package:syncfusion_flutter_calendar/calendar.dart';
步骤5:之后,我们需要一个日历控制器并将日历初始化为CalendarController 。
CalendarController _controller;
@override
void initState() {
super.initState();
_controller = CalendarController();
}
步骤6:接下来,我们必须将日历小部件添加为任何小部件的子级。在这里,我们将添加日历小部件作为支架小部件的子代。
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Column(
children: [
TableCalendar()
],
),
),
);
步骤7:现在,我们可以编写逻辑并添加样式以显示日历。
以下是在应用程序中显示日历的完整代码。
import 'package:flutter/material.dart';
import 'package:table_calendar/table_calendar.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.green,
),
home: HomeCalendarPage(),
);
}
}
class HomeCalendarPage extends StatefulWidget {
@override
_HomeCalendarPageState createState() => _HomeCalendarPageState();
}
class _HomeCalendarPageState extends State {
CalendarController _controller;
@override
void initState() {
super.initState();
_controller = CalendarController();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Calendar Example'),
),
body: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TableCalendar(
initialCalendarFormat: CalendarFormat.month,
calendarStyle: CalendarStyle(
todayColor: Colors.blue,
selectedColor: Theme.of(context).primaryColor,
todayStyle: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 22.0,
color: Colors.white)
),
headerStyle: HeaderStyle(
centerHeaderTitle: true,
formatButtonDecoration: BoxDecoration(
color: Colors.brown,
borderRadius: BorderRadius.circular(22.0),
),
formatButtonTextStyle: TextStyle(color: Colors.white),
formatButtonShowsNext: false,
),
startingDayOfWeek: StartingDayOfWeek.monday,
onDaySelected: (date, events) {
print(date.toUtc());
},
builders: CalendarBuilders(
selectedDayBuilder: (context, date, events) => Container(
margin: const EdgeInsets.all(5.0),
alignment: Alignment.center,
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.circular(8.0)),
child: Text(
date.day.toString(),
style: TextStyle(color: Colors.white),
)),
todayDayBuilder: (context, date, events) => Container(
margin: const EdgeInsets.all(5.0),
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(8.0)),
child: Text(
date.day.toString(),
style: TextStyle(color: Colors.white),
)),
),
calendarController: _controller,
)
],
),
),
);
}
}
输出:
当我们在设备或仿真器中运行应用程序时,我们应该看到类似于以下屏幕截图的UI。在这里,我们可以看到上一个和下一个箭头图标来显示月份。这个星期从星期一开始,日期14是我当前的日期。
如果选择另一个日期,则可以看到当前日期和所选日期的颜色不同。参见下图。
我们也可以显示每月的星期,如该图所示。