Flutter时间选择器插件time_dropper的使用
Flutter时间选择器插件time_dropper的使用
TimeDropper
是一个灵感来源于 TimeDropperJS 的时间选择器插件。它提供了动画效果和完全可定制的圆形表盘。
特性
- 动画效果和完全可定制的圆形表盘。
- 可以适配系统主题或通过
TimeDropperThemeData
进行自定义。 - 提供三种不同的设计样式。
不同的设计样式
TimeDropperStyle.outerFilled | TimeDropperStyle.innerFilled | TimeDropperStyle.bordered |
---|---|---|
![]() |
![]() |
![]() |
开始使用
-
在
pubspec.yaml
文件中添加依赖:dependencies: time_dropper: <latest_version>
-
在终端运行
flutter pub get
命令获取依赖。 -
导入
time_dropper
包:import 'package:time_dropper/time_dropper.dart';
使用方法
完整的实现可以查看 示例代码。
_showTimeDropper(GlobalKey key) {
showTimeDropper(
context: context,
onDone: () {
// TODO: 使用此回调在时间选择器窗口关闭时更新时间
},
onTimeChanged: (time) {
setState(() {
_time = time;
});
// 使用此回调实时获取时间变化
},
containerKey: key,
// 传递键以便时间选择器对话框靠近容器小部件打开(如果为null,则在中心打开)
initialTime: _time,
style: TimeDropperStyle.outerFilled,
// 或者 TimeDropperStyle.innerFilled / TimeDropperStyle.bordered
);
}
其他信息
showTimeDropper() 函数
showTimeDropper()
函数接受以下参数:
参数名 | 类型 | 描述 |
---|---|---|
context |
BuildContext |
BuildContext |
onTimeChanged |
void Function(TimeOfDay)? |
回调函数,在时间变化时返回 TimeOfDay 对象(实时) |
onDone |
void Function(TimeOfDay)? |
回调函数,在对话框关闭时返回 TimeOfDay 对象 |
initialTime |
TimeOfDay? |
默认选择的时间(如果为null,则选择当前时间) |
containerKey |
GlobalKey? |
传递键以便时间选择器对话框靠近容器小部件打开(如果为null,则在中心打开) |
barrierColor |
Color? |
背景颜色(默认为 Colors.black12 ) |
style |
TimeDropperStyle |
一种样式,如 TimeDropperStyle.outerFilled , TimeDropperStyle.innerFilled 或 TimeDropperStyle.bordered |
themeData |
TimeDropperThemeData? |
自定义对话框 |
TimeDropperStyle 枚举
TimeDropperStyle
枚举包括以下样式:
样式 | 引用 |
---|---|
TimeDropperStyle.outerFilled / TimeDropperStyle.innerFilled / TimeDropperStyle.bordered |
查看 |
TimeDropperThemeData
TimeDropperThemeData
可用于自定义对话框的外观:
属性 | 类型 | 描述 |
---|---|---|
brightness |
Brightness? |
对话框的亮度(light 或 dark ),默认适应应用主题 |
primaryColor |
Color? |
所有主要高亮组件的颜色,默认为应用主题的 colorScheme.secondary |
canvasColor |
Color? |
表盘背景颜色,默认为应用主题的 canvasColor |
handleColor |
Color? |
滑动手柄的颜色,默认为 primaryColor |
handleDotsColor |
Color? |
滑动手柄上的点的颜色,默认为 Colors.white |
innerColor |
Color? |
边框颜色(TimeDropperStyle.bordered )或内部表盘颜色(TimeDropperStyle.innerFilled ),默认为 primaryColor |
selectedColor |
Color? |
选中文本的颜色(小时或分钟),默认为 primaryColor |
unSelectedColor |
Color? |
未选中文本的颜色(小时或分钟),默认为应用主题的 hintColor |
selectedHandColor |
Color? |
选中指针的颜色(小时或分钟指针),默认为 selectedColor.withOpacity(0.5) |
unSelectedHandColor |
Color? |
未选中指针的颜色(小时或分钟指针),默认为 unSelectedColor.withOpacity(0.5) |
shadowColor |
Color? |
抬升阴影的颜色,默认为应用主题的 hintColor |
fontFamily |
String? |
小部件的字体,默认为应用的主题字体 |
完整示例
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:time_dropper/time_dropper.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Time Dropper Example',
theme: ThemeData(
primarySwatch: Colors.indigo,
fontFamily: GoogleFonts.montserrat().fontFamily,
),
themeMode: ThemeMode.light,
debugShowCheckedModeBanner: false,
home: const Homepage(),
);
}
}
class Homepage extends StatefulWidget {
const Homepage({super.key});
[@override](/user/override)
State<Homepage> createState() => _HomepageState();
}
class _HomepageState extends State<Homepage> {
final _key1 = GlobalKey();
final _key2 = GlobalKey();
final _key3 = GlobalKey();
TimeOfDay? _time1;
TimeOfDay? _time2;
TimeOfDay? _time3;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
elevation: 0.0,
title: const Text("Time Dropper Example"),
),
body: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
FractionallySizedBox(
widthFactor: 0.5,
child: OutlinedButton(
key: _key1,
child: Text(
_time1 == null ? "Select time 1" : _time1!.format(context)),
onPressed: () => _showPicker(_key1),
),
),
Center(
child: FractionallySizedBox(
widthFactor: 0.5,
child: OutlinedButton(
key: _key2,
child: Text(_time2 == null
? "Select time 2"
: _time2!.format(context)),
onPressed: () => _showPicker(_key2),
),
),
),
Align(
alignment: Alignment.centerRight,
child: FractionallySizedBox(
widthFactor: 0.5,
child: OutlinedButton(
key: _key3,
child: Text(_time3 == null
? "Select time 3"
: _time3!.format(context)),
onPressed: () => _showPicker(_key3),
),
),
),
],
),
),
);
}
_showPicker(GlobalKey key) {
showTimeDropper(
context: context,
onDone: print,
onTimeChanged: (time) {
setState(() {
if (key == _key1) _time1 = time;
if (key == _key2) _time2 = time;
if (key == _key3) _time3 = time;
});
},
containerKey: key,
initialTime: key == _key1
? _time1
: key == _key2
? _time2
: _time3,
style: key == _key1
? TimeDropperStyle.outerFilled
: key == _key2
? TimeDropperStyle.innerFilled
: TimeDropperStyle.bordered,
themeData: TimeDropperThemeData(elevation: 2),
);
}
}
更多关于Flutter时间选择器插件time_dropper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter时间选择器插件time_dropper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用Flutter时间选择器插件 time_dropper
的代码示例。这个示例将展示如何在Flutter应用中集成并使用 time_dropper
插件来选择时间。
首先,确保你已经在 pubspec.yaml
文件中添加了 time_dropper
依赖:
dependencies:
flutter:
sdk: flutter
time_dropper: ^最新版本号 # 请替换为当前最新版本号
然后,运行 flutter pub get
来获取依赖。
接下来,在你的 Flutter 应用中,你可以按照以下步骤使用 time_dropper
:
1. 导入必要的包
在你的 Dart 文件中导入 time_dropper
包:
import 'package:flutter/material.dart';
import 'package:time_dropper/time_dropper.dart';
2. 创建时间选择器的UI
下面是一个简单的示例,展示了如何在 Scaffold 中使用 TimeDropper
组件:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Time Dropper Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
TimeOfDay? selectedTime;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Time Dropper Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
selectedTime == null
? 'No time selected'
: '${selectedTime!.format(context)}',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
TimeDropper(
initialTime: selectedTime,
onChanged: (TimeOfDay? newTime) {
setState(() {
selectedTime = newTime;
});
},
decoration: InputDecoration(
labelText: 'Select Time',
border: OutlineInputBorder(),
),
),
],
),
),
);
}
}
3. 运行应用
将上述代码保存并运行你的 Flutter 应用。你应该会看到一个简单的界面,其中包含一个文本显示当前选中的时间(初始为空),以及一个时间选择器。
在这个示例中,TimeDropper
组件允许用户选择一个时间,当用户选择一个时间时,onChanged
回调会被触发,更新 selectedTime
状态,从而刷新界面以显示新选中的时间。
这样,你就成功地在 Flutter 应用中集成了 time_dropper
插件,并实现了时间选择功能。希望这个示例对你有帮助!