Flutter日期范围选择插件booking_range_slider的使用

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

Flutter日期范围选择插件booking_range_slider的使用

pub package

一个用于在Flutter应用中轻松选择预订或预约时间范围的插件。

版本尚未达到1.0.0。可能存在bug或者引入破坏性更改。

使用方法

以下是一个简单的使用示例:

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

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

class _MyHomePageState extends State<MyHomePage> {
  void _do(BookingValues value) {
    // 处理选中的值
    print('Selected value: $value');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('日期范围选择器示例'),
      ),
      body: Center(
        child: Container(
          width: 300,
          child: BookingRangeSlider(
            onChanged: (value) {
              _do(value);
            },
            displayHandles: true,
            labelFrequency: TimeOfDay(hour: 1, minute: 0),
            initialTime: TimeOfDay(hour: 0, minute: 0),
            endingTime: TimeOfDay(hour: 6, minute: 0),
            values: [
              BookingValues(
                TimeOfDay(hour: 1, minute: 0),
                TimeOfDay(hour: 2, minute: 0),
              ),
              BookingValues(
                TimeOfDay(hour: 3, minute: 0),
                TimeOfDay(hour: 3, minute: 30),
              ),
              BookingValues(
                TimeOfDay(hour: 4, minute: 0),
                TimeOfDay(hour: 5, minute: 0),
                isAvailable: true,
              ),
              BookingValues(
                TimeOfDay(hour: 5, minute: 30),
                TimeOfDay(hour: 6, minute: 0),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

属性

/// 显示不可用/已预订范围的颜色。
/// 默认为红色。
final Color unavailableColor;

/// 显示可用/空闲范围的颜色。
/// 默认为绿色。
final Color availableColor;

/// 显示当前选中范围的颜色。
/// 默认为橙色。
final Color selectedColor;

/// 是否在选中的[BookingValues]范围边界处显示手柄。
/// 默认为true。
final bool displayHandles;

/// 是否在[BookingRangeSlider]滑块顶部显示标签。
/// 默认为true。
final bool displayLabels;

/// 是否高亮当前选中的[BookingValues]范围。
/// 默认为true。
final bool highlightSelected;

/// 标签在[BookingRangeSlider]滑块上方出现的频率。
/// 默认为每4小时一次。
final TimeOfDay labelFrequency;

/// 标签的样式。
final TextStyle labelStyle;

/// [BookingRangeSlider]左侧边界的初始/起始边界。
/// 默认为0时0分。
///
/// 如果[initialTime]和[endingTime]的`小时`和`分钟`都为0,则[BookingRangeSlider]的范围为24小时。
///
/// 初始时间必须不晚于[endingTime]。
final TimeOfDay initialTime;

/// [BookingRangeSlider]左侧边界的结束/最终边界。
/// 默认为0时0分。
///
/// 如果[initialTime]和[endingTime]的`小时`和`分钟`都为0,则[BookingRangeSlider]的范围为24小时。
///
/// 结束时间必须晚于[initialTime]。
final TimeOfDay endingTime;

/// 每次拖动手柄时可以迭代的时间[TimeOfDay]值。
/// 默认为30分钟。
///
/// 例如 - 每次拖动手柄将增加/减少当前[TimeOfDay]值2小时:
/// ```
/// division: TimeOfDay(hour: 2, minute: 0),
/// ```
///
final TimeOfDay division;

/// 当手柄位置变化时触发。
final ValueChanged<BookingValues>? onChanged;

/// 填充[BookingRangeSlider]的[BookingValues]列表,通过[BookingValues]的`isAvailable`属性。
/// 不需要填充每一个范围 - 未填充的部分将默认用绿色[BookingValues]值填充。
///
/// [BookingValues]不能重叠!
final List<BookingValues> values;

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用booking_range_slider插件来实现日期范围选择的示例代码。这个插件允许用户选择一个日期范围,非常适合用于预订系统或任何需要日期范围选择的场景。

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

dependencies:
  flutter:
    sdk: flutter
  booking_range_slider: ^最新版本号  # 请替换为当前最新版本号

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

接下来,在你的Flutter应用中,你可以按照以下步骤使用booking_range_slider

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:booking_range_slider/booking_range_slider.dart';
  1. 创建日期范围选择组件
class DateRangePicker extends StatefulWidget {
  @override
  _DateRangePickerState createState() => _DateRangePickerState();
}

class _DateRangePickerState extends State<DateRangePicker> {
  DateTime? startDate;
  DateTime? endDate;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Date Range Picker'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            BookingRangeSlider(
              startDate: startDate,
              endDate: endDate,
              firstDate: DateTime(2023, 1, 1),
              lastDate: DateTime(2023, 12, 31),
              locale: Localizations.localeOf(context),
              onChanged: (DateTime? newStartDate, DateTime? newEndDate) {
                setState(() {
                  startDate = newStartDate;
                  endDate = newEndDate;
                });
              },
              onConfirm: (DateTime? confirmedStartDate, DateTime? confirmedEndDate) {
                print('Confirmed Date Range: $confirmedStartDate - $confirmedEndDate');
              },
              decoration: BookingRangeSliderDecoration(
                borderRadius: BorderRadius.circular(8),
                selectedColor: Colors.blue,
                activeColor: Colors.lightBlueAccent,
                inactiveColor: Colors.grey,
              ),
            ),
            SizedBox(height: 20),
            Text('Selected Date Range:'),
            if (startDate != null && endDate != null)
              Text(
                '${startDate!.toLocal()} - ${endDate!.toLocal()}',
                style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
              ),
          ],
        ),
      ),
    );
  }
}
  1. 在你的主应用中添加这个组件
void main() {
  runApp(MyApp());
}

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

在这个示例中,我们创建了一个名为DateRangePicker的组件,它使用BookingRangeSlider来允许用户选择日期范围。我们定义了startDateendDate来存储用户选择的日期范围,并在用户选择日期范围时更新这些变量。BookingRangeSlider还提供了一个onConfirm回调,当用户确认选择时触发。

请确保在实际项目中处理可能的空值情况,并根据需要调整UI和逻辑。这个示例提供了一个基本的框架,你可以根据需要进一步定制和扩展。

回到顶部