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

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

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

simple_time_range_picker 是一个简单的时间范围选择小部件,适用于Flutter应用程序。它允许用户选择一个时间范围,并提供了多种自定义选项。

概览

simple_time_range_picker 动图

入门指南

使用方法

  1. 调用 TimeRangePicker.show:可以在按钮点击事件(如 onPressedonTap)中调用 TimeRangePicker.show 来显示时间范围选择器。
ElevatedButton(
  child: Text("OpenPicker"),
  onPressed: () => TimeRangePicker.show(
    context: context,
  ),
);
  1. 获取提交的时间:通过 onSubmitted 回调函数来获取用户选择的时间范围。
ElevatedButton(
  child: Text("OpenPicker"),
  onPressed: () => TimeRangePicker.show(
    context: context,
    onSubmitted: (TimeRangeValue value) {
      print("${value.startTime} - ${value.endTime}");
    },
  ),
);

API

名称 默认值 说明
okLabel “OK” 设置“确定”按钮的标签
cancelLabel “CANCEL” 设置“取消”按钮的标签
startTime 设置开始时间
endTime 设置结束时间
headerDefaultStartLabel “START” 当头部为空时设置开始时间的默认标签
headerDefaultEndLabel “END” 当头部为空时设置结束时间的默认标签
autoAdjust true 如果开始时间在结束时间之后,自动调整
unSelectedEmpty true 如果未选择时间,返回 null
timeRangeViewType TimeRangeViewType.start 首次显示时是开始时间还是结束时间
onStartTimeChange 开始时间变化时的回调函数
onEndTimeChange 结束时间变化时的回调函数
onSubmitted 提交时的回调函数
onCancel 取消时的回调函数

完整示例代码

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

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

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

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

class _MyAppState extends State<MyApp> {
  TimeOfDay _startTime = TimeOfDay.now();
  TimeOfDay _endTime = TimeOfDay.now();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sample',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      builder: (context, child) => MediaQuery(
        data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: true),
        child: child ?? SizedBox.shrink(),
      ),
      home: Builder(
        builder: (BuildContext context) {
          return Scaffold(
            appBar: AppBar(
              title: Text("Sample"),
            ),
            body: Container(
              padding: EdgeInsets.all(50),
              alignment: Alignment.center,
              child: Column(
                children: [
                  // Example start
                  ElevatedButton(
                    child: Text("OpenPicker"),
                    onPressed: () => TimeRangePicker.show(
                      context: context,
                      unSelectedEmpty: true,
                      startTime: TimeOfDay(
                        hour: _startTime.hour, 
                        minute: _startTime.minute
                      ),
                      endTime: TimeOfDay(
                        hour: _endTime.hour, 
                        minute: _endTime.minute
                      ),
                      onSubmitted: (TimeRangeValue value) {
                        setState(() {
                          _startTime = value.startTime!;
                          _endTime = value.endTime!;
                        });
                      },
                    ),
                  ),
                  Text("start: ${_timeFormated(_startTime)}"),
                  Text("end: ${_timeFormated(_endTime)}"),
                  // Example end
                ],
              ),
            ),
          );
        },
      ),
    );
  }

  String _timeFormated(TimeOfDay time) {
    return "${time.hour}:${time.minute}";
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用simple_time_range_picker插件来选择时间范围的代码示例。这个插件允许用户从时间选择器中选择一个开始时间和结束时间。

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

dependencies:
  flutter:
    sdk: flutter
  simple_time_range_picker: ^latest_version  # 请替换为最新版本号

然后运行flutter pub get来获取依赖。

接下来,你可以在你的Flutter应用中实现时间范围选择器。以下是一个完整的示例代码:

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

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

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

class TimeRangePickerDemo extends StatefulWidget {
  @override
  _TimeRangePickerDemoState createState() => _TimeRangePickerDemoState();
}

class _TimeRangePickerDemoState extends State<TimeRangePickerDemo> {
  DateTime? startTime;
  DateTime? endTime;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Time Range Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Time Range:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            if (startTime != null && endTime != null)
              Text(
                '${startTime!.toLocal().format(context)} - ${endTime!.toLocal().format(context)}',
                style: TextStyle(fontSize: 18),
              ),
            SizedBox(height: 40),
            ElevatedButton(
              onPressed: () async {
                final TimeOfDay? start = await showTimePicker(
                  context: context,
                  initialTime: TimeOfDay.fromDateTime(DateTime.now()),
                  builder: (BuildContext context, Widget? child) {
                    return Theme(
                      data: ThemeData.light().copyWith(
                        colorScheme: ColorScheme.fromSeed(
                          primarySwatch: Colors.blue,
                        ),
                      ),
                      child: child!,
                    );
                  },
                );

                if (start != null) {
                  final TimeOfDay? end = await showTimePicker(
                    context: context,
                    initialTime: start.adding(Duration(hours: 1)), // Default to 1 hour later
                    builder: (BuildContext context, Widget? child) {
                      return Theme(
                        data: ThemeData.light().copyWith(
                          colorScheme: ColorScheme.fromSeed(
                            primarySwatch: Colors.blue,
                          ),
                        ),
                        child: child!,
                      );
                    },
                  );

                  if (end != null) {
                    setState(() {
                      startTime = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, start!.hour, start!.minute);
                      endTime = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, end!.hour, end!.minute);
                    });
                  }
                }
              },
              child: Text('Select Time Range'),
            ),
          ],
        ),
      ),
    );
  }
}

// Extension method to format DateTime as a local string
extension DateTimeFormat on DateTime {
  String format(BuildContext context) {
    return DateFormat.jm().format(this.toLocal()).toString();
  }
}

在这个示例中,我们使用了Flutter自带的showTimePicker函数两次来分别选择开始时间和结束时间。请注意,这个示例并没有直接使用simple_time_range_picker插件,因为simple_time_range_picker可能并不直接提供与上述代码完全一致的API(具体API可能会因插件版本而异)。然而,如果你确实需要使用simple_time_range_picker插件,通常你可以参考其官方文档或GitHub页面上的示例代码。

由于simple_time_range_picker的具体用法可能随版本而变化,这里提供一个假设性的使用示例(基于插件可能提供的功能):

// 假设simple_time_range_picker提供了如下API
SimpleTimeRangePicker.show(
  context: context,
  initialStartTime: TimeOfDay.fromDateTime(DateTime.now()),
  initialEndTime: TimeOfDay.fromDateTime(DateTime.now().add(Duration(hours: 1))),
  onConfirm: (TimeOfDay start, TimeOfDay end) {
    setState(() {
      startTime = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, start.hour, start.minute);
      endTime = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, end.hour, end.minute);
    });
  },
);

请务必查阅simple_time_range_picker的最新版本文档,以获取准确的API用法和示例代码。

回到顶部