Flutter时间槽选择器插件flutter_time_slot_picker的使用

Flutter时间槽选择器插件flutter_time_slot_picker的使用

flutter_time_slot_picker

一个用于通过水平滑块视图选择时间段的包。它还帮助展示实体的时间表。

开始使用

在您的Flutter项目的pubspec.yaml文件中添加以下依赖:

dependencies:
  ...
  flutter_time_slot_picker: <latest_version>

在您的库中添加以下导入语句:

import 'package:flutter_time_slot_picker/flutter_time_slot_picker.dart';

对于如何开始使用Flutter,请查看官方文档。

TimeSlotPicker 示例

FlutterTimeSlotPicker(
    height: 60,
    bookedSlots: [
    '2:00-3:00',
    '4:00-5:30',
    '6:30-7:00',
    '8:30-9:30',
    '10:00-13:00',
    '14:00-14:30',
    '15:30-18:00',
    ],
    onSlotChange: (availablity, startTime, endTime) {
    setState(() {
        timeSlotAvailablity = availablity;
        selectedStartTime = startTime;
        selectedEndTime = endTime;
    });
    },
),

您可以从简单的添加依赖项开始,并使用FlutterTimeSlotPicker小部件来显示水平时间段选择器。

Alt 文本

完整示例代码

import 'package:flutter/material.dart';
import 'package:flutter_time_slot_picker/datetime_extensions.dart';

import 'package:flutter_time_slot_picker/flutter_time_slot_picker.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

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

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool timeSlotAvailablity = false;
  DateTime selectedStartTime = DateTime.now().roundUp(
    delta: const Duration(minutes: 30),
  );
  DateTime selectedEndTime = DateTime.now()
      .roundUp(
        delta: const Duration(minutes: 30),
      )
      .add(const Duration(minutes: 30));
  List<String> bookedSlots = [
    '11:38-12:11',
    '12:30-13:30',
    '14:0-14:30',
    '0:0-12:30',
    // '10:00-13:00',
    // '14:00-14:30',
    // '15:30-18:00',
    // '1:00-3:00'

    // "17:0-17:30",
    // "17:30-18:0",
    // "18:0-18:30",
    // "0:0-17:30"
  ];

  [@override](/user/override)
  void initState() {
    super.initState();
    timeSlotAvailablity = checkSlotAvailablity(
        selectedStartTime, selectedEndTime, calculateSlots(bookedSlots));
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            FlutterTimeSlotPicker(
              height: 60,
              bookedSlots: bookedSlots,
              onSlotChange: (availablity, startTime, endTime) {
                setState(() {
                  timeSlotAvailablity = availablity;
                  selectedStartTime = startTime;
                  selectedEndTime = endTime;
                });
              },
              startTime: selectedStartTime,
              endTime: selectedEndTime,
              initialTime: DateTime.now().roundUp(
                delta: const Duration(minutes: 30),
              ),
            ),
            const SizedBox(
              height: 10,
            ),
            const Text(
              'Selected Time Slot:',
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            Text(
              '$selectedStartTime - $selectedEndTime',
            ),
            const SizedBox(
              height: 10,
            ),
            const Text(
              'Slot Availability',
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            Text(
              '$timeSlotAvailablity',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_time_slot_picker插件的示例代码。这个插件通常用于在应用中提供时间槽选择功能。

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

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

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

接下来,在你的Flutter项目中导入并使用flutter_time_slot_picker。以下是一个简单的示例,展示了如何使用该插件来选择一个时间槽:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  String? selectedTimeSlot;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Time Slot Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Time Slot: $selectedTimeSlot',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _showTimeSlotPicker();
              },
              child: Text('Select Time Slot'),
            ),
          ],
        ),
      ),
    );
  }

  void _showTimeSlotPicker() {
    showModalBottomSheet(
      context: context,
      builder: (context) {
        return TimeSlotPicker(
          startTime: DateTime.now().startOf(Duration.unit.hours), // 开始时间
          endTime: DateTime.now().add(Duration(hours: 23)), // 结束时间
          duration: Duration(hours: 1), // 每个时间槽的持续时间
          onTimeSlotSelected: (timeSlot) {
            setState(() {
              selectedTimeSlot = timeSlot.toLocal().toString();
            });
            Navigator.of(context).pop();
          },
        );
      },
    );
  }
}

在这个示例中:

  1. MyApp是一个基本的Flutter应用,它包含一个主页MyHomePage
  2. MyHomePage包含一个文本控件,用于显示选中的时间槽,以及一个按钮,用于触发时间槽选择器。
  3. _showTimeSlotPicker方法使用showModalBottomSheet显示时间槽选择器。
  4. TimeSlotPicker小部件的startTimeendTimeduration属性分别设置开始时间、结束时间和每个时间槽的持续时间。
  5. onTimeSlotSelected回调用于处理选中时间槽的事件,并更新selectedTimeSlot状态。

运行这个示例,点击“Select Time Slot”按钮,将会弹出一个底部表单来选择时间槽。选择时间槽后,选中的时间将会显示在屏幕上。

希望这个示例对你有帮助!如果有更多问题,请随时提问。

回到顶部