Flutter日期选择插件month_year_picker2的使用

Flutter日期选择插件month_year_picker2的使用

month_year_picker2 是一个受 Flutter 的日期选择器设计启发的月份/年份选择器。它允许用户方便地选择月份和年份。

快速开始

以下是使用 month_year_picker2 的步骤:

  1. 打开你的 pubspec.yaml 文件,并添加以下依赖项:

    month_year_picker2: ^0.3.0+1
    

    或者在终端中运行以下命令来添加该依赖项:

    flutter pub add month_year_picker2
    
  2. 运行 flutter pub get 来获取新添加的依赖项。

  3. 在你的代码中导入 month_year_picker2 库:

    import 'package:month_year_picker2/month_year_picker2.dart';
    

    此外,确保你的 MaterialApp 中包含以下 localizationsDelegates

    MaterialApp(
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        MonthYearPickerLocalizations.delegate,
      ],
    )
    
  4. 在代码中使用 month_year_picker2

    final selected = await showMonthYearPicker(
      context: context,
      initialDate: DateTime.now(),
      firstDate: DateTime(2019),
      lastDate: DateTime(2023),
    );
    

参数

参数名称 描述
context 必须不为 null。将传递给内部的 showDialog 函数调用。
initialDate 必须不为 null 并且必须在 firstDatelastDate 之间。initialDate 将被截断为其 yearmonth 组件。当月/年选择器首次显示时,它将显示 initialDate 的月份/年份,并且 initialDate 被选中。
firstDate 必须不为 nullfirstDate 将被截断为其 yearmonth 组件。这是最早的允许月份/年份。
lastDate 必须不为 nulllastDate 将被截断为其 yearmonth 组件。这是最新的允许月份/年份。
selectableMonthYearPredicate 可以为 null。提供完全控制哪些月份/年份可以被选中的函数。如果提供,则只有 selectableMonthYearPredicate 返回 true 的月份/年份才能被选中。
locale 可以为 null。如果提供,将用于设置月/年选择器的区域设置。否则,默认为由 Localizations 提供的环境区域设置。
useRootNavigator 可以为 null。将传递给内部的 showDialog 函数调用。
routeSettings 可以为 null。将传递给内部的 showDialog 函数调用。
textDirection 可以为 null。如果提供,将用于设置月/年选择器的文本方向。否则,默认为由 Directionality 提供的环境文本方向。
builder 可以为 null。此参数可用于包装对话框小部件的父小部件。
initialMonthYearPickerMode 必须不为 null。可以用来使年份选择器最初出现在 MonthYearPickerMode.year 模式下。默认为 MonthYearPickerMode.month 模式。

截图

模式 截图
竖屏模式下的月份选择器(默认区域)
竖屏模式下的年份选择器(默认区域)
竖屏模式下的月份选择器(马来语区域)
竖屏模式下的年份选择器(马来语区域)
竖屏模式下的月份选择器(阿拉伯语区域)
竖屏模式下的年份选择器(阿拉伯语区域)
横屏模式下的月份选择器(默认区域)
横屏模式下的年份选择器(默认区域)
横屏模式下的月份选择器(马来语区域)
横屏模式下的年份选择器(马来语区域)
横屏模式下的月份选择器(阿拉伯语区域)
横屏模式下的年份选择器(阿拉伯语区域)

构建源码

依赖项

  1. Dart SDK 版本 3.0.0 或更新。
  2. Flutter SDK 版本 3.10 或更新。

步骤

  1. 将此 Git 仓库克隆到您的机器上。
  2. 运行 .\gen_l10n.ps1 以重新生成本地化字符串。

功能与错误报告

如需报告功能请求或错误,请前往 问题追踪器

许可证

该项目采用 MIT 许可证。详细信息请参见 许可证文件

完整示例

以下是一个完整的示例代码,展示了如何在 Flutter 应用程序中使用 month_year_picker2

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart';
import 'package:month_year_picker2/month_year_picker2.dart';

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

class ExampleApp extends StatelessWidget {
  const ExampleApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Month Year Picker Example',
      home: MyHomePage(),
      localizationsDelegates: [
        GlobalWidgetsLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        MonthYearPickerLocalizations.delegate,
      ],
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

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

class _MyHomePageState extends State<MyHomePage> {
  DateTime? _selected;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Month Year Picker Example')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            if (_selected == null)
              const Text('No month year selected.')
            else
              Text(DateFormat().add_yM().format(_selected!)),
            TextButton(
              child: const Text('DEFAULT LOCALE'),
              onPressed: () => _onPressed(context: context),
            ),
            TextButton(
              child: const Text('BAHASA MALAYSIA'),
              onPressed: () => _onPressed(context: context, locale: 'ms'),
            ),
            TextButton(
              child: const Text('اللغة العربية'),
              onPressed: () => _onPressed(context: context, locale: 'ar'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _onPressed({
    required BuildContext context,
    String? locale,
  }) async {
    final localeObj = locale != null ? Locale(locale) : null;
    final selected = await showMonthYearPicker(
      context: context,
      initialDate: _selected ?? DateTime.now(),
      firstDate: DateTime(2019),
      lastDate: DateTime(2030),
      locale: localeObj,
    );

    if (selected != null) {
      setState(() {
        _selected = selected;
      });
    }
  }
}

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

1 回复

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


month_year_picker2 是一个用于 Flutter 的日期选择插件,它允许用户选择月份和年份,而不是具体的日期。这个插件非常适合在只需要选择月份和年份的场景中使用。以下是使用 month_year_picker2 插件的步骤和示例代码。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  month_year_picker2: ^0.2.0  # 请检查最新版本

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

2. 导入插件

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

import 'package:month_year_picker2/month_year_picker2.dart';

3. 使用 MonthYearPicker

你可以使用 MonthYearPicker 来显示一个月份和年份的选择器。以下是一个简单的示例,展示如何在按钮点击时弹出月份和年份选择器,并获取用户选择的月份和年份。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MonthYearPickerExample(),
    );
  }
}

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

class _MonthYearPickerExampleState extends State<MonthYearPickerExample> {
  DateTime? _selectedDate;

  Future<void> _selectMonthYear(BuildContext context) async {
    final DateTime? picked = await showMonthYearPicker(
      context: context,
      initialDate: _selectedDate ?? DateTime.now(),
      firstDate: DateTime(2020),
      lastDate: DateTime(2030),
    );

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Month Year Picker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              _selectedDate == null
                  ? 'No date chosen!'
                  : 'Selected: ${_selectedDate!.month}/${_selectedDate!.year}',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () => _selectMonthYear(context),
              child: Text('Select Month and Year'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部