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

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

[已弃用] Date Range Picker

目前Flutter已经内置了日期范围选择器,所以我认为我的任务已经完成。感谢使用我的库。
链接:https://api.flutter.dev/flutter/material/showDateRangePicker.html


Demo


开始使用

安装

pubspec.yaml文件的dependencies部分添加以下内容:

date_range_picker: ^1.0.5

运行flutter pub get以安装依赖。


使用

以下是一个完整的示例代码,展示如何使用date_range_picker插件来选择日期范围:

import 'package:flutter/material.dart';
import 'package:date_range_picker/date_range_picker.dart' as DateRangePicker;

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('日期范围选择示例'),
        ),
        body: Center(
          child: MyButton(),
        ),
      ),
    );
  }
}

class MyButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialButton(
      color: Colors.deepOrangeAccent,
      onPressed: () async {
        // 打开日期范围选择器
        final List<DateTime> picked = await DateRangePicker.showDatePicker(
          context: context,
          // 初始选中的开始日期
          initialFirstDate: DateTime.now(),
          // 初始选中的结束日期
          initialLastDate: DateTime.now().add(Duration(days: 7)),
          // 可选日期范围的起始日期
          firstDate: DateTime(2015),
          // 可选日期范围的结束日期
          lastDate: DateTime(DateTime.now().year + 2),
        );

        // 检查用户是否选择了有效的日期范围
        if (picked != null && picked.length == 2) {
          // 打印所选的日期范围
          print('开始日期: ${picked[0]}');
          print('结束日期: ${picked[1]}');
        }
      },
      child: Text("选择日期范围"),
    );
  }
}

主题定制化

如果需要自定义日期选择器的主题颜色,可以通过ThemeBuilder包裹按钮组件来实现。以下是示例代码:

Theme(
  data: Theme.of(context).copyWith(
    // 设置主色调
    accentColor: Colors.green,
    primaryColor: Colors.black,
    buttonTheme: ButtonThemeData(
      highlightColor: Colors.green,
      buttonColor: Colors.green,
      colorScheme: Theme.of(context).colorScheme.copyWith(
        secondary: Colors.red,
        background: Colors.white,
        primary: Colors.green,
        primaryVariant: Colors.green,
        brightness: Brightness.dark,
        onBackground: Colors.green,
      ),
      textTheme: ButtonTextTheme.accent,
    ),
  ),
  child: Builder(
    builder: (context) => RaisedButton(
      color: Color.fromRGBO(212, 20, 15, 1.0),
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0)),
      child: Padding(
        padding: const EdgeInsets.only(top: 10.0, bottom: 10.0, left: 30.0, right: 30.0),
        child: Text(
          "日期选择器",
          style: TextStyle(
            color: Colors.white,
            fontSize: 28,
            fontWeight: FontWeight.w300,
          ),
        ),
      ),
      onPressed: () async {
        final List<DateTime> picked = await DateRangePicker.showDatePicker(
          context: context,
          initialFirstDate: DateTime.now(),
          initialLastDate: DateTime.now().add(Duration(days: 7)),
          firstDate: DateTime(2015),
          lastDate: DateTime(DateTime.now().year + 2),
        );

        if (picked != null && picked.length == 2) {
          print(picked);
        }
      },
    ),
  ),
);

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

1 回复

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


date_range_picker 是一个用于 Flutter 的日期范围选择插件,它允许用户选择一个日期范围。以下是使用 date_range_picker 插件的详细步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 date_range_picker 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  date_range_picker: ^1.0.6

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

2. 导入插件

在你的 Dart 文件中导入 date_range_picker 插件:

import 'package:date_range_picker/date_range_picker.dart' as DateRangePicker;

3. 使用插件

你可以通过调用 DateRangePicker.showDatePicker 方法来显示日期范围选择器。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:date_range_picker/date_range_picker.dart' as DateRangePicker;

class DateRangePickerExample extends StatefulWidget {
  @override
  _DateRangePickerExampleState createState() => _DateRangePickerExampleState();
}

class _DateRangePickerExampleState extends State<DateRangePickerExample> {
  DateTime _startDate = DateTime.now();
  DateTime _endDate = DateTime.now().add(Duration(days: 7));

  Future<void> _selectDateRange(BuildContext context) async {
    final List<DateTime> picked = await DateRangePicker.showDatePicker(
      context: context,
      initialFirstDate: _startDate,
      initialLastDate: _endDate,
      firstDate: DateTime(2015),
      lastDate: DateTime(2030),
    );
    if (picked != null && picked.length == 2) {
      setState(() {
        _startDate = picked[0];
        _endDate = picked[1];
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Date Range Picker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Start Date: ${_startDate.toLocal()}',
              style: TextStyle(fontSize: 18),
            ),
            SizedBox(height: 20),
            Text(
              'End Date: ${_endDate.toLocal()}',
              style: TextStyle(fontSize: 18),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () => _selectDateRange(context),
              child: Text('Select Date Range'),
            ),
          ],
        ),
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: DateRangePickerExample(),
  ));
}

4. 运行应用

现在你可以运行你的 Flutter 应用,点击按钮后会弹出一个日期范围选择器。用户可以选择一个日期范围,选择的日期范围会显示在应用界面上。

5. 参数说明

  • context: BuildContext,用于显示日期选择器。
  • initialFirstDate: 初始的起始日期。
  • initialLastDate: 初始的结束日期。
  • firstDate: 允许选择的最早日期。
  • lastDate: 允许选择的最晚日期。

6. 返回值

showDatePicker 方法返回一个包含两个 DateTime 对象的列表,分别代表用户选择的起始日期和结束日期。如果用户取消了选择,则返回 null

7. 自定义样式

你可以通过自定义 MaterialApp 的主题来更改日期选择器的外观。例如:

MaterialApp(
  theme: ThemeData(
    primarySwatch: Colors.blue,
    visualDensity: VisualDensity.adaptivePlatformDensity,
  ),
  home: DateRangePickerExample(),
);
回到顶部