Flutter自定义时间选择器插件custom_time_picker_widget的使用

Flutter自定义时间选择器插件custom_time_picker_widget的使用

custom_time_picker_widget 是一个自定义的时间选择器插件,允许你设置可选时间范围,类似于 showDatePicker 的功能。

showCustomTimePicker(
    context: context,
    // 如果提供了可选时间筛选条件,则必须提供此回调
    onFailValidation: (context) => print('不可用的选择'),
    initialTime: TimeOfDay(hour: 2, minute: 0),
    selectableTimePredicate: (time) =>
        time.hour > 1 && 
        time.hour < 14 && 
        time.minute % 10 == 0).then((time) =>
    setState(() => selectedTime = time?.format(context)))

你可以通过以下完整的示例来查看如何使用 custom_time_picker_widget 插件:

import 'package:flutter/material.dart';
import 'package:time_picker_widget/time_picker_widget.dart'; // 导入时间选择器插件

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('自定义时间选择器示例')),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  TimeOfDay selectedTime;

  Future<void> _selectTime(BuildContext context) async {
    final TimeOfDay picked = await showCustomTimePicker(
        context: context,
        onFailValidation: (context) => print('不可用的选择'),
        initialTime: TimeOfDay(hour: 2, minute: 0),
        selectableTimePredicate: (time) =>
            time.hour > 1 &&
            time.hour < 14 &&
            time.minute % 10 == 0);
    if (picked != null && picked != selectedTime)
      setState(() {
        selectedTime = picked;
      });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ElevatedButton(
          onPressed: () => _selectTime(context),
          child: Text('选择时间'),
        ),
        SizedBox(height: 20),
        Text(
          selectedTime == null
              ? '未选择时间'
              : '已选择时间: ${selectedTime.format(context)}',
          style: TextStyle(fontSize: 20),
        ),
      ],
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用Flutter自定义时间选择器插件custom_time_picker_widget的示例代码。这个示例展示了如何集成并使用该插件来选择时间。

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

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

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

接下来,在你的Flutter项目中,你可以按照以下方式使用custom_time_picker_widget

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

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

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

class TimePickerDemo extends StatefulWidget {
  @override
  _TimePickerDemoState createState() => _TimePickerDemoState();
}

class _TimePickerDemoState extends State<TimePickerDemo> {
  TimeOfDay selectedTime = TimeOfDay.now();

  void _showTimePicker(BuildContext context) async {
    final TimeOfDay? picked = await showModalBottomSheet<TimeOfDay>(
      context: context,
      builder: (BuildContext context) {
        return Container(
          height: 250,
          child: CustomTimePickerWidget(
            initialTime: selectedTime,
            onChanged: (TimeOfDay time) {
              setState(() {
                selectedTime = time;
              });
            },
            onConfirm: (TimeOfDay time) {
              Navigator.of(context).pop(time);
              setState(() {
                selectedTime = time;
              });
            },
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.circular(10),
            ),
          ),
        );
      },
    );

    if (picked != null && picked != selectedTime) {
      setState(() {
        selectedTime = picked;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Time Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Time: ${selectedTime.format(context)}',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () => _showTimePicker(context),
              child: Text('Pick Time'),
            ),
          ],
        ),
      ),
    );
  }
}

代码解释:

  1. 依赖项:确保在pubspec.yaml文件中添加了custom_time_picker_widget
  2. 主应用:在MyApp类中定义了应用的入口。
  3. 演示页面TimePickerDemo是一个有状态的widget,用于展示时间选择器和处理用户选择的时间。
  4. 时间选择器_showTimePicker方法用于展示底部的模态时间选择器。使用了CustomTimePickerWidget,并设置了初始时间、时间变化回调和确认回调。
  5. UI布局:在build方法中,定义了一个简单的布局,包含一个显示选定时间的文本和一个按钮,点击按钮会弹出时间选择器。

注意事项:

  • 确保custom_time_picker_widget插件的版本是最新的,或者根据你的需求选择合适的版本。
  • 如果插件的API有变化,请参考最新的文档进行适配。

这个示例展示了如何使用custom_time_picker_widget插件来创建一个自定义的时间选择器,并在用户选择时间后更新UI。希望这对你有帮助!

回到顶部