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

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

📊 Occurrence Time Range Selector

Occurrence Time Range Selector 是一个高度互动且可自定义的 Flutter 小部件,允许用户在动态图表上选择时间范围的同时可视化事件的发生。

example_screenshot

✨ 特性

  • 🔍 放大和平移功能,用于详细探索。
  • 📅 动态的时间刻度,适应所选范围。
  • 📊 堆叠的垂直条形图,用于多个事件类别。
  • 🎨 可自定义的颜色和样式。
  • ⏱️ 毫秒精度,适用于高细节视图。
  • 🖱️ 优化用于鼠标和键盘操作的桌面使用。

🚀 开始使用

导入包

首先,在您的 Dart 代码中导入 flutter_occurrence_time_range_selector 包:

import 'package:flutter_occurrence_time_range_selector/flutter_occurrence_time_range_selector.dart';

使用示例

然后,您可以在 Flutter 应用程序中使用 TimeRangeSelector 小部件:

final now = DateTime.now();

TimeRangeSelector(
  startDate: now.subtract(Duration(days: 30)),
  endDate: now.add(Duration(days: 30)),
  events: [
    TimeEvent(tag: 'Class A', dateTime: now.subtract(Duration(days: 15))),
    TimeEvent(tag: 'Class B', dateTime: now.subtract(Duration(days: 7))),
    TimeEvent(tag: 'Class A', dateTime: now),
    TimeEvent(tag: 'Class C', dateTime: now.add(Duration(days: 10))),
    TimeEvent(tag: 'Class B', dateTime: now.add(Duration(days: 20))),
  ],
  tagStyles: const {
    'Class A': TagStyle(color: Colors.blue),
    'Class B': TagStyle(color: Colors.red),
    'Class C': TagStyle(color: Colors.green),
  },
  onRangeChanged: (DateTime newStart, DateTime newEnd) {
    print('New range: $newStart to $newEnd');
  },
  style: const TimelineStyle(
    axisColor: Colors.black,
    axisLabelStyle: TextStyle(fontSize: 18, color: Colors.black),
    barSpacing: 2,
    backgroundColor: Colors.white,
  ),
)

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

1 回复

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


当然,下面是一个关于如何使用Flutter插件flutter_occurrence_time_range_selector的示例代码。这个插件主要用于在Flutter应用中实现时间范围选择器。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_occurrence_time_range_selector: ^最新版本号 # 请替换为实际最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下方式使用flutter_occurrence_time_range_selector插件:

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

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

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

class TimeRangeSelectorDemo extends StatefulWidget {
  @override
  _TimeRangeSelectorDemoState createState() => _TimeRangeSelectorDemoState();
}

class _TimeRangeSelectorDemoState extends State<TimeRangeSelectorDemo> {
  DateTime? startTime;
  DateTime? endTime;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Time Range Selector Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TimeRangeSelector(
              initialSelectedTimeRange: TimeRange(
                start: DateTime.now().subtract(Duration(hours: 2)),
                end: DateTime.now(),
              ),
              onTimeRangeChanged: (TimeRange newTimeRange) {
                setState(() {
                  startTime = newTimeRange.start;
                  endTime = newTimeRange.end;
                });
              },
              timePickerBuilder: (BuildContext context, TimeOfDay timeOfDay) {
                return Container(
                  decoration: BoxDecoration(
                    border: Border.all(color: Colors.grey),
                    borderRadius: BorderRadius.circular(4.0),
                  ),
                  child: Center(
                    child: Text(
                      '${timeOfDay.format(context)}',
                      style: TextStyle(fontSize: 16),
                    ),
                  ),
                );
              },
              headerBuilder: (BuildContext context, DateTime dateTime) {
                return Text(
                  '${dateTime.year}-${dateTime.month.toString().padLeft(2, '0')}-${dateTime.day.toString().padLeft(2, '0')}',
                  style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                );
              },
            ),
            SizedBox(height: 20),
            if (startTime != null && endTime != null)
              Text(
                'Selected Time Range: ${startTime!.toLocal().toString().split(' ')[1]} - ${endTime!.toLocal().toString().split(' ')[1]}',
                style: TextStyle(fontSize: 18),
              ),
          ],
        ),
      ),
    );
  }
}

代码解释:

  1. 依赖引入:在pubspec.yaml中添加flutter_occurrence_time_range_selector依赖。
  2. 主应用MyApp是一个简单的Flutter应用,包含一个主页面TimeRangeSelectorDemo
  3. 时间范围选择器页面TimeRangeSelectorDemo是一个有状态的Widget,它包含了一个TimeRangeSelector
  4. 初始时间范围initialSelectedTimeRange设置了初始选择的时间范围,这里设置为当前时间向前推2小时到当前时间。
  5. 时间范围变化回调onTimeRangeChanged是一个回调函数,当用户选择新的时间范围时,这个函数会被调用,并更新状态。
  6. 自定义时间选择器timePickerBuilder允许你自定义每个时间点的显示样式。
  7. 自定义头部headerBuilder允许你自定义日期的头部显示样式。
  8. 显示选中的时间范围:如果选中了时间范围,会在页面上显示选中的时间范围。

这个示例展示了如何使用flutter_occurrence_time_range_selector插件创建一个简单的时间范围选择器,并自定义其显示样式。你可以根据需求进一步自定义和扩展。

回到顶部