Flutter时间范围选择插件flutter_time_range的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter时间范围选择插件flutter_time_range的使用

flutter_time_range 是一个完全可自定义的Flutter小部件,允许用户选择时间范围(从 - 到)。以下是关于如何使用该插件的详细说明和完整示例代码。

展示

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 flutter_time_range 插件。该示例包括24小时格式和12小时格式的时间选择器。

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

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  MyAppState createState() => MyAppState();
}

class MyAppState extends State<MyApp> {
  final _messangerKey = GlobalKey<ScaffoldMessengerState>();
  final _navigatorKey = GlobalKey<NavigatorState>();

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
        navigatorKey: _navigatorKey,
        scaffoldMessengerKey: _messangerKey,
        title: 'Test Time Range Picker',
        home: Scaffold(
            appBar: AppBar(
              title: Text("Time Range Picker"),
            ),
            body: Center(
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: [
                  // 24小时格式的时间选择按钮
                  TextButton(
                    child: Text("Show Dialog 24 Hours"),
                    onPressed: () {
                      showTimeRangePicker(
                          _navigatorKey.currentState.overlay.context);
                    },
                  ),
                  // 12小时格式的时间选择按钮
                  TextButton(
                    child: Text("Show Dialog 12 Hours"),
                    onPressed: () {
                      showTimeRangePicker12Hour(
                          _navigatorKey.currentState.overlay.context);
                    },
                  ),
                ],
              ),
            )));
  }

  // 24小时格式的时间选择器
  Future<void> showTimeRangePicker(BuildContext context) {
    return showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text("Choose event time"),
            content: TimeRangePicker(
              // 初始化开始时间和结束时间为当前时间
              initialFromHour: DateTime.now().hour,
              initialFromMinutes: DateTime.now().minute,
              initialToHour: DateTime.now().hour,
              initialToMinutes: DateTime.now().minute,
              backText: "Back", // 返回按钮文本
              nextText: "Next", // 下一步按钮文本
              cancelText: "Cancel", // 取消按钮文本
              selectText: "Select", // 确认按钮文本
              editable: true, // 是否可编辑
              is24Format: true, // 使用24小时格式
              disableTabInteraction: true, // 禁用标签交互
              iconCancel: Icon(Icons.cancel_presentation, size: 12), // 取消按钮图标
              iconNext: Icon(Icons.arrow_forward, size: 12), // 下一步按钮图标
              iconBack: Icon(Icons.arrow_back, size: 12), // 返回按钮图标
              iconSelect: Icon(Icons.check, size: 12), // 确认按钮图标
              separatorStyle: TextStyle(color: Colors.grey[900], fontSize: 30), // 分隔符样式
              onSelect: (from, to) {
                // 选择时间后显示SnackBar
                _messangerKey.currentState.showSnackBar(
                    SnackBar(content: Text("From : $from, To : $to")));
                Navigator.pop(context); // 关闭对话框
              },
              onCancel: () => Navigator.pop(context), // 取消时关闭对话框
            ),
          );
        });
  }

  // 12小时格式的时间选择器
  Future<void> showTimeRangePicker12Hour(BuildContext context) {
    return showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text("Choose event time"),
            content: TimeRangePicker(
              // 初始化开始时间和结束时间为当前时间
              initialFromHour: DateTime.now().hour,
              initialFromMinutes: DateTime.now().minute,
              initialToHour: DateTime.now().hour,
              initialToMinutes: DateTime.now().minute,
              backText: "Back", // 返回按钮文本
              nextText: "Next", // 下一步按钮文本
              cancelText: "Cancel", // 取消按钮文本
              selectText: "Select", // 确认按钮文本
              editable: true, // 是否可编辑
              is24Format: false, // 使用12小时格式
              disableTabInteraction: true, // 禁用标签交互
              iconCancel: Icon(Icons.cancel_presentation, size: 12), // 取消按钮图标
              iconNext: Icon(Icons.arrow_forward, size: 12), // 下一步按钮图标
              iconBack: Icon(Icons.arrow_back, size: 12), // 返回按钮图标
              iconSelect: Icon(Icons.check, size: 12), // 确认按钮图标
              inactiveBgColor: Colors.grey[800], // 非活动背景颜色
              timeContainerStyle: BoxDecoration(
                  color: Colors.grey[800],
                  borderRadius: BorderRadius.circular(7)), // 时间容器样式
              separatorStyle: TextStyle(color: Colors.grey[900], fontSize: 30), // 分隔符样式
              onSelect: (from, to) {
                // 选择时间后显示SnackBar
                _messangerKey.currentState.showSnackBar(
                    SnackBar(content: Text("From : $from, To : $to")));
                Navigator.pop(context); // 关闭对话框
              },
              onCancel: () => Navigator.pop(context), // 取消时关闭对话框
            ),
          );
        });
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter中使用flutter_time_range插件来选择时间范围的示例代码。这个插件允许用户选择一个特定的时间范围,通常用于日程安排或时间选择功能。

首先,确保你已经在你的pubspec.yaml文件中添加了flutter_time_range依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_time_range: ^x.y.z  # 请将x.y.z替换为最新版本号

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

接下来,是一个完整的Flutter应用示例,展示了如何使用flutter_time_range插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Time Range Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  DateTime? startTime;
  DateTime? endTime;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Time Range Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Time Range:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            Text(
              'Start: ${startTime?.toLocal().toString() ?? 'Not selected'}',
              style: TextStyle(fontSize: 18),
            ),
            Text(
              'End: ${endTime?.toLocal().toString() ?? 'Not selected'}',
              style: TextStyle(fontSize: 18),
            ),
            SizedBox(height: 40),
            ElevatedButton(
              onPressed: () => _selectTimeRange(),
              child: Text('Select Time Range'),
            ),
          ],
        ),
      ),
    );
  }

  void _selectTimeRange() async {
    final result = await FlutterTimeRangePicker.builder(
      context: context,
      initialTimeRange: TimeRange(
        start: DateTime.now().subtract(Duration(hours: 1)),
        end: DateTime.now().add(Duration(hours: 1)),
      ),
      locale: Localizations.localeOf(context).languageCode,
      theme: FlutterTimeRangePickerTheme(
        // 自定义主题
      ),
      onConfirm: (range) {
        setState(() {
          startTime = range.start;
          endTime = range.end;
        });
      },
      onCancel: () {
        // 用户取消选择
      },
    ).show();
  }
}

代码解释:

  1. 依赖添加:在pubspec.yaml中添加flutter_time_range依赖。

  2. 主应用MyApp类定义了一个基本的Flutter应用,包含主题和主页。

  3. 主页MyHomePage是一个状态管理组件,用于处理时间范围的选择和显示。

  4. 选择时间范围_selectTimeRange方法使用FlutterTimeRangePicker.builder来显示时间范围选择器。用户选择时间范围后,通过onConfirm回调更新状态。

  5. 显示结果:在UI中显示用户选择的时间范围。

这个示例展示了如何使用flutter_time_range插件来选择时间范围,并在UI中显示结果。你可以根据需要进一步自定义时间选择器的外观和行为。

回到顶部