Flutter时间选择插件duration_spinbox的使用
Flutter时间选择插件duration_spinbox的使用
安装 💻
为了开始使用Duration Spinbox,您必须在您的机器上安装Flutter SDK。
通过flutter pub add
进行安装:
dart pub add duration_spinbox
或者直接在pubspec.yaml
文件中添加以下行:
duration_spinbox: ^0.1.0
使用
目前,此插件仅以mm:ss
格式显示持续时间,将来会提供更多自定义选项。
基本用法
唯一必需的参数是value
,它是初始/当前持续时间。
DurationSpinbox(
value: Duration(minutes: 1),
),
这类似于DropDownButton
,您需要在更改时更新值。如下所示:
var _duration = Duration(minutes: 1);
// ...
DurationSpinbox(
value: _duration,
onChanged: (value){
setState(() {
_duration = value;
});
},
),
设置最小值和最大值
默认情况下,最小值为Duration.zero
,但最大值默认为null
。
DurationSpinbox(
value: Duration(minutes: 1),
min: Duration(minutes: 1),
max: Duration(minutes: 5),
),
设置步长值
步长值是值增加或减少的持续时间。默认值为Duration(minutes: 1)
。
DurationSpinbox(
value: Duration.zero,
stepValue: Duration(minutes: 5),
),
若要允许负值,您需要手动将最小值设置为null
。
DurationSpinbox(
value: Duration(minutes: 0),
min: null,
),
示例代码
以下是完整的示例代码,展示了如何在Flutter应用中使用duration_spinbox
插件。
import 'package:flutter/material.dart';
import 'package:duration_spinbox/duration_spinbox.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 这个小部件是你的应用的根。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.deepPurple,
),
useMaterial3: true,
),
home: const MyHomePage(title: 'Duration Spinbox Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Duration _duration = const Duration(minutes: 1);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text('默认 (min=Duration.zero, 没有状态)'),
const DurationSpinbox(
value: Duration(minutes: 1),
),
const Divider(),
const Text('带状态'),
DurationSpinbox(
value: _duration,
onChanged: (value) {
setState(() {
_duration = value;
});
},
),
const Divider(),
const Text('带有最小值和最大值'),
const DurationSpinbox(
value: Duration(minutes: 1),
min: Duration(minutes: 1),
max: Duration(minutes: 5),
),
const Divider(),
const Text('无边界,步长为5分钟'),
const DurationSpinbox(
value: Duration(minutes: 0),
min: null,
stepValue: Duration(minutes: 5),
),
const Divider(),
],
),
), // 这个尾随的逗号使自动格式化更美观。
);
}
}
更多关于Flutter时间选择插件duration_spinbox的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter时间选择插件duration_spinbox的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用duration_spinbox
插件来选择时间的示例代码。duration_spinbox
是一个允许用户通过旋转选择器来选择持续时间的Flutter插件。
首先,确保你已经在pubspec.yaml
文件中添加了duration_spinbox
依赖:
dependencies:
flutter:
sdk: flutter
duration_spinbox: ^latest_version # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter项目中按照以下方式使用DurationSpinBox
:
import 'package:flutter/material.dart';
import 'package:duration_spinbox/duration_spinbox.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> {
Duration _selectedDuration = Duration.zero;
void _onDurationChanged(Duration newDuration) {
setState(() {
_selectedDuration = newDuration;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Duration SpinBox Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
DurationSpinBox(
initialDuration: _selectedDuration,
onChanged: _onDurationChanged,
decoration: InputDecoration(
labelText: 'Select Duration',
border: OutlineInputBorder(),
),
),
SizedBox(height: 20),
Text(
'Selected Duration: ${_selectedDuration.inHours}h ${_selectedDuration.inMinutes % 60}m ${_selectedDuration.inSeconds % 60}s',
style: TextStyle(fontSize: 20),
),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个DurationSpinBox
组件。用户可以通过旋转选择器来选择持续时间,并且选择的结果会实时更新并显示在页面上。
代码解析
-
依赖导入:
import 'package:flutter/material.dart'; import 'package:duration_spinbox/duration_spinbox.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> { Duration _selectedDuration = Duration.zero; void _onDurationChanged(Duration newDuration) { setState(() { _selectedDuration = newDuration; }); }
-
构建UI:
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Duration SpinBox Demo'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ DurationSpinBox( initialDuration: _selectedDuration, onChanged: _onDurationChanged, decoration: InputDecoration( labelText: 'Select Duration', border: OutlineInputBorder(), ), ), SizedBox(height: 20), Text( 'Selected Duration: ${_selectedDuration.inHours}h ${_selectedDuration.inMinutes % 60}m ${_selectedDuration.inSeconds % 60}s', style: TextStyle(fontSize: 20), ), ], ), ), ); } }
这段代码展示了如何在Flutter应用中使用duration_spinbox
插件来选择持续时间,并将选择结果展示给用户。希望这个示例对你有帮助!