Flutter时间选择插件duration_picker2的使用

Flutter时间选择插件duration_picker2的使用

duration_picker2 是一个用于在 Flutter 应用程序中选择持续时间的小部件。该插件受到 Material Design 时间选择器的启发,提供了直观的时间选择界面。

示例展示

以下是 duration_picker2 的功能演示:

使用步骤

1. 添加依赖

在项目的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  duration_picker2: "^1.0.0"

然后运行 flutter pub get 来安装依赖。

2. 导入必要的包

在需要使用 duration_picker2 的文件中导入以下包:

import 'package:duration_picker2/duration_picker.dart';
import 'package:flutter/material.dart';

3. 创建基本示例

以下是一个完整的示例代码,展示了如何使用 duration_picker2 插件:

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Duration Picker Demo',
      theme: ThemeData(
        useMaterial3: true,
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Duration Picker Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 初始化持续时间为 21 秒
  Duration _initTime = const Duration(seconds: 21);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // 使用 DurationPicker 小部件
            Expanded(
              child: DurationPicker(
                initialTime: _initTime,
                minTime: const Duration(seconds: 15), // 最小时间为 15 秒
                maxTime: const Duration(seconds: 30), // 最大时间为 30 秒
                enableHapticFeedback: false, // 禁用触觉反馈
                baseUnit: BaseUnit.second, // 基础单位为秒
                onChange: (val) {
                  setState(() {
                    _initTime = val; // 更新选择的时间
                  });
                },
                snapToMins: 5.0, // 每次调整步长为 5 秒
              ),
            )
          ],
        ),
      ),
      floatingActionButton: Builder(
        builder: (BuildContext context) => FloatingActionButton(
          onPressed: () async {
            // 显示弹出式持续时间选择器
            var resultingDuration = await showDurationPicker(
              context: context,
              initialTime: const Duration(seconds: 21),
              minTime: const Duration(seconds: 15),
              maxTime: const Duration(seconds: 30),
              baseUnit: BaseUnit.second,
            );
            // 显示选择结果
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('Chose duration: $resultingDuration')),
            );
          },
          tooltip: 'Popup Duration Picker',
          child: const Icon(Icons.add),
        ),
      ),
    );
  }
}
1 回复

更多关于Flutter时间选择插件duration_picker2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


duration_picker2 是一个用于 Flutter 的时间选择插件,允许用户选择持续时间(例如小时、分钟和秒)。它提供了一个直观的界面,用户可以通过滑动选择器来选择时间。

安装

首先,你需要在 pubspec.yaml 文件中添加 duration_picker2 依赖:

dependencies:
  flutter:
    sdk: flutter
  duration_picker2: ^1.0.0

然后运行 flutter pub get 来安装依赖。

基本用法

以下是一个简单的示例,展示如何使用 duration_picker2 插件:

import 'package:flutter/material.dart';
import 'package:duration_picker2/duration_picker2.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DurationPickerExample(),
    );
  }
}

class DurationPickerExample extends StatefulWidget {
  @override
  _DurationPickerExampleState createState() => _DurationPickerExampleState();
}

class _DurationPickerExampleState extends State<DurationPickerExample> {
  Duration _duration = Duration(hours: 0, minutes: 0, seconds: 0);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Duration Picker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              'Selected Duration: ${_duration.inHours}h ${_duration.inMinutes.remainder(60)}m ${_duration.inSeconds.remainder(60)}s',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                final Duration? pickedDuration = await showDurationPicker(
                  context: context,
                  initialDuration: _duration,
                );
                if (pickedDuration != null) {
                  setState(() {
                    _duration = pickedDuration;
                  });
                }
              },
              child: Text('Pick Duration'),
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 导入依赖:首先导入 duration_picker2 插件。
  2. 创建状态:在 _DurationPickerExampleState 中,我们定义了一个 _duration 变量来存储用户选择的持续时间。
  3. 显示选择器:当用户点击按钮时,调用 showDurationPicker 方法来显示持续时间选择器。initialDuration 参数用于设置选择器的初始值。
  4. 更新状态:如果用户选择了新的持续时间,我们使用 setState 来更新 _duration 并刷新 UI。

自定义选项

showDurationPicker 方法还支持一些自定义选项,例如:

  • snapToMins:是否将选择器对齐到分钟。
  • baseUnit:设置选择器的基本单位(例如 DurationPickerBaseUnit.minuteDurationPickerBaseUnit.second)。
final Duration? pickedDuration = await showDurationPicker(
  context: context,
  initialDuration: _duration,
  snapToMins: true,
  baseUnit: DurationPickerBaseUnit.minute,
);
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!