Flutter日期选择插件custom_flutter_rounded_date_picker的使用
Flutter日期选择插件custom_flutter_rounded_date_picker的使用
Flutter Rounded Date Picker
是一个可以帮助你选择日期和年份的插件,并且可以通过圆形日历和自定义主题进行展示。
安装
在 pubspec.yaml
文件中添加依赖。你需要添加两个部分,包括 flutter_localizations
。
dependencies:
flutter_localizations:
sdk: flutter
flutter_rounded_date_picker: 0.1.0
导入
将包导入到你的 Dart 文件中。
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:custom_flutter_rounded_date_picker/custom_flutter_rounded_date_picker.dart';
import 'package:custom_flutter_rounded_date_picker/src/material_rounded_date_picker_style.dart';
import 'package:custom_flutter_rounded_date_picker/src/material_rounded_year_picker_style.dart';
初始化本地化
在 MaterialApp
中添加本地化代理,并添加支持的语言。
MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('en', 'US'), // 英语
const Locale('th', 'TH'), // 泰语
],
...
)
显示日期选择器
显示日期选择器,允许用户选择指定日期。
DateTime newDateTime = await showRoundedDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(DateTime.now().year - 1),
lastDate: DateTime(DateTime.now().year + 1),
borderRadius: 16,
),
显示年份选择器
显示年份选择器,允许用户选择指定年份。
DateTime newDateTime = await showRoundedDatePicker(
context: context,
initialDatePickerMode: DatePickerMode.year,
theme: ThemeData(primarySwatch: Colors.green),
);
主题
你可以通过使用 ThemeData
类和 PrimarySwatch
来为日期选择器分配主题。
DateTime newDateTime = await showRoundedDatePicker(
context: context,
theme: ThemeData(primarySwatch: Colors.pink),
);
暗色主题
DateTime newDateTime = await showRoundedDatePicker(
context: context,
theme: ThemeData.dark(),
);
自定义主题
DateTime newDateTime = await showRoundedDatePicker(
context: context,
background: Colors.white,
theme: ThemeData(
primaryColor: Colors.red[400],
accentColor: Colors.green[800],
dialogBackgroundColor: Colors.purple[50],
textTheme: TextTheme(
body1: TextStyle(color: Colors.red),
caption: TextStyle(color: Colors.blue),
),
disabledColor: Colors.orange,
accentTextTheme: TextTheme(
body2 : TextStyle(color: Colors.green[200]),
),
),
);
自定义日期选择器
你可以使用 styleDatePicker
字段来自定义日期选择器的样式,例如字体大小、重量和文本颜色等。
DateTime newDateTime = await showRoundedDatePicker(
context: context,
theme: ThemeData(primarySwatch: Colors.deepPurple),
styleDatePicker: MaterialRoundedDatePickerStyle(
textStyleDayButton: TextStyle(fontSize: 36, color: Colors.white),
textStyleYearButton: TextStyle(
fontSize: 52,
color: Colors.white,
),
textStyleDayHeader: TextStyle(
fontSize: 24,
color: Colors.white,
),
textStyleCurrentDayOnCalendar:
TextStyle(fontSize: 32, color: Colors.white, fontWeight: FontWeight.bold),
textStyleDayOnCalendar: TextStyle(fontSize: 28, color: Colors.white),
textStyleDayOnCalendarSelected:
TextStyle(fontSize: 32, color: Colors.white, fontWeight: FontWeight.bold),
textStyleDayOnCalendarDisabled: TextStyle(fontSize: 28, color: Colors.white.withOpacity(0.1)),
textStyleMonthYearHeader:
TextStyle(fontSize: 32, color: Colors.white, fontWeight: FontWeight.bold),
paddingDatePicker: EdgeInsets.all(0),
paddingMonthHeader: EdgeInsets.all(32),
paddingActionBar: EdgeInsets.all(16),
paddingDateYearHeader: EdgeInsets.all(32),
sizeArrow: 50,
colorArrowNext: Colors.white,
colorArrowPrevious: Colors.white,
marginLeftArrowPrevious: 16,
marginTopArrowPrevious: 16,
marginTopArrowNext: 16,
marginRightArrowNext: 32,
textStyleButtonAction: TextStyle(fontSize: 28, color: Colors.white),
textStyleButtonPositive:
TextStyle(fontSize: 28, color: Colors.white, fontWeight: FontWeight.bold),
textStyleButtonNegative: TextStyle(fontSize: 28, color: Colors.white.withOpacity(0.5)),
decorationDateSelected: BoxDecoration(color: Colors.orange[600], shape: BoxShape.circle),
backgroundPicker: Colors.deepPurple[400],
backgroundActionBar: Colors.deepPurple[300],
backgroundHeaderMonth: Colors.deepPurple[300],
),
styleYearPicker: MaterialRoundedYearPickerStyle(
textStyleYear: TextStyle(fontSize: 40, color: Colors.white),
textStyleYearSelected:
TextStyle(fontSize: 56, color: Colors.white, fontWeight: FontWeight.bold),
heightYearRow: 100,
backgroundPicker: Colors.deepPurple[400],
));
自定义动作按钮和按钮上的文本
添加动作按钮及其自定义文本。
DateTime newDateTime = await showRoundedDatePicker(
...
textActionButton: "ACTION",
onTapActionButton: (){
//
},
textPositiveButton: "OK",
textNegativeButton: "CANCEL");
自定义星期头文本
自定义星期头的文本。
DateTime newDateTime = await showRoundedDatePicker(
...
customWeekDays: ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]);
自定义禁用日期
添加无法选择的关闭日期。
DateTime newDateTime = await showRoundedDatePicker(
...
listDateDisabled: [
DateTime.now().subtract(Duration(days: 2)),
DateTime.now().subtract(Duration(days: 4)),
DateTime.now().subtract(Duration(days: 6)),
DateTime.now().subtract(Duration(days: 8)),
DateTime.now().subtract(Duration(days: 10)),
DateTime.now().add(Duration(days: 2)),
DateTime.now().add(Duration(days: 4)),
DateTime.now().add(Duration(days: 6)),
DateTime.now().add(Duration(days: 8)),
DateTime.now().add(Duration(days: 10)),
]);
自定义点击日期时的回调
添加点击日期时的回调。
DateTime newDateTime = await showRoundedDatePicker(
...
onTapDay: (DateTime dateTime, bool available) {
if (!available) {
showDialog(
context: context,
builder: (c) => CupertinoAlertDialog(title: Text("This date cannot be selected."),
actions: <Widget>[
CupertinoDialogAction(child: Text("OK"),onPressed: (){
Navigator.pop(context);
},)
],));
}
return available;
});
自定义日期选择器中的日期显示
自定义日期选择器中的日期显示格式。
DateTime newDateTime = await showRoundedDatePicker(
...
builderDay:
(DateTime dateTime, bool isCurrentDay, bool isSelected, TextStyle defaultTextStyle) {
if (isSelected) {
return Container(
decoration: BoxDecoration(color: Colors.orange[600], shape: BoxShape.circle),
child: Center(
child: Text(
dateTime.day.toString(),
style: defaultTextStyle,
),
),
);
}
if (dateTime.day == 10) {
return Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.pink[300], width: 4), shape: BoxShape.circle),
child: Center(
child: Text(
dateTime.day.toString(),
style: defaultTextStyle,
),
),
);
}
if (dateTime.day == 12) {
return Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.pink[300], width: 4), shape: BoxShape.circle),
child: Center(
child: Text(
dateTime.day.toString(),
style: defaultTextStyle,
),
),
);
}
return Container(
child: Center(
child: Text(
dateTime.day.toString(),
style: defaultTextStyle,
),
),
);
});
图片背景头部
使用图片作为日期选择器的头部,并可以添加更多细节。
DateTime newDateTime = await showRoundedDatePicker(
context: context,
theme: ThemeData(primarySwatch: Colors.blue),
imageHeader: AssetImage("assets/images/calendar_header.jpg"),
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
);
自定义日期选择器中的字体
你可以在日期选择器中调整字体。
DateTime newDateTime = await showRoundedDatePicker(
context: context,
fontFamily: "Mali"
);
日期选择器的语言环境
你可以设置日期选择器的语言环境。通过指定语言代码和国家代码。 截至2019年4月,该插件支持大约52种语言。
DateTime newDateTime = await showRoundedDatePicker(
context: context,
locale: Locale("zh","CN"),
theme: ThemeData(primarySwatch: Colors.pink),
);
泰语和佛教纪元
如果你使用泰语并且使用佛教纪元(公元前543年)。插件支持这些功能。
DateTime newDateTime = await showRoundedDatePicker(
context: context,
locale: Locale("th", "TH"),
era: EraMode.BUDDHIST_YEAR,
);
显示时间选择器
显示时间选择器,所有日期选择器的功能都可用(除了描述)。
final timePicked = await showRoundedTimePicker(
context: context,
initialTime: TimeOfDay.now(),
);
Cupertino日期选择器
显示iOS样式的日期和持续时间选择器。
安装
在 pubspec.yaml
文件中添加 Flutter Cupertino Localizations。
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
flutter_cupertino_localizations: 1.0.1
初始化本地化
在你的应用中添加 CupertinoLocalizations
代理。
MaterialApp(
debugShowCheckedModeBanner: false,
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
DefaultCupertinoLocalizations.delegate,
GlobalCupertinoLocalizations.delegate, // 添加全局的Cupertino本地化。
],
locale: Locale('en', 'US'), // 当前语言环境
supportedLocales: [
const Locale('en', 'US'), // 英语
const Locale('th', 'TH'), // 泰语
],
)
显示Cupertino日期选择器
调用方法来显示日期选择器。带有回调的日期时间实例将被返回。
CupertinoRoundedDatePicker.show(
context,
fontFamily: "Mali",
textColor: Colors.white,
background: Colors.red[300],
borderRadius: 16,
initialDatePickerMode: CupertinoDatePickerMode.date,
onDateTimeChanged: (newDateTime) {
//
},
);
更多Cupertino日期选择器模式:
CupertinoDatePickerMode.date
CupertinoDatePickerMode.dateAndTime
CupertinoDatePickerMode.time
使用泰语和佛教纪元
/// 当前语言环境是TH。
CupertinoRoundedDatePicker.show(
context,
fontFamily: "Mali",
textColor: Colors.white,
era: EraMode.BUDDHIST_YEAR,
background: Colors.red[300],
borderRadius: 16,
initialDatePickerMode: CupertinoDatePickerMode.date,
onDateTimeChanged: (newDateTime) {
//
},
);
Cupertino持续时间选择器
在iOS中,Flutter Cupertino 支持持续时间和计时器选择器。
CupertinoRoundedDurationPicker.show(
context,
initialTimerDuration: Duration(minute:10),
initialDurationPickerMode: CupertinoTimerPickerMode.hms,
fontFamily: "Mali",
onDurationChanged: (newDuration) {
//
},
);
更多Cupertino持续时间选择器模式:
CupertinoTimerPickerMode.hms
CupertinoTimerPickerMode.hm
CupertinoTimerPickerMode.ms
更多关于Flutter日期选择插件custom_flutter_rounded_date_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日期选择插件custom_flutter_rounded_date_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用custom_flutter_rounded_date_picker
插件的示例代码。这个插件允许你创建一个圆角样式的日期选择器。
首先,确保你已经在pubspec.yaml
文件中添加了依赖:
dependencies:
flutter:
sdk: flutter
custom_flutter_rounded_date_picker: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用这个日期选择器。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:custom_flutter_rounded_date_picker/custom_flutter_rounded_date_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Date Picker Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
DateTime selectedDate = DateTime.now();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Date Picker Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Selected Date: ${selectedDate.toLocal()}',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
final DateTime? pickedDate = await showRoundedDatePicker(
context: context,
initialDate: selectedDate,
firstDate: DateTime(1900),
lastDate: DateTime(2101),
builder: (BuildContext context, Widget? child) {
return Theme(
data: ThemeData(
colorScheme: ColorScheme.fromSwatch(
primarySwatch: Colors.blue,
),
),
child: child!,
);
},
);
if (pickedDate != null && pickedDate != selectedDate) {
setState(() {
selectedDate = pickedDate;
});
}
},
child: Text('Select Date'),
),
],
),
),
);
}
}
在这个示例中:
MyApp
是应用程序的根组件。MyHomePage
是主页面,包含一个文本显示选中的日期和一个按钮来打开日期选择器。- 使用
showRoundedDatePicker
函数来显示日期选择器。这个函数返回一个Future<DateTime?>
,即用户选择的日期。 - 用户选择日期后,通过
setState
方法更新UI。
这个示例展示了如何使用custom_flutter_rounded_date_picker
插件来创建一个圆角样式的日期选择器,并处理用户选择的日期。你可以根据需要进一步自定义日期选择器的外观和行为。