Flutter日期选择插件flutter_rounded_date_picker的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter日期选择插件flutter_rounded_date_picker的使用

简介

flutter_rounded_date_picker 是一个帮助你以圆角日历形式选择日期和年份的Flutter插件,同时支持自定义主题。

示例动画

示例 示例 示例 示例

安装

pubspec.yaml 文件中添加依赖项,包括 flutter_localizations

dependencies:
  flutter_localizations:
    sdk: flutter
  flutter_rounded_date_picker: ^3.0.2

导入

在你的Dart文件中导入包:

import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_rounded_date_picker/rounded_picker.dart';

初始化本地化

MaterialApp 小部件中添加本地化代理,并指定应用程序支持的语言:

MaterialApp(
    localizationsDelegates: [
          GlobalMaterialLocalizations.delegate,
          GlobalWidgetsLocalizations.delegate,
    ],
    supportedLocales: [
          const Locale('en', 'US'), // 英语
          const Locale('th', 'TH'), // 泰语
    ],
    ...
)

显示日期选择器

显示允许用户选择日期的日期选择器:

DateTime newDateTime = await showRoundedDatePicker(
  context: context,
  initialDate: DateTime.now(),
  firstDate: DateTime(DateTime.now().year - 1),
  lastDate: DateTime(DateTime.now().year + 1),
  borderRadius: 16,
);

日期选择器 日期选择器

显示年份选择器

显示允许用户选择年份的年份选择器:

DateTime newDateTime = await showRoundedDatePicker(
  context: context,
  initialDatePickerMode: DatePickerMode.year,
  theme: ThemeData(primarySwatch: Colors.green),
);

年份选择器

主题设置

你可以通过 ThemeData 类和 PrimarySwatch 来为日期选择器分配主题:

DateTime newDateTime = await showRoundedDatePicker(
  context: context,
  theme: ThemeData(primarySwatch: Colors.pink),
);

粉色主题

深色主题

DateTime newDateTime = await showRoundedDatePicker(
  context: context,
  theme: ThemeData.dark(),
);

深色主题

自定义主题

DateTime newDateTime = await showRoundedDatePicker(
  context: context,
  background: Colors.white,
  theme: ThemeData(
    primaryColor: Colors.red[400],
    accentColor: Colors.green[800],
    dialogBackgroundColor: Colors.purple[50],
    textTheme: TextTheme(
      body1: TextStyle(color: Colors.red),
      caption: TextStyle(color: Colors.blue),
    ),
    disabledColor: Colors.orange,
    accentTextTheme: TextTheme(
      body2 : TextStyle(color: Colors.green[200]),
    ),
  ),
);

自定义主题

自定义日期选择器

可以使用 styleDatePicker 字段来自定义日期选择器的样式,如字体大小、粗细、每个部分的文字颜色等。

示例:自定义字体大小和间距(适用于平板电脑)

DateTime newDateTime = await showRoundedDatePicker(
  context: context,
  theme: ThemeData(primarySwatch: Colors.deepPurple),
  styleDatePicker: MaterialRoundedDatePickerStyle(
    textStyleDayButton: TextStyle(fontSize: 36, color: Colors.white),
    textStyleYearButton: TextStyle(fontSize: 52, color: Colors.white),
    textStyleDayHeader: TextStyle(fontSize: 24, color: Colors.white),
    textStyleCurrentDayOnCalendar: TextStyle(fontSize: 32, color: Colors.white, fontWeight: FontWeight.bold),
    textStyleDayOnCalendar: TextStyle(fontSize: 28, color: Colors.white),
    textStyleDayOnCalendarSelected: TextStyle(fontSize: 32, color: Colors.white, fontWeight: FontWeight.bold),
    textStyleDayOnCalendarDisabled: TextStyle(fontSize: 28, color: Colors.white.withOpacity(0.1)),
    textStyleMonthYearHeader: TextStyle(fontSize: 32, color: Colors.white, fontWeight: FontWeight.bold),
    paddingDatePicker: EdgeInsets.all(0),
    paddingMonthHeader: EdgeInsets.all(32),
    paddingActionBar: EdgeInsets.all(16),
    paddingDateYearHeader: EdgeInsets.all(32),
    sizeArrow: 50,
    colorArrowNext: Colors.white,
    colorArrowPrevious: Colors.white,
    marginLeftArrowPrevious: 16,
    marginTopArrowPrevious: 16,
    marginTopArrowNext: 16,
    marginRightArrowNext: 32,
    textStyleButtonAction: TextStyle(fontSize: 28, color: Colors.white),
    textStyleButtonPositive: TextStyle(fontSize: 28, color: Colors.white, fontWeight: FontWeight.bold),
    textStyleButtonNegative: TextStyle(fontSize: 28, color: Colors.white.withOpacity(0.5)),
    decorationDateSelected: BoxDecoration(color: Colors.orange[600], shape: BoxShape.circle),
    backgroundPicker: Colors.deepPurple[400],
    backgroundActionBar: Colors.deepPurple[300],
    backgroundHeaderMonth: Colors.deepPurple[300],
  ),
  styleYearPicker: MaterialRoundedYearPickerStyle(
    textStyleYear: TextStyle(fontSize: 40, color: Colors.white),
    textStyleYearSelected: TextStyle(fontSize: 56, color: Colors.white, fontWeight: FontWeight.bold),
    heightYearRow: 100,
    backgroundPicker: Colors.deepPurple[400],
  ));

自定义样式

示例完整代码

以下是一个完整的示例应用,演示了如何使用 flutter_rounded_date_picker 插件:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_rounded_date_picker/rounded_picker.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        DefaultCupertinoLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      locale: Locale('en', 'US'),
      supportedLocales: [
        const Locale('en', 'US'), // English
        const Locale('th', 'TH'), // Thai
      ],
      home: Home(),
    );
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Rounded Date Picker Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            DateTime newDateTime = await showRoundedDatePicker(
              context: context,
              initialDate: DateTime.now(),
              firstDate: DateTime(DateTime.now().year - 1),
              lastDate: DateTime(DateTime.now().year + 1),
              borderRadius: 16,
              theme: ThemeData(primarySwatch: Colors.deepPurple),
            );
            if (newDateTime != null) {
              print(newDateTime);
            }
          },
          child: Text('Select Date'),
        ),
      ),
    );
  }
}

这个示例展示了如何在一个简单的Flutter应用中集成并使用 flutter_rounded_date_picker 插件。点击按钮时会弹出一个圆形边框的日期选择器,用户可以选择一个日期,并在控制台打印出来。


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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用flutter_rounded_date_picker插件的示例代码。这个插件提供了一个美观且用户友好的日期选择器。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_rounded_date_picker: ^2.0.0  # 请检查最新版本号

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

接下来,你可以在你的Flutter应用中实现日期选择器。以下是一个完整的示例代码:

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

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

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

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

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Rounded Date Picker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              selectedDate == null
                  ? 'No date selected'
                  : 'Selected Date: ${selectedDate!.toLocal()}',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _showDatePicker(context);
              },
              child: Text('Select Date'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _showDatePicker(BuildContext context) async {
    final DateTime? pickedDate = await showRoundedDatePicker(
      context: context,
      initialDate: selectedDate ?? DateTime.now(),
      firstDate: DateTime(2000),
      lastDate: DateTime(2101),
      builder: (BuildContext context, Widget? child) {
        return Theme(
          data: ThemeData.light().copyWith(
            colorScheme: ColorScheme.fromSwatch(
              primarySwatch: Colors.blue,
            ).copyWith(
              background: Colors.white,
            ),
          ),
          child: child!,
        );
      },
    );

    if (pickedDate != null && pickedDate != selectedDate) {
      setState(() {
        selectedDate = pickedDate;
      });
    }
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮用于显示日期选择器。当用户点击按钮时,会弹出一个RoundedDatePicker对话框,用户可以选择一个日期。选择的日期会显示在按钮下方的文本中。

关键点:

  1. 使用showRoundedDatePicker函数来显示日期选择器。
  2. 使用setState方法来更新UI以反映用户选择的日期。
  3. 可以通过builder参数来自定义日期选择器的主题和样式。

确保你已经正确安装了flutter_rounded_date_picker插件,并根据需要调整日期范围和其他参数。

回到顶部