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

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

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

简介

time_range_picker 是一个用于Flutter的时间范围选择插件。它允许用户在应用中方便地选择一个时间范围。

开始使用

安装

首先,在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  time_range_picker: any

然后运行以下命令来获取包:

flutter packages get

基本用法

以下是一个基本的示例,展示如何使用 time_range_picker 插件:

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

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

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.blueGrey,
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              TimeRange result = await showTimeRangePicker(
                context: context,
              );
              print("result " + result.toString());
            },
            child: Text("Pure"),
          ),
        ));
  }
}

示例

简单示例

ElevatedButton(
  onPressed: () async {
    TimeRange? result = await showTimeRangePicker(
      context: context,
    );

    if (kDebugMode) {
      print("result $result");
    }
  },
  child: const Text("Pure"),
),

设置间隔

ElevatedButton(
  onPressed: () {
    showTimeRangePicker(
      context: context,
      start: const TimeOfDay(hour: 22, minute: 9),
      onStartChange: (start) {
        if (kDebugMode) {
          print("start time $start");
        }
      },
      onEndChange: (end) {
        if (kDebugMode) {
          print("end time $end");
        }
      },
      interval: const Duration(hours: 1),
      minDuration: const Duration(hours: 1),
      use24HourFormat: false,
      padding: 30,
      strokeWidth: 20,
      handlerRadius: 14,
      strokeColor: Colors.orange,
      handlerColor: Colors.orange[700],
      selectedColor: Colors.amber,
      backgroundColor: Colors.black.withOpacity(0.3),
      ticks: 12,
      ticksColor: Colors.white,
      snap: true,
      labels: [
        "12 am",
        "3 am",
        "6 am",
        "9 am",
        "12 pm",
        "3 pm",
        "6 pm",
        "9 pm"
      ].asMap().entries.map((e) {
        return ClockLabel.fromIndex(
            idx: e.key, length: 8, text: e.value);
      }).toList(),
      labelOffset: -30,
      labelStyle: const TextStyle(
          fontSize: 22,
          color: Colors.grey,
          fontWeight: FontWeight.bold),
      timeTextStyle: TextStyle(
          color: Colors.orange[700],
          fontSize: 24,
          fontStyle: FontStyle.italic,
          fontWeight: FontWeight.bold),
      activeTimeTextStyle: const TextStyle(
          color: Colors.orange,
          fontSize: 26,
          fontStyle: FontStyle.italic,
          fontWeight: FontWeight.bold),
    );
  },
  child: const Text("Interval"),
),

其他参数和配置

time_range_picker 提供了丰富的参数选项来定制时间选择器的行为和外观。例如:

  • disabledTime: 指定不可选的时间段。
  • paintingStyle: 设置绘制样式(填充或描边)。
  • onStartChangeonEndChange: 时间变化时的回调函数。
  • interval: 最小时间步长。
  • use24HourFormat: 使用24小时制还是12小时制。

更多详细参数请参考插件文档中的表格部分。

完整示例

以下是一个完整的示例,包含了多种配置方式:

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

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

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

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

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

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  TimeOfDay _startTime = TimeOfDay.now();
  TimeOfDay _endTime = TimeOfDay.fromDateTime(DateTime.now().add(const Duration(hours: 3)));

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: ListView(children: [
        ElevatedButton(
          onPressed: () async {
            TimeRange? result = await showTimeRangePicker(context: context);
            if (kDebugMode) {
              print("result $result");
            }
          },
          child: const Text("Pure"),
        ),
        // 添加其他按钮示例...
        ElevatedButton(
          onPressed: () async {
            TimeRange? result = await showTimeRangePicker(
              context: context,
              paintingStyle: PaintingStyle.fill,
              backgroundColor: Colors.grey.withOpacity(0.2),
              labels: [
                ClockLabel.fromTime(time: const TimeOfDay(hour: 7, minute: 0), text: "Start Work"),
                ClockLabel.fromTime(time: const TimeOfDay(hour: 18, minute: 0), text: "Go Home")
              ],
              start: const TimeOfDay(hour: 10, minute: 0),
              end: const TimeOfDay(hour: 13, minute: 0),
              ticks: 8,
              strokeColor: Theme.of(context).primaryColor.withOpacity(0.5),
              ticksColor: Theme.of(context).primaryColor,
              labelOffset: 15,
              padding: 60,
              disabledTime: TimeRange(startTime: const TimeOfDay(hour: 18, minute: 0), endTime: const TimeOfDay(hour: 7, minute: 0)),
              disabledColor: Colors.red.withOpacity(0.5),
            );

            if (kDebugMode) {
              print("result $result");
            }
          },
          child: const Text("Filled Style"),
        ),
        // 继续添加其他示例...
      ]),
    );
  }
}

通过上述示例代码,您可以根据需要灵活地配置和使用 time_range_picker 插件来满足不同的应用场景。希望这些内容对您有所帮助!


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

1 回复

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


当然,以下是如何在Flutter中使用time_range_picker插件来选择时间范围的示例代码。首先,确保你已经在pubspec.yaml文件中添加了time_range_picker依赖:

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

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

接下来,你可以在你的Flutter应用中使用这个插件。以下是一个完整的示例,展示如何集成并使用time_range_picker来选择时间范围:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  DateTimeRange? selectedTimeRange;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Time Range Picker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Time Range: ${selectedTimeRange?.start ?? 'None'} - ${selectedTimeRange?.end ?? 'None'}',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                final DateTimeRange? result = await showTimeRangePicker(
                  context: context,
                  startTime: DateTime.now().subtract(Duration(days: 1)),
                  endTime: DateTime.now().add(Duration(days: 1)),
                  initialTimeRange: DateTimeRange(
                    start: DateTime.now().subtract(Duration(hours: 4)),
                    end: DateTime.now().add(Duration(hours: 4)),
                  ),
                  locale: Localizations.localeOf(context),
                );
                if (result != null) {
                  setState(() {
                    selectedTimeRange = result;
                  });
                }
              },
              child: Text('Select Time Range'),
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:确保在pubspec.yaml中添加了time_range_picker依赖。
  2. 导入包:在Dart文件中导入time_range_picker包。
  3. UI布局
    • 使用Scaffold创建一个简单的页面布局。
    • 使用Text显示当前选择的时间范围。
    • 使用ElevatedButton触发时间范围选择器。
  4. 时间范围选择器
    • 使用showTimeRangePicker函数显示时间范围选择器对话框。
    • startTimeendTime参数定义了时间选择器的可选时间范围。
    • initialTimeRange参数设置了初始选择的时间范围。
    • 选择完成后,结果通过setState更新到UI中。

运行这个示例应用,点击按钮将打开一个时间范围选择器,允许用户选择一个时间范围,选择完成后,选择的时间范围将显示在屏幕上。

回到顶部