Flutter时间选择器插件simple_predicate_time_picker的使用
Flutter时间选择器插件simple_predicate_time_picker
的使用
简介
simple_predicate_time_picker
是一个自定义的时间选择器插件,允许你像在 showDatePicker
中一样设置可选时间的筛选条件。此插件是对原作者 jorgesanure-pub-dep 的扩展版本,原项目已停止维护。
功能演示
下图展示了插件的基本功能:
使用示例
以下是一个完整的示例代码,展示如何使用 simple_predicate_time_picker
插件来实现自定义时间选择器。
import 'package:flutter/material.dart';
import 'package:simple_predicate_time_picker/simple_predicate_time_picker.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
title: '时间选择器示例',
home: CustomTimePickerDemo(),
);
}
}
class CustomTimePickerDemo extends StatefulWidget {
const CustomTimePickerDemo({super.key});
[@override](/user/override)
_CustomTimePickerDemoState createState() => _CustomTimePickerDemoState();
}
class _CustomTimePickerDemoState extends State<CustomTimePickerDemo> {
String? selectedTime;
// 定义可用的小时和分钟
List<int> _availableHours = [1, 4, 6, 8, 12];
List<int> _availableMinutes = [0, 10, 30, 45, 50];
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: InkWell(
onTap: () {
// 打开时间选择器
showSimpleTimePicker(
context: context,
onFailValidation: (context) =>
showMessage(context, '不可用的选择'), // 验证失败回调
initialTime: TimeOfDay(
hour: _availableHours.first,
minute: _availableMinutes.first,
), // 初始时间
selectableTimePredicate: (time) =>
_availableHours.contains(time!.hour) &&
_availableMinutes.contains(time.minute), // 可选时间筛选条件
).then((time) {
// 更新选中的时间
setState(() => selectedTime = time?.format(context));
});
},
child: Text(
selectedTime ?? '请选择时间',
style: TextStyle(fontSize: 55, fontWeight: FontWeight.bold),
),
),
),
);
}
// 显示提示信息
void showMessage(BuildContext context, String message) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
contentPadding: EdgeInsets.zero,
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(height: 16),
Icon(
Icons.warning,
color: Colors.amber,
size: 56,
),
SizedBox(height: 12),
Padding(
padding: EdgeInsets.symmetric(horizontal: 15),
child: Text(
message,
textAlign: TextAlign.center,
style: TextStyle(
color: Color(0xFF231F20),
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
SizedBox(height: 12),
InkWell(
onTap: () => Navigator.of(context).pop(),
child: Container(
alignment: Alignment.center,
width: double.infinity,
padding: EdgeInsets.symmetric(vertical: 16),
decoration: BoxDecoration(
border: Border(top: BorderSide(color: Color(0xFFE8ECF3))),
),
child: Text(
'关闭',
style: TextStyle(
color: Color(0xFF2058CA),
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
),
),
],
),
);
},
);
}
}
更多关于Flutter时间选择器插件simple_predicate_time_picker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter时间选择器插件simple_predicate_time_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
simple_predicate_time_picker
是一个用于 Flutter 的时间选择器插件,它允许用户选择时间,并且可以根据自定义的谓词(predicate)来限制可选的时间范围。以下是如何使用这个插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 simple_predicate_time_picker
插件的依赖:
dependencies:
flutter:
sdk: flutter
simple_predicate_time_picker: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入包
在你的 Dart 文件中导入 simple_predicate_time_picker
包:
import 'package:simple_predicate_time_picker/simple_predicate_time_picker.dart';
3. 使用时间选择器
你可以使用 SimplePredicateTimePicker
来显示一个时间选择器。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:simple_predicate_time_picker/simple_predicate_time_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: TimePickerExample(),
);
}
}
class TimePickerExample extends StatefulWidget {
@override
_TimePickerExampleState createState() => _TimePickerExampleState();
}
class _TimePickerExampleState extends State<TimePickerExample> {
TimeOfDay? _selectedTime;
Future<void> _selectTime(BuildContext context) async {
final TimeOfDay? picked = await showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
builder: (BuildContext context, Widget? child) {
return SimplePredicateTimePicker(
initialTime: TimeOfDay.now(),
predicate: (TimeOfDay time) {
// 这里可以定义你的时间选择逻辑
// 例如,只允许选择上午的时间
return time.hour < 12;
},
);
},
);
if (picked != null && picked != _selectedTime) {
setState(() {
_selectedTime = picked;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Simple Predicate Time Picker Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_selectedTime == null
? 'No time selected'
: 'Selected time: ${_selectedTime!.format(context)}',
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () => _selectTime(context),
child: Text('Select Time'),
),
],
),
),
);
}
}
4. 自定义谓词
在 SimplePredicateTimePicker
中,你可以通过 predicate
参数来自定义时间选择的逻辑。predicate
是一个函数,它接收一个 TimeOfDay
对象并返回一个布尔值。如果返回 true
,则该时间可选;如果返回 false
,则该时间不可选。
例如,以下代码只允许选择上午的时间:
predicate: (TimeOfDay time) {
return time.hour < 12;
}