当前位置: 首页 > news >正文

Flutter美观、易用的日历选择组件

🧩 项目信息:

  • 示例预览地址: https://knight-l.github.io/y_calendar/
  • github主页: https://github.com/knight-L/y_calendar
  • pub主页: https://pub.dev/packages/y_calendar

✨ 特性

  • 📅 单日期选择 - 简洁直观的单日期选择功能
  • 📆 日期范围选择 - 灵活的日期范围选择,适用于各种场景
  • 🌓 深/浅色主题 - 自动适应系统主题,提供良好的视觉体验
  • 🎨 Material 风格 - 遵循 Material Design 设计规范
  • 🚀 预设快捷选项 - 支持添加常用日期预设,提高用户效率

📱 效果展示

范围选择 单日期选择 主题适配
范围选择示例图片 单选示例图片 主题示例图片

🛠️ 安装

在 pubspec.yaml 文件中添加依赖:

dependencies:y_calendar: ^1.0.5

然后运行:

flutter pub get

📖 使用指南

导入包

import 'package:y_calendar/y_calendar.dart';
import 'package:intl/intl.dart'; // 用于格式化日期

单日期选择

ElevatedButton(onPressed: () async {DateTime? date = await YCalendar<DateTime>().showBottomSheet(context);if (date != null) {// 使用选中的日期String formattedDate = DateFormat('yyyy-MM-dd').format(date);print('选中日期: $formattedDate');}},child: Text('单个日期选择'),
)

日期范围选择

ElevatedButton(onPressed: () async {List<DateTime>? dateRange = await YCalendar<List<DateTime>>().showBottomSheet(context);if (dateRange != null) {// 使用选中的日期范围String start = DateFormat('yyyy-MM-dd').format(dateRange[0]);String end = dateRange.length > 1 ? DateFormat('yyyy-MM-dd').format(dateRange[1]) : start;print('选中范围: $start 至 $end');}},child: Text('范围选择'),
)

添加预设日期选项

final DateTime nowTime = DateTime.now();
final Map<String, List<DateTime>> presets = {'本周': DateUtil.getThisWeek(nowTime),'上周': DateUtil.getLastWeek(nowTime),'下周': DateUtil.getNextWeek(nowTime),'本月': DateUtil.getThisMonth(nowTime),'上月': DateUtil.getLastMonth(nowTime),'下月': DateUtil.getNextMonth(nowTime),
};
List<DateTime>? dateRange = await 
YCalendar<List<DateTime>>(presets: presets,
).showBottomSheet(context);

⚙️ 自定义配置

YCalendar<DateTime>(title: "选择日期",              // 日历标题color: Colors.blue,            // 主题颜色minDate: DateTime(2023, 1, 1), // 最小可选日期maxDate: DateTime(2023, 12, 31), // 最大可选日期defaultDate: DateTime.now(),   // 默认选中日期round: BorderRadius.vertical(top: Radius.circular(20.0)), // 圆角设置showConfirm: true,             // 是否显示确认按钮closeOnClickOverlay: true,     // 点击遮罩层是否关闭confirmText: "确定",           // 确认按钮文字height: 400.0,                 // 日历高度
).showBottomSheet(context)

📋 API 参数

参数 类型 默认值 描述
title String "日期选择" 日历标题
color Color? null 主题颜色,影响按钮和选中日期的颜色
minDate DateTime? 去年 1 月 最小可选日期
maxDate DateTime? 明年 12 月 最大可选日期
defaultDate T? null 默认选中的日期
round BorderRadiusGeometry BorderRadius.vertical(top: Radius.circular(20.0)) 圆角设置
showConfirm bool true 是否显示确认按钮
closeOnClickOverlay bool true 点击遮罩层是否关闭
confirmText String "确定" 确认按钮文字
height double 400.0 日历高度
presets Map<String, List>? null 预设日期选项

💡 技术亮点

  1. 泛型设计:使用泛型 YCalendar 支持不同类型的日期选择(单日期或日期范围)
  2. 灵活的日期计算:提供丰富的日期计算工具方法
  3. 自适应布局:使用 Flutter 布局系统实现自适应界面
  4. 高度可定制:提供多种自定义选项,满足不同场景需求
  5. 简洁的 API:简单易用的 API 设计,降低使用门槛

🔍 应用场景

  • 酒店/机票预订应用中的日期选择
  • 日程管理应用中的日期范围选择
  • 任何需要日期输入的表单
  • 日历视图展示
http://www.hskmm.com/?act=detail&tid=31332

相关文章:

  • 2025 年滤袋源头厂家最新推荐排行榜:PTFE/PPS/P84 等多材质滤袋优质品牌精选及选购参考
  • 2025年最新销售管理系统使用指南:顶级销售是如何使用CRM系统? - SaaS软件
  • 2025 年激光焊锡源头厂家最新推荐排行榜:覆盖多行业需求,助力企业精准选优质设备供应商手机摄像头/线材类/通讯行业/FPC柔性线路板激光焊锡厂家推荐
  • 【光照】UnityURP中的[HDR贴图]
  • 2025 年激光粒度仪厂家最新推荐榜单:聚焦行业标杆与新兴势力,助力科研与生产精准选购纳米粒度及Zeta电位仪厂家推荐
  • 第五周第二天5.2
  • ​​电压探头的应用场景与技术选型指南​​
  • 循环调用接口,使用promise.all的应用
  • 部署zabbix proxy代理服务服务器
  • 完整教程:Docker搭建ESPIDF环境,程序下载
  • 基于Java+Springboot+Vue开发的体育用品购物销售商城管理系统源码+运行步骤
  • AI Agent 产品推荐方案
  • 2025年国内分散釜优质厂家排行榜:值得推荐的分散釜厂家有哪些?
  • 彩笔运维勇闯机器学习--GBDT - 详解
  • 二层环路检测
  • 2025年国内搅拌釜优质厂家排行榜:值得推荐的搅拌釜厂家有哪些?
  • 告别词穷!我发现了一款免费无限量的 Midjourney 提示词神器!
  • 音频标签,无语义的布局标签,字符实体(尖括号和空格)
  • 2025 年最新推荐票务系统厂家综合实力榜单:覆盖高铁站 / 景区 / 高校实训等场景,精准盘点优质品牌景区售检票务系统/高校铁路仿真售检票务系统/模拟铁路12306自动售检实训票务系统厂家推荐
  • 深入解析:Apache Superset 企业级实战:从部署到优化的全链路指南
  • 2025 年闸机生产厂家最新推荐榜单:涵盖多场景需求的实力厂家权威盘点海关通关自助验证/边境防疫自助边检验证/AB门自助验证/双门互锁视频防尾随自助验证/高铁自助核验检票闸机厂家推荐
  • VKProxy
  • 2025 年手套箱厂家推荐排行榜,惰性气体/真空/氮气/防护手套箱厂家推荐
  • 服务没有及时响应启动或控制请求
  • 【日记】央视不要我,笑死(1672 字)
  • 无心插柳柳成荫/万能的添加地址模块/一个播放地址带上各种参数
  • 构造专题 #2
  • HarmonyOS 详细安装第三方库的流程与注意
  • 2025-10-14
  • MySQL笔记---表的约束 - 实践