Flutter时间范围选择插件timeframe_selector的使用
Flutter时间范围选择插件timeframe_selector的使用
该插件实现了一个时间范围选择器,类似于你在日历中使用的那种。它被设计为类似于日期时间范围选择器,但用于选择时间段而不是具体日期。
在找不到合适的选择器后,我决定自己开发一个,并且现在你找到了它。
查看演示: https://firebon.de:8081/TimeframeDemo/
特性
- 移动和缩放时间范围
- 阻止特定时间段的选择
- 定义最小段数
使用方法
由于这是一个相对简单的组件,不处理自己的状态,你应该将其放在一个StatefulWidget
中。
TimeframeSelector(
baseTimeframe: DateTimeRange(
start: DateTime(0, 1, 1, 10), // 起始时间
end: DateTime(0, 1, 1, 24), // 结束时间
),
timeSegmentLength: const Duration(minutes: 30), // 每个时间段的长度
minTimeframeSegments: 4, // 最小段数
selectedTimeframe: selectedTimeframe, // 当前选中的时间段
overlayDatas: [
OverlayData(
timeframes: [
DateTimeRange(
start: DateTime(0, 1, 1, 15), // 阻止选择的时间段起始时间
end: DateTime(0, 1, 1, 17), // 阻止选择的时间段结束时间
),
],
),
],
onTimeframeChange: (newTimeframe) => setState(
() {
selectedTimeframe = newTimeframe;
},
),
),
示例代码
以下是一个完整的示例代码,展示了如何在Flutter应用中使用timeframe_selector
插件。
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:timeframe_selector/timeframe_selector.dart';
void main() async {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: Scaffold(
body: TimeFrameExample(),
),
);
}
}
class TimeFrameExample extends StatefulWidget {
const TimeFrameExample({super.key});
[@override](/user/override)
State<TimeFrameExample> createState() => _TimeFrameExampleState();
}
class _TimeFrameExampleState extends State<TimeFrameExample> {
DateTimeRange? selectedTimeframe;
String? getTimeframeString() {
if (selectedTimeframe != null) {
final startString = DateFormat.Hm().format(
selectedTimeframe!.start,
);
final endString = DateFormat.Hm().format(
selectedTimeframe!.end,
);
return "$startString - $endString";
}
return null;
}
[@override](/user/override)
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(getTimeframeString() ?? "No selection"), // 显示当前选中的时间段
),
TimeframeSelector(
baseTimeframe: DateTimeRange(
start: DateTime(0, 1, 1, 10), // 时间范围的起始时间
end: DateTime(0, 1, 1, 24), // 时间范围的结束时间
),
timeSegmentLength: const Duration(minutes: 30), // 每个时间段的长度
minTimeframeSegments: 4, // 最小段数
maxTimeframeSegments: 8, // 最大段数
selectedTimeframe: selectedTimeframe, // 当前选中的时间段
overlayDatas: [
OverlayData(
timeframes: [
DateTimeRange(
start: DateTime(0, 1, 1, 15), // 阻止选择的时间段起始时间
end: DateTime(0, 1, 1, 17), // 阻止选择的时间段结束时间
),
],
),
OverlayData(
timeframes: [
DateTimeRange(
start: DateTime(0, 1, 1, 20), // 阻止选择的时间段起始时间
end: DateTime(0, 1, 1, 22), // 阻止选择的时间段结束时间
),
],
color: Colors.green.withOpacity(0.2), // 阻止选择的时间段颜色
borderColor: Colors.green.withOpacity(0.4), // 阻止选择的时间段边框颜色
blockSelection: false, // 是否阻止选择
child: const Text("Hello world!"), // 阻止选择的时间段子部件
onTap: () {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text("Hello world!")), // 点击阻止选择的时间段时显示的提示信息
);
},
),
],
onTimeframeChange: (newTimeframe) => setState(
() {
selectedTimeframe = newTimeframe; // 更新当前选中的时间段
},
),
),
],
),
);
}
}
更多关于Flutter时间范围选择插件timeframe_selector的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter时间范围选择插件timeframe_selector的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
timeframe_selector
是一个用于 Flutter 的时间范围选择插件,允许用户选择一段时间范围。这个插件通常用于需要用户选择日期或时间范围的应用程序,例如预订系统、时间跟踪应用等。
安装插件
首先,你需要在 pubspec.yaml
文件中添加 timeframe_selector
插件的依赖:
dependencies:
flutter:
sdk: flutter
timeframe_selector: ^1.0.0 # 使用最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
下面是一个简单的示例,展示了如何使用 timeframe_selector
插件来选择时间范围。
import 'package:flutter/material.dart';
import 'package:timeframe_selector/timeframe_selector.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: TimeRangePickerExample(),
);
}
}
class TimeRangePickerExample extends StatefulWidget {
[@override](/user/override)
_TimeRangePickerExampleState createState() => _TimeRangePickerExampleState();
}
class _TimeRangePickerExampleState extends State<TimeRangePickerExample> {
DateTimeRange? _selectedRange;
Future<void> _selectRange(BuildContext context) async {
final DateTimeRange? picked = await showTimeRangePicker(
context: context,
initialRange: _selectedRange,
minDuration: Duration(hours: 1),
maxDuration: Duration(hours: 24),
);
if (picked != null && picked != _selectedRange) {
setState(() {
_selectedRange = picked;
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Time Range Selector Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_selectedRange == null
? 'No range selected'
: 'Selected Range: ${_selectedRange!.start} - ${_selectedRange!.end}',
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () => _selectRange(context),
child: Text('Select Time Range'),
),
],
),
),
);
}
}