Flutter日期选择器插件flutter_holo_date_picker_widget的使用

Flutter日期选择器插件flutter_holo_date_picker_widget的使用

A Flutter包,灵感来源于Android的Holo主题。

该插件是基于flutter_cupertino_date_picker包的日期选择器的一个克隆版本,仅作了一些小调整。

开始使用

这个插件展示了灵感来源于Android Holo主题的日期选择器。 请参阅示例以了解简单用法。

截图

对话框示例

小部件示例

支持的语言

  • 英语(美国)
  • 简体中文
  • 葡萄牙语(巴西)
  • 西班牙语
  • 罗马尼亚语
  • 孟加拉语
  • 阿拉伯语
  • 日语
  • 俄语
  • 德语
  • 韩语
  • 意大利语
  • 匈牙利语
  • 希伯来语
  • 印度尼西亚语
  • 土耳其语
  • 挪威语
  • 法语
  • 泰语
  • 立陶宛语
  • 荷兰语
  • 海地克里奥尔语
  • 瑞典语
  • 捷克语
  • 波兰语

完整示例代码

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // 这个widget是应用的根
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '示例',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Holo 日期选择器示例'),
        ),
        body: MyHomePage(),
      ),
      debugShowCheckedModeBanner: false,
    );
  }
}

class MyHomePage extends StatelessWidget {
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          ElevatedButton(
            child: Text("打开选择器对话框"),
            onPressed: () async {
              var datePicked = await DatePicker.showSimpleDatePicker(
                context,
                initialDate: DateTime(1994),
                firstDate: DateTime(1960),
                lastDate: DateTime(2012),
                dateFormat: "dd-MMMM-yyyy",
                locale: DateTimePickerLocale.th,
                looping: true,
              );

              final snackBar = SnackBar(content: Text("选择的日期 $datePicked"));
              ScaffoldMessenger.of(context).showSnackBar(snackBar);
            },
          ),
          ElevatedButton(
            child: Text("显示选择器小部件"),
            onPressed: () {
              Navigator.push(
                  context, MaterialPageRoute(builder: (_) => WidgetPage()));
            },
          )
        ],
      ),
    );
  }
}

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

class _WidgetPageState extends State<WidgetPage> {
  DateTime? _selectedDate;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Container(
          decoration: BoxDecoration(
            gradient: LinearGradient(
              begin: FractionalOffset.topCenter,
              end: FractionalOffset.bottomCenter,
              colors: [
                Colors.grey[900]!,
                Colors.black,
              ],
              stops: const [0.7, 1.0],
            ),
          ),
          child: Center(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                Container(
                  padding: const EdgeInsets.symmetric(horizontal: 25),
                  child: DatePickerWidget(
                    looping: false, // 默认不循环
                    firstDate: DateTime.now(), // DateTime(1960),
                    // lastDate: DateTime(2002, 1, 1),
                    // initialDate: DateTime.now(), // DateTime(1994),
                    dateFormat: "dd/MMMM/yyyy",
                    locale: DatePicker.localeFromString('th'),
                    onChange: (DateTime newDate, _) {
                      setState(() {
                        _selectedDate = newDate;
                      });
                      print(_selectedDate);
                    },
                    pickerTheme: DateTimePickerTheme(
                      backgroundColor: Colors.transparent,
                      itemTextStyle: TextStyle(color: Colors.white, fontSize: 19),
                      dividerColor: Colors.white,
                    ),
                  ),
                ),
                Text("${_selectedDate ?? ''}"),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


flutter_holo_date_picker_widget 是一个用于 Flutter 应用的日期选择器插件,提供了类似于 Android Holo 风格的日期选择器。它支持多种日期选择模式,如日期、月份、年份等。

以下是如何在 Flutter 项目中使用 flutter_holo_date_picker_widget 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_holo_date_picker_widget: ^0.1.0  # 请使用最新版本

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

2. 导入包

在你的 Dart 文件中导入 flutter_holo_date_picker_widget

import 'package:flutter_holo_date_picker_widget/flutter_holo_date_picker_widget.dart';

3. 使用日期选择器

你可以在你的应用中使用 DatePickerWidgetDatePickerDialog 来显示日期选择器。

使用 DatePickerWidget

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('Holo Date Picker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Date: ${selectedDate.toLocal()}',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                final DateTime? pickedDate = await DatePickerWidget.showDatePicker(
                  context,
                  initialDate: selectedDate,
                  firstDate: DateTime(2000),
                  lastDate: DateTime(2100),
                );
                if (pickedDate != null && pickedDate != selectedDate) {
                  setState(() {
                    selectedDate = pickedDate;
                  });
                }
              },
              child: Text('Pick a date'),
            ),
          ],
        ),
      ),
    );
  }
}

使用 DatePickerDialog

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('Holo Date Picker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Date: ${selectedDate.toLocal()}',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                final DateTime? pickedDate = await showDatePickerDialog(
                  context,
                  initialDate: selectedDate,
                  firstDate: DateTime(2000),
                  lastDate: DateTime(2100),
                );
                if (pickedDate != null && pickedDate != selectedDate) {
                  setState(() {
                    selectedDate = pickedDate;
                  });
                }
              },
              child: Text('Pick a date'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 运行应用

现在你可以运行你的 Flutter 应用,并点击按钮来显示日期选择器。选择的日期将会更新并显示在屏幕上。

5. 自定义日期选择器

flutter_holo_date_picker_widget 提供了多种自定义选项,例如:

  • dateFormat: 自定义日期格式。
  • locale: 设置语言环境。
  • theme: 自定义主题。

你可以根据需要进一步自定义日期选择器的外观和行为。

示例代码

final DateTime? pickedDate = await DatePickerWidget.showDatePicker(
  context,
  initialDate: selectedDate,
  firstDate: DateTime(2000),
  lastDate: DateTime(2100),
  dateFormat: 'yyyy-MM-dd',
  locale: 'en_US',
  theme: DatePickerTheme(
    backgroundColor: Colors.white,
    itemStyle: TextStyle(color: Colors.black),
    headerColor: Colors.blue,
  ),
);
回到顶部