Flutter时间间隔选择插件interval_time_picker的使用
Flutter时间间隔选择插件interval_time_picker的使用
本插件通过在选择分钟时添加间隔选项来修改默认的Flutter时间选择器小部件。这意味着您可以限制用户仅选择特定分钟间隔,并可以选择时间选择器在表盘模式下吸附到哪个分钟间隔。
版本说明
- Flutter 2.0.0 到 3.7.12 应使用版本
1.1.0+4
。 - Flutter 3.1.0 到 3.19.6 应使用版本
2.0.0+5
。 - Flutter 3.22.x 应使用版本
3.0.2+8
。 - Flutter 3.24.0 及更高版本应使用版本
3.0.3+9
。
使用方法
在您的Flutter项目的 pubspec.yaml
文件中,添加以下依赖:
dependencies:
...
interval_time_picker: ^3.0.1+7
在代码顶部添加以下导入语句:
import 'package:interval_time_picker/interval_time_picker.dart';
然后可以在代码中调用以下方法:
showIntervalTimePicker(
context: context,
initialTime: TimeOfDay.fromDateTime(DateTime.now()),
interval: 5,
visibleStep: VisibleStep.fifths,
);
解释
该插件添加了两个参数:
interval
visibleStep
在大多数情况下,建议将间隔和可见步长设置为相同值:
例如分别设置为 5
和 VisibleStep.fifths
或者 12
和 VisibleStep.twelfths
。
区间(Interval)
interval
参数是区间时间选择器在验证所选时间(分钟)时使用的步骤,也是它四舍五入到的步骤。
默认和最小值为1分钟。最大值为60分钟。
实际上也可以使用不是60的因数的间隔。例如,如果想使用7分钟,也可以使用。在这种情况下,最高可选分钟为56,超过56会跳转到0。
此插件还修复了单独分钟只能通过拖动表盘选择的问题: Flutter问题 #62424
可见步长(VisibleStep)
visibleStep
参数是在表盘上可见的分钟标签。使用 VisibleStep
枚举选择步长。
选项是60的因数,其中5是最小值,60(显示为00)是最大值。默认值为 VisibleStep.fifths
。
声明
- 如果初始分钟不是间隔的倍数,它仍然会选中该分钟。
所以在调用
showIntervalTimePicker
时需要自行处理这种情况。
贡献
完整示例
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:interval_time_picker/interval_time_picker.dart';
import 'package:interval_time_picker/models/visible_step.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Interval Time Picker Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(colorScheme: const ColorScheme.light()),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
TimeOfDay _time = const TimeOfDay(hour: 7, minute: 15);
int _interval = 5;
VisibleStep _visibleStep = VisibleStep.fifths;
void _selectTime() async {
final TimeOfDay? newTime = await showIntervalTimePicker(
context: context,
initialTime: _time,
interval: _interval,
visibleStep: _visibleStep,
);
if (newTime != null) {
setState(() {
_time = newTime;
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: _selectTime,
child: const Text('SELECT TIME'),
),
const SizedBox(height: 8),
Text(
'Selected time: ${_time.format(context)}',
),
const SizedBox(height: 24),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Slider(
value: _interval.toDouble(),
min: 1,
max: 60,
divisions: 60,
label: _interval.toString(),
onChanged: (double value) {
setState(() {
_interval = value.toInt();
});
},
),
DropdownButton<VisibleStep>(
value: _visibleStep,
icon: const Icon(Icons.arrow_downward),
iconSize: 24,
elevation: 16,
style: const TextStyle(color: Colors.deepPurple),
underline: Container(
height: 2,
color: Colors.deepPurpleAccent,
),
onChanged: (VisibleStep? newValue) {
if (newValue != null) {
setState(() {
_visibleStep = newValue;
});
}
},
items: VisibleStep.values.map((VisibleStep visibleStep) {
return DropdownMenuItem<VisibleStep>(
value: visibleStep,
child: Text(visibleStep.toString()));
}).toList(),
),
],
),
],
),
),
);
}
}
更多关于Flutter时间间隔选择插件interval_time_picker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter时间间隔选择插件interval_time_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用interval_time_picker
插件的一个示例代码。interval_time_picker
是一个允许用户选择时间间隔的Flutter插件。下面是一个简单的示例,展示如何在Flutter应用中集成和使用该插件。
首先,你需要在你的pubspec.yaml
文件中添加interval_time_picker
依赖:
dependencies:
flutter:
sdk: flutter
interval_time_picker: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中创建一个屏幕,展示并使用IntervalTimePicker
。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:interval_time_picker/interval_time_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Interval Time Picker Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: IntervalPickerScreen(),
);
}
}
class IntervalPickerScreen extends StatefulWidget {
@override
_IntervalPickerScreenState createState() => _IntervalPickerScreenState();
}
class _IntervalPickerScreenState extends State<IntervalPickerScreen> {
DateTime? startTime;
DateTime? endTime;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Interval Time Picker'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Start Time:', style: TextStyle(fontSize: 18)),
startTime != null
? Text(startTime!.toLocal().toString(), style: TextStyle(fontSize: 16))
: Text('Not selected', style: TextStyle(fontSize: 16, color: Colors.grey)),
SizedBox(height: 16),
Text('End Time:', style: TextStyle(fontSize: 18)),
endTime != null
? Text(endTime!.toLocal().toString(), style: TextStyle(fontSize: 16))
: Text('Not selected', style: TextStyle(fontSize: 16, color: Colors.grey)),
SizedBox(height: 32),
ElevatedButton(
onPressed: () {
showIntervalPicker(
context: context,
initialStartTime: startTime,
initialEndTime: endTime,
onConfirm: (DateTime start, DateTime end) {
setState(() {
startTime = start;
endTime = end;
});
},
);
},
child: Text('Select Time Interval'),
),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮,用于显示IntervalTimePicker
。当用户点击按钮时,会显示一个时间选择器,允许用户选择开始时间和结束时间。选择完成后,选择的时间会显示在屏幕上。
请注意,showIntervalPicker
是一个假设的函数,实际上interval_time_picker
插件可能提供了一个类似功能的函数或组件,具体使用方式请参考插件的官方文档和示例代码。如果插件提供了不同的API或方法,请根据插件的文档进行相应的调整。