flutter如何显示DateTimePicker
在Flutter中如何实现DateTimePicker功能?我尝试使用showDatePicker和showTimePicker,但效果不太理想。有没有更美观、支持自定义样式的日期时间选择器组件推荐?最好能支持同时选择日期和时间,并且兼容iOS和Android平台。如果有现成的pub.dev插件,请分享一下使用经验。
2 回复
在Flutter中显示日期时间选择器,主要有以下几种方式:
1. 使用内置的 showDatePicker 和 showTimePicker
// 选择日期
Future<void> _selectDate(BuildContext context) async {
final DateTime? picked = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(2000),
lastDate: DateTime(2100),
);
if (picked != null) {
// 处理选择的日期
print('选择的日期: $picked');
}
}
// 选择时间
Future<void> _selectTime(BuildContext context) async {
final TimeOfDay? picked = await showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
);
if (picked != null) {
// 处理选择的时间
print('选择的时间: $picked');
}
}
2. 使用第三方包 - flutter_datetime_picker
首先在 pubspec.yaml 中添加依赖:
dependencies:
flutter_datetime_picker: ^1.5.1
使用示例:
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
// 显示日期时间选择器
DatePicker.showDateTimePicker(
context,
showTitleActions: true,
onConfirm: (date) {
print('选择的日期时间: $date');
},
currentTime: DateTime.now(),
);
3. 完整的示例代码
import 'package:flutter/material.dart';
class DateTimePickerExample extends StatefulWidget {
@override
_DateTimePickerExampleState createState() => _DateTimePickerExampleState();
}
class _DateTimePickerExampleState extends State<DateTimePickerExample> {
DateTime _selectedDate = DateTime.now();
TimeOfDay _selectedTime = TimeOfDay.now();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('日期时间选择器')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () => _selectDate(context),
child: Text('选择日期'),
),
ElevatedButton(
onPressed: () => _selectTime(context),
child: Text('选择时间'),
),
Text('选择的日期: ${_selectedDate.toLocal()}'),
Text('选择的时间: ${_selectedTime.format(context)}'),
],
),
),
);
}
Future<void> _selectDate(BuildContext context) async {
final DateTime? picked = await showDatePicker(
context: context,
initialDate: _selectedDate,
firstDate: DateTime(2000),
lastDate: DateTime(2100),
);
if (picked != null && picked != _selectedDate) {
setState(() {
_selectedDate = picked;
});
}
}
Future<void> _selectTime(BuildContext context) async {
final TimeOfDay? picked = await showTimePicker(
context: context,
initialTime: _selectedTime,
);
if (picked != null && picked != _selectedTime) {
setState(() {
_selectedTime = picked;
});
}
}
}
推荐方案
- 简单需求:使用内置的
showDatePicker和showTimePicker - 复杂需求:使用
flutter_datetime_picker第三方包,支持更多自定义选项
内置组件已经能满足大部分场景,第三方包提供了更多样式和功能定制选项。


