Flutter时间范围选择插件simple_time_range_picker的使用
Flutter时间范围选择插件simple_time_range_picker的使用
simple_time_range_picker
是一个简单的时间范围选择小部件,适用于Flutter应用程序。它允许用户选择一个时间范围,并提供了多种自定义选项。
概览
入门指南
使用方法
- 调用
TimeRangePicker.show
:可以在按钮点击事件(如onPressed
或onTap
)中调用TimeRangePicker.show
来显示时间范围选择器。
ElevatedButton(
child: Text("OpenPicker"),
onPressed: () => TimeRangePicker.show(
context: context,
),
);
- 获取提交的时间:通过
onSubmitted
回调函数来获取用户选择的时间范围。
ElevatedButton(
child: Text("OpenPicker"),
onPressed: () => TimeRangePicker.show(
context: context,
onSubmitted: (TimeRangeValue value) {
print("${value.startTime} - ${value.endTime}");
},
),
);
API
名称 | 默认值 | 说明 |
---|---|---|
okLabel | “OK” | 设置“确定”按钮的标签 |
cancelLabel | “CANCEL” | 设置“取消”按钮的标签 |
startTime | 设置开始时间 | |
endTime | 设置结束时间 | |
headerDefaultStartLabel | “START” | 当头部为空时设置开始时间的默认标签 |
headerDefaultEndLabel | “END” | 当头部为空时设置结束时间的默认标签 |
autoAdjust | true | 如果开始时间在结束时间之后,自动调整 |
unSelectedEmpty | true | 如果未选择时间,返回 null |
timeRangeViewType | TimeRangeViewType.start | 首次显示时是开始时间还是结束时间 |
onStartTimeChange | 开始时间变化时的回调函数 | |
onEndTimeChange | 结束时间变化时的回调函数 | |
onSubmitted | 提交时的回调函数 | |
onCancel | 取消时的回调函数 |
完整示例代码
以下是一个完整的示例代码,展示了如何使用 simple_time_range_picker
插件:
import 'package:flutter/material.dart';
import 'package:simple_time_range_picker/simple_time_range_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
TimeOfDay _startTime = TimeOfDay.now();
TimeOfDay _endTime = TimeOfDay.now();
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sample',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
builder: (context, child) => MediaQuery(
data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: true),
child: child ?? SizedBox.shrink(),
),
home: Builder(
builder: (BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Sample"),
),
body: Container(
padding: EdgeInsets.all(50),
alignment: Alignment.center,
child: Column(
children: [
// Example start
ElevatedButton(
child: Text("OpenPicker"),
onPressed: () => TimeRangePicker.show(
context: context,
unSelectedEmpty: true,
startTime: TimeOfDay(
hour: _startTime.hour,
minute: _startTime.minute
),
endTime: TimeOfDay(
hour: _endTime.hour,
minute: _endTime.minute
),
onSubmitted: (TimeRangeValue value) {
setState(() {
_startTime = value.startTime!;
_endTime = value.endTime!;
});
},
),
),
Text("start: ${_timeFormated(_startTime)}"),
Text("end: ${_timeFormated(_endTime)}"),
// Example end
],
),
),
);
},
),
);
}
String _timeFormated(TimeOfDay time) {
return "${time.hour}:${time.minute}";
}
}
更多关于Flutter时间范围选择插件simple_time_range_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter时间范围选择插件simple_time_range_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用simple_time_range_picker
插件来选择时间范围的代码示例。这个插件允许用户从时间选择器中选择一个开始时间和结束时间。
首先,确保你已经在pubspec.yaml
文件中添加了simple_time_range_picker
依赖:
dependencies:
flutter:
sdk: flutter
simple_time_range_picker: ^latest_version # 请替换为最新版本号
然后运行flutter pub get
来获取依赖。
接下来,你可以在你的Flutter应用中实现时间范围选择器。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:simple_time_range_picker/simple_time_range_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Time Range Picker Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: TimeRangePickerDemo(),
);
}
}
class TimeRangePickerDemo extends StatefulWidget {
@override
_TimeRangePickerDemoState createState() => _TimeRangePickerDemoState();
}
class _TimeRangePickerDemoState extends State<TimeRangePickerDemo> {
DateTime? startTime;
DateTime? endTime;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Time Range Picker Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Selected Time Range:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
if (startTime != null && endTime != null)
Text(
'${startTime!.toLocal().format(context)} - ${endTime!.toLocal().format(context)}',
style: TextStyle(fontSize: 18),
),
SizedBox(height: 40),
ElevatedButton(
onPressed: () async {
final TimeOfDay? start = await showTimePicker(
context: context,
initialTime: TimeOfDay.fromDateTime(DateTime.now()),
builder: (BuildContext context, Widget? child) {
return Theme(
data: ThemeData.light().copyWith(
colorScheme: ColorScheme.fromSeed(
primarySwatch: Colors.blue,
),
),
child: child!,
);
},
);
if (start != null) {
final TimeOfDay? end = await showTimePicker(
context: context,
initialTime: start.adding(Duration(hours: 1)), // Default to 1 hour later
builder: (BuildContext context, Widget? child) {
return Theme(
data: ThemeData.light().copyWith(
colorScheme: ColorScheme.fromSeed(
primarySwatch: Colors.blue,
),
),
child: child!,
);
},
);
if (end != null) {
setState(() {
startTime = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, start!.hour, start!.minute);
endTime = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, end!.hour, end!.minute);
});
}
}
},
child: Text('Select Time Range'),
),
],
),
),
);
}
}
// Extension method to format DateTime as a local string
extension DateTimeFormat on DateTime {
String format(BuildContext context) {
return DateFormat.jm().format(this.toLocal()).toString();
}
}
在这个示例中,我们使用了Flutter自带的showTimePicker
函数两次来分别选择开始时间和结束时间。请注意,这个示例并没有直接使用simple_time_range_picker
插件,因为simple_time_range_picker
可能并不直接提供与上述代码完全一致的API(具体API可能会因插件版本而异)。然而,如果你确实需要使用simple_time_range_picker
插件,通常你可以参考其官方文档或GitHub页面上的示例代码。
由于simple_time_range_picker
的具体用法可能随版本而变化,这里提供一个假设性的使用示例(基于插件可能提供的功能):
// 假设simple_time_range_picker提供了如下API
SimpleTimeRangePicker.show(
context: context,
initialStartTime: TimeOfDay.fromDateTime(DateTime.now()),
initialEndTime: TimeOfDay.fromDateTime(DateTime.now().add(Duration(hours: 1))),
onConfirm: (TimeOfDay start, TimeOfDay end) {
setState(() {
startTime = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, start.hour, start.minute);
endTime = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, end.hour, end.minute);
});
},
);
请务必查阅simple_time_range_picker
的最新版本文档,以获取准确的API用法和示例代码。