Flutter垂直日期选择器插件vertical_date_picker的使用

Flutter垂直日期选择器插件vertical_date_picker的使用

vertical_date_picker 是一个简单且易于使用的垂直日历包,具有许多功能。

示例代码

以下是使用 vertical_date_picker 的完整示例代码:

import 'package:flutter/material.dart';
import 'package:vertical_date_picker/widgets/vertical_calendar_view.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: '垂直日历'),
    );
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: VerticalCalendar(
          firstDate: DateTime.now(), // 设置最早可以选择的日期
          lastDate: DateTime.now().add(const Duration(days: 365)), // 设置最晚可以选择的日期
          onStartDateChanged: (DateTime value) { // 开始日期改变时的回调函数
            print('开始日期改变为 $value');
          },
          onEndDateChanged: (DateTime? value) { // 结束日期改变时的回调函数
            if (value != null) {
              print('结束日期改变为 $value');
            } else {
              print('结束日期已取消');
            }
          },
          currentDate: DateTime.now(), // 当前显示的日期
        ),
      ), // 这个逗号使自动格式化更好看
    );
  }
}

使用说明

  1. 导入包: 在你的项目中添加 vertical_date_picker 依赖,并在文件顶部导入。

    import 'package:vertical_date_picker/widgets/vertical_calendar_view.dart';
    
  2. 初始化应用: 创建一个 MaterialApp 并设置主页。

    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
            useMaterial3: true,
          ),
          home: const MyHomePage(title: '垂直日历'),
        );
      }
    }
    
  3. 创建主页面: 创建一个状态管理类 MyHomePage_MyHomePageState

    class MyHomePage extends StatefulWidget {
      const MyHomePage({super.key, required this.title});
    
      final String title;
    
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            backgroundColor: Theme.of(context).colorScheme.inversePrimary,
            title: Text(widget.title),
          ),
          body: Center(
            child: VerticalCalendar(
              firstDate: DateTime.now(),
              lastDate: DateTime.now().add(const Duration(days: 365)),
              onStartDateChanged: (DateTime value) {},
              onEndDateChanged: (DateTime? value) {},
              currentDate: DateTime.now(),
            ),
          ),
        );
      }
    }
    
  4. 配置垂直日历: 在 body 中添加 VerticalCalendar 小部件,并配置其属性如 firstDate, lastDate, onStartDateChanged, onEndDateChangedcurrentDate

    class _MyHomePageState extends State<MyHomePage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            backgroundColor: Theme.of(context).colorScheme.inversePrimary,
            title: Text(widget.title),
          ),
          body: Center(
            child: VerticalCalendar(
              firstDate: DateTime.now(), // 设置最早可以选择的日期
              lastDate: DateTime.now().add(const Duration(days: 365)), // 设置最晚可以选择的日期
              onStartDateChanged: (DateTime value) { // 开始日期改变时的回调函数
                print('开始日期改变为 $value');
              },
              onEndDateChanged: (DateTime? value) { // 结束日期改变时的回调函数
                if (value != null) {
                  print('结束日期改变为 $value');
                } else {
                  print('结束日期已取消');
                }
              },
              currentDate: DateTime.now(), // 当前显示的日期
            ),
          ),
        );
      }
    }
    

更多关于Flutter垂直日期选择器插件vertical_date_picker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


vertical_date_picker 是一个用于 Flutter 的垂直日期选择器插件,它允许用户以垂直滚动的方式选择日期。这个插件非常适合需要在一个垂直列表中展示日期的场景。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 vertical_date_picker 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  vertical_date_picker: ^1.0.0  # 请使用最新版本

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

使用插件

在你的 Dart 文件中,你可以通过以下步骤来使用 vertical_date_picker

  1. 导入插件:
import 'package:vertical_date_picker/vertical_date_picker.dart';
  1. build 方法中使用 VerticalDatePicker 组件:
class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  DateTime selectedDate = DateTime.now();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Vertical Date Picker Example'),
      ),
      body: Center(
        child: VerticalDatePicker(
          selectedDate: selectedDate,
          onDateChanged: (DateTime newDate) {
            setState(() {
              selectedDate = newDate;
            });
          },
        ),
      ),
    );
  }
}

参数说明

  • selectedDate: 当前选中的日期。
  • onDateChanged: 当用户选择新日期时的回调函数。
  • firstDate: 可选参数,设置日期选择器的最小日期,默认为当前日期减去 100 年。
  • lastDate: 可选参数,设置日期选择器的最大日期,默认为当前日期加上 100 年。
  • initialDate: 可选参数,设置初始显示的日期,默认为当前日期。
  • locale: 可选参数,设置日期显示的本地化语言,默认为系统语言。

自定义样式

你可以通过传递 dateTextStyleselectedDateTextStylemonthTextStyle 等参数来自定义日期选择器的样式。

VerticalDatePicker(
  selectedDate: selectedDate,
  onDateChanged: (DateTime newDate) {
    setState(() {
      selectedDate = newDate;
    });
  },
  dateTextStyle: TextStyle(fontSize: 16, color: Colors.black),
  selectedDateTextStyle: TextStyle(fontSize: 18, color: Colors.blue),
  monthTextStyle: TextStyle(fontSize: 20, color: Colors.green),
)
回到顶部