Flutter时间选择器插件dropdown_timepicker的使用
Flutter时间选择器插件dropdown_timepicker的使用
描述
Dropdown TimePicker
是一个为Flutter应用提供的可自定义的时间选择器。它支持12小时和24小时格式,并且可以通过下拉菜单选择时间。以下是关于如何使用该插件的详细说明和完整示例代码。
功能
- 支持12小时和24小时格式
- 可自定义样式(如边框、提示文本等)
- 支持表单验证
- 提供回调函数以获取用户选择的时间
截图
使用方法
1. 添加依赖
在 pubspec.yaml
文件中添加 dropdown_timepicker
依赖:
dependencies:
dropdown_timepicker: ^0.1.0
2. 完整示例代码
// ignore_for_file: avoid_print
import 'package:dropdown_timepicker/dropdown_timepicker.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Dropdown TimePicker Demo',
themeMode: ThemeMode.system,
theme: ThemeData(
brightness: Brightness.light,
// light theme settings
),
darkTheme: ThemeData(
brightness: Brightness.dark,
// dark theme settings
),
debugShowCheckedModeBanner: false,
home: const MyHomePage(title: 'Dropdown TimePicker Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
AutovalidateMode _autovalidate = AutovalidateMode.disabled;
String _selectedAmPm = 'AM';
int _selectedMins = 10;
int _selectedHours = 1;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Form(
key: formKey,
autovalidateMode: _autovalidate,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
DropdownTimePicker(
isExpanded: true, // 使下拉框占据整个宽度
isDropdownHideUnderline: true, // 隐藏下拉框的下划线
isFormValidator: true, // 启用表单验证
showAmPm: true, // 显示AM/PM选项
width: 10, // 设置下拉框的宽度(可选)
is24format: false, // 使用12小时格式
onChangedAmPm: (value) {
setState(() {
_selectedAmPm = value ?? 'AM'; // 更新AM/PM值
});
print('onChangedAM: $value'); // 打印选择的AM/PM
},
onChangedMins: (value) {
setState(() {
_selectedMins = int.parse(value ?? '10'); // 更新分钟数
});
print('onChangedMins: $value'); // 打印选择的分钟数
},
onChangedHours: (value) {
setState(() {
_selectedHours = int.parse(value ?? '1'); // 更新小时数
});
print('onChangedHours: $value'); // 打印选择的小时数
},
),
MaterialButton(
onPressed: () {
if (formKey.currentState!.validate()) {
formKey.currentState!.save();
TimeOfDay? date = _dateTime(_selectedAmPm, _selectedMins, _selectedHours);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
action: SnackBarAction(
label: 'OK',
onPressed: () {},
),
content: Text('选择的时间是 $date'), // 显示选择的时间
elevation: 20,
),
);
} else {
print('验证失败');
setState(() {
_autovalidate = AutovalidateMode.always; // 开启自动验证
});
}
},
child: const Text('提交'),
)
],
),
),
),
);
}
// 将字符串转换为TimeOfDay对象
TimeOfDay? _dateTime(String? ampm, int? mins, int? hours) {
if (mins != null && hours != null) {
// 将AM/PM转换为24小时制
if (ampm != null && ampm == 'PM') {
hours = hours + 12;
}
return TimeOfDay(hour: hours, minute: mins);
}
return null;
}
}
更多关于Flutter时间选择器插件dropdown_timepicker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter时间选择器插件dropdown_timepicker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用dropdown_timepicker
插件的代码示例。dropdown_timepicker
是一个流行的Flutter插件,用于选择时间,它以一个下拉菜单的形式呈现。
首先,确保你已经在pubspec.yaml
文件中添加了dropdown_timepicker
依赖:
dependencies:
flutter:
sdk: flutter
dropdown_timepicker: ^5.0.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用这个插件。下面是一个完整的示例代码,展示了如何使用dropdown_timepicker
来选择一个时间:
import 'package:flutter/material.dart';
import 'package:dropdown_timepicker/dropdown_timepicker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Dropdown TimePicker Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
TimeOfDay _selectedTime = TimeOfDay.now();
void _selectTime(BuildContext context) async {
final TimeOfDay? picked = await showTimePicker(
context: context,
initialTime: _selectedTime,
builder: (BuildContext context, Widget? child) {
return Theme(
data: ThemeData.light().copyWith(
colorScheme: ColorScheme.fromSwatch(
primarySwatch: Colors.blue,
),
),
child: child!,
);
},
);
if (picked != null && picked != _selectedTime) {
setState(() {
_selectedTime = picked;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Dropdown TimePicker Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Selected Time: ${_selectedTime.format(context)}',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
DropdownButtonHideUnderline(
child: ButtonTheme(
alignedDropdown: true,
child: DropdownButton<String>(
value: _selectedTime.format(context),
hint: Text('Select Time'),
onChanged: (newValue) async {
// 这里我们其实不会通过 DropdownButton 直接改变时间,
// 因为 DropdownButton 通常用于选择预定义的值列表。
// 但为了演示,我们假设点击后调用时间选择器。
await _selectTime(context);
// 注意:这里不会真的从 DropdownButton 的 onChange 回调中更新值,
// 因为时间不是预定义的列表项,而是通过时间选择器得到的。
// 这只是为了展示如何触发时间选择器。
// 在实际使用中,你应该移除或调整这部分逻辑。
},
items: <String>[].map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(), // 这里通常会有一个值的列表,但时间不适合这种方式。
),
),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
await _selectTime(context);
},
tooltip: 'Pick Time',
child: Icon(Icons.access_time),
),
);
}
}
注意:
- 在上面的代码中,
DropdownButton
实际上并不适合用于直接选择时间,因为时间不是预定义的选项列表。这里只是为了演示如何集成时间选择器,并在用户交互时触发它。 - 更好的做法是使用一个按钮(如
FloatingActionButton
)来触发时间选择器,如代码中的floatingActionButton
所示。 - 如果你确实想使用下拉列表来选择时间(例如,选择预定义的几个时间点),你需要自己管理这些时间点,并将它们作为
DropdownMenuItem
的列表传递给DropdownButton
。
希望这个示例能帮助你理解如何在Flutter应用中使用dropdown_timepicker
插件。