Flutter日夜时间选择器插件day_night_time_picker的使用
Flutter日夜时间选择器插件day_night_time_picker的使用
DayNightTimePicker
DayNightTimePicker 是一个用于Flutter的日夜时间选择器,它具有零依赖的特点。
安装
在pubspec.yaml
文件中添加依赖:
dependencies:
day_night_time_picker:
使用方法
要使用此插件,只需导入包:
import 'package:day_night_time_picker/day_night_time_picker.dart';
示例代码
以下是一个完整的示例demo,展示了如何使用day_night_time_picker
插件创建一个包含弹出式和内联样式的时间选择器的应用程序:
import 'package:day_night_time_picker/day_night_time_picker.dart';
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Time picker',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const Home(),
);
}
}
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
Time _time = Time(hour: 11, minute: 30, second: 20);
bool iosStyle = true;
void onTimeChanged(Time newTime) {
setState(() {
_time = newTime;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
"Popup Picker Style",
style: Theme.of(context).textTheme.titleLarge,
),
Text(
"${_time.hour}:${_time.minute}:${_time.second} ${_time.period.name}"
.toUpperCase(),
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.displayLarge,
),
const SizedBox(height: 10),
TextButton(
style: TextButton.styleFrom(
backgroundColor: Theme.of(context).colorScheme.secondary,
),
onPressed: () {
Navigator.of(context).push(
showPicker(
showSecondSelector: true,
context: context,
value: _time,
onChange: onTimeChanged,
minuteInterval: TimePickerInterval.FIVE,
// Optional onChange to receive value as DateTime
onChangeDateTime: (DateTime dateTime) {
debugPrint("[debug datetime]: $dateTime");
},
),
);
},
child: const Text(
"Open time picker",
style: TextStyle(color: Colors.white),
),
),
const SizedBox(height: 10),
const Divider(),
const SizedBox(height: 10),
Text(
"Inline Picker Style",
style: Theme.of(context).textTheme.titleLarge,
),
SizedBox(
width: 400,
// Render inline widget
child: showPicker(
isInlinePicker: true,
elevation: 1,
value: _time,
onChange: onTimeChanged,
minuteInterval: TimePickerInterval.FIVE,
iosStylePicker: iosStyle,
minHour: 9,
maxHour: 21,
is24HrFormat: false,
),
),
Text(
"IOS Style",
style: Theme.of(context).textTheme.bodyLarge,
),
Switch(
value: iosStyle,
onChanged: (newVal) {
setState(() {
iosStyle = newVal;
});
},
)
],
),
),
),
),
);
}
}
属性说明
名称 | 描述 | 默认值 |
---|---|---|
value | 必填项。显示的初始时间。 | - |
onChange | 必填项。用户选择新时间时的回调函数。 | - |
isInlinePicker | 是否渲染为内联组件。 | false |
onChangeDateTime | 可选项。返回用户选择的新时间为DateTime 格式。 |
- |
onCancel | 可选项。自定义取消按钮的回调函数。 | - |
is24HrFormat | 是否以24小时制显示时间。 | false |
accentColor | 时间选择器的强调色。 | Theme.of(context).accentColor |
unselectedColor | 未选中选项的颜色(如am/pm、小时/分钟)。 | Colors.grey |
cancelText | 取消按钮的文本。 | cancel |
okText | 确认按钮的文本。 | ok |
sunAsset | 日出图片资源。 | 提供的资产 |
moonAsset | 日落图片资源。 | 提供的资产 |
blurredBackground | 是否模糊背景。 | false |
barrierColor | 模态框背景颜色。 | Colors.black45 |
borderRadius | 容器的圆角半径。 | 10.0 |
elevation | 模态框的阴影高度。 | 12.0 |
dialogInsetPadding | 模态框的内边距。 | EdgeInsets.symmetric(horizontal: 40.0, vertical: 24.0) |
barrierDismissible | 点击外部是否关闭模态框。 | true |
showCancelButton | 是否显示取消按钮。 | true |
iosStylePicker | 是否显示iOS风格的选择器。 | false |
hourLabel | 小时选择器的标签(仅iOS风格)。 | 'hours' |
minuteLabel | 分钟选择器的标签(仅iOS风格)。 | 'minutes' |
minuteInterval | 分钟选择的间隔。 | TimePickerInterval.ONE |
secondInterval | 秒数选择的间隔。 | TimePickerInterval.ONE |
disableMinute | 是否禁用分钟选择器。 | false |
disableHour | 是否禁用小时选择器。 | false |
minHour | 可选最小小时。 | 默认为1 (12小时制)或0 (24小时制) |
maxHour | 可选最大小时。 | 默认为12 (12小时制)或23 (24小时制) |
minMinute | 可选最小时。 | 0 |
minSecond | 可选最小秒。 | 0 |
maxMinute | 可选最大分钟。 | 59 |
maxSecond | 可选最大秒。 | 59 |
displayHeader | 是否显示日出日落动画。 | true |
isOnValueChangeMode | 是否隐藏确认和取消按钮,并在每次值变化时返回。 | false |
focusMinutePicker | 是否自动聚焦分钟选择器。 | false |
themeData | 组件使用的主题数据。 | Theme.of(context) |
okStyle | 确认按钮的文本样式。 | const TextStyle(fontWeight: FontWeight.bold) |
cancelStyle | 取消按钮的文本样式。 | const TextStyle(fontWeight: FontWeight.bold) |
buttonStyle | 按钮样式。如果未提供cancelButtonStyle ,则应用于确认和取消按钮。 |
Theme.of(context).colorScheme.secondary |
cancelButtonStyle | 取消按钮样式。 | Theme.of(context).colorScheme.secondary |
buttonsSpacing | 确认和取消按钮之间的间距。 | 0 |
wheelHeight | 仅限createInlinePicker ,轮子的高度。 |
240 |
hideButtons | 是否隐藏按钮(确认和取消)。 | false |
disableAutoFocusToNextInput | 是否禁用当前输入选择后自动聚焦到下一个输入。 | false |
width | 选择器容器的固定宽度。 | 300 (iOS风格为350 ) |
height | 选择器容器的固定高度。 | 400 |
通过上述属性,您可以根据需要自定义时间选择器的外观和行为。希望这个插件能帮助您更方便地实现时间选择功能!
更多关于Flutter日夜时间选择器插件day_night_time_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日夜时间选择器插件day_night_time_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用day_night_time_picker
插件的一个代码示例。这个插件允许用户选择一个时间,并且界面会根据系统主题(白天或夜间模式)自动调整。
首先,你需要在你的pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
day_night_time_picker: ^latest_version # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用这个插件。以下是一个简单的示例,展示了如何使用DayNightTimePicker
:
import 'package:flutter/material.dart';
import 'package:day_night_time_picker/day_night_time_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
TimeOfDay? selectedTime;
void _selectTime(BuildContext context) async {
final TimeOfDay? picked = await showDayNightTimePicker(
context: context,
initialTime: selectedTime ?? TimeOfDay.now(),
theme: DayNightTimePickerThemeData(
dayTheme: DayTimePickerThemeData(
backgroundColor: Colors.white,
textStyle: TextStyle(color: Colors.black),
),
nightTheme: NightTimePickerThemeData(
backgroundColor: Colors.black,
textStyle: TextStyle(color: Colors.white),
),
),
);
if (picked != null && picked != selectedTime) {
setState(() {
selectedTime = picked;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('DayNightTimePicker Demo'),
),
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'),
),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮,点击该按钮将打开一个时间选择器。时间选择器会根据系统主题(白天或夜间模式)自动调整界面。
关键点是showDayNightTimePicker
函数,它用于显示时间选择器对话框。你可以传递context
、initialTime
(初始时间)以及一个可选的theme
参数来自定义白天和夜间模式下的主题。
注意:DayNightTimePickerThemeData
、DayTimePickerThemeData
和NightTimePickerThemeData
是假设的类名,具体实现可能有所不同,具体请参考day_night_time_picker
插件的官方文档和示例代码。如果插件作者提供了自定义主题的功能,你应该按照文档中的说明来实现。如果插件没有提供这些功能,你可以直接使用默认主题。