Flutter 日历组件简单实现

目录
  • 前言
  • 安装
  • 效果
    • demo 演示
    • 业务使用 headerView
  • 使用
    • 配置属性
    • DEMO
  • 感谢

前言

近期有个业务需求,涉及用户付费相关的计算,需要一个日历组件,组件功能如下:

  • 仅支持从明天开始选择预定日期
  • 仅支持可选范围内的日期
  • 日期的选择是连续的
  • 有个推荐日期,需要联动更新
  • todo:
    • 支持不连续的日期选择

Github:tw_calendar

安装

dependencies:
  tw_calendar: latest_version

效果

demo 演示

业务使用 headerView

使用

配置属性

 /// 开始的年月份
  final DateTime firstDate;
  /// 结束的年月份
  final DateTime lastDate;
  /// 选择开始日期
  final DateTime? selectedStartDate;
  /// 选择结束日期
  final DateTime? selectedEndDate;
  /// 点击方法回调
  final Function? onSelectFinish;
  /// 头部组件
  final Widget? headerView;
  /// 选择模式
  final TWCalendarListSeletedMode? seletedMode;
  /// 月视图高度,为空则占满剩余空间
  final double? monthBodyHeight;
  /// 周视图高度, 默认 48
  final double? weekDayHeight;
  /// 水平间隙
  final double? horizontalSpace;
  /// 确认周视图高度, 默认 66
  final double? ensureViewHeight;
  /// 确认按钮的间隙
  final EdgeInsetsGeometry? ensureViewPadding;
  /// 确认按钮选中颜色
  final Color? ensureViewSelectedColor;
  /// 确认未按钮选中颜色
  final Color? ensureViewUnSelectedColor;
  /// 今天的日期的背景颜色
  final Color? dayNumberTodayColor;
  /// 选中日期背景颜色
  final Color? dayNumberSelectedColor;
  /// 确认按钮字体大小
  final double? ensureTitleFontSize;
  /// 点击回调
  final void Function(DateTime seletedDate, int seletedDays)? onSelectDayRang;
  /// 选择确认按钮 title 回调
  final String Function(
          DateTime? selectStartTime, DateTime? selectEndTime, int seletedDays)?
      onSelectDayTitle;

DEMO

TWCalendarList(
      firstDate: TWCalendarTool.tomorrow,
      lastDate: DateTime(2022, 11, 21),
      selectedStartDate: DateTime(2022, 9, 2),
      selectedEndDate: DateTime(2022, 9, 10),
      monthBodyHeight: 300.w,
      seletedMode: TWCalendarListSeletedMode.singleSerial,
      headerView: Container(
        alignment: Alignment.center,
        height: 55.w,
        child: Text(
          '日历组件',
          style: TextStyle(
            color: TWColors.tw333333,
            fontSize: 18.w,
          ),
        ),
      ),
      onSelectDayRang: ((seletedDate, seletedDays) {
        print('seletedDate : $seletedDate, seletedDays : $seletedDays');
      }),
      onSelectFinish: (selectStartTime, selectEndTime) {
        print(
            'selectStartTime : $selectStartTime, selectEndTime : $selectEndTime');
        Navigator.pop(context);
      },
    )

感谢

参考及修改至 demo: flutter_calendar_list

以上就是Flutter 日历组件简单实现的详细内容,更多关于Flutter 日历组件的资料请关注我们其它相关文章!

(0)

相关推荐

  • Flutter实现单选,复选和开关组件的示例代码

    目录 1.开关 Switch 2.单选 Radio 3.复选多选 Checkbox 小结 1.开关 Switch 构造方法: const Switch({ Key? key, required this.value,//当前开关状态 required this.onChanged,// 改变状态回调 this.activeColor,// 开启全部颜色 this.activeTrackColor,// 开启轨道的颜色 this.inactiveThumbColor,//关闭滑块颜色 this.i

  • Flutter绘图组件之CustomPaint使用详解

    目录 简介 CustomPaint介绍 CustomPainter示例 总结 简介 在有些场景中,我们会需要绘制一些高度定制化的组件,比如 UI 设计师给我们出了个难题 —— 弄一个奇形怪状的边框.看在 UI 设计师是一个漂亮小姐姐的份上,又不好意思说这个做不了(那样也很没面子).这个时候我们就不能直接使用 Flutter 自带的那些组件了,而是需要手动绘制组件,那就会需要用到 CuntomPaint 组件.CustomPaint 组件和前端的 Canvas差不多,允许我们在一个画布上绘制各种元

  • Flutter滚动组件之ListView使用方法详解

    ListView ListView是最常用的可滚动组件之一,它可以沿一个方向线性排布所有子组件,并且它也支持基于Sliver的延迟构建模型.我们看看ListView的默认构造函数定义: ListView({   ...     //可滚动widget公共参数   Axis scrollDirection = Axis.vertical,   bool reverse = false,   ScrollController controller,   bool primary,   ScrollP

  • Flutter组件状态管理的3种方法

    前言 前面讲了Flutter布局,布局只是静态的.在Flutter中,组件分为StatelesslWidget和StatefulWidget. StatelesslWidget 没有状态,是一成不变的.比如图标,文字,按钮等 StatefulWidget 有状态的组件,页面数据是动态的,或者会随着用户操作变化,比如多选框,文本输入框等. 有状态组件 重点来了,如何使用实现一个有状态的组件呢? 有状态的组件一般由两个类构成,一个StatefulWidget子类和一个State子类. State类包

  • Flutter中抽屉组件Drawer使用详解

    本文实例为大家分享了Flutter中抽屉组件Drawer实现代码,供大家参考,具体内容如下 1.概述 Scalfold 是 Flutter MaterialApp 常用的布局 Widget,接受一个 drawer属性,支持配置 Drawer,可以实现从侧边栏拉出导航面板,好处是把一些功能菜单折叠起来,通常Drawer是和Listview组件或者 Column组合使用进行纵向布局.Listview组件是竖排排列的,上下可滑动. [注意]如果没有设置 AppBar 的 leading 属性,则当使用

  • jQuery实现的简单日历组件定义与用法示例

    本文实例讲述了jQuery实现的简单日历组件定义与用法.分享给大家供大家参考,具体如下: 说到日历组件,网上一搜一大堆,各种插件啊.集成框架啊实在不少.但是插件有的不合需求,框架嘛依赖关系一大堆,比如jQueryUI.bootstrap等.其实现在我就是想要一个轻量级的日历组件,功能也不需要很强大,只要能兼容所有浏览器,能选择任意年份日期和星期就可以了. 好了,废话不多说,直接上代码: 好了,先引入jQuery库.(发表一下感概:angularJS的数据双向绑定着实让我对jQuery的未来担忧了

  • VUE实现日历组件功能

    哈哈, 就在昨天笔者刚刚在Github 上发布了一个基于VUE的日历组件.过去做日历都是需要引用 jquery moment 引用 fullCalendar.js 的.几者加起来体积庞大不说,也并不是很好使用在vue这种数据驱动的项目里.所以笔者经过一周的拍脑袋,做了一个十分简陋的版本. 简介 目前只支持月视图,该组件是 .vue 文件的形式.所以,大家在使用的时候 是需要node的咯~~~ 安装 npm install vue-fullcalendar DEMO 针对这个组件, 本人做了一个十

  • 原生JS实现日历组件的示例代码

    想要实现的效果 点击日期选择框出现日历 有个日期控制栏帮助选择日期, 包括年.月.日的选择和今天 日历格子,初次点击日期选择框时显示此刻的日期,日历格子的日期应该包括这个月的所有天数,同时如果当月的1号不是周日,还应补全从周日到1号的天数.还要在这个月最后1号的后面补全到周六. 日期控制栏和日历格子的日期还有选择框里的日期的变化要是同步的. 实现思路 为了组件的可复用性,需要用面向对象的思想. 每个日历组件都是一个日历对象,主要包括日期选择框,日期控制显示栏,还有日历格子,为了保持日期控制显示栏

  • Jquery Easyui日历组件Calender使用详解(23)

    本文实例为大家分享了Jquery Easyui日历组件的实现代码,供大家参考,具体内容如下 加载方式 Class加载 <div id="box" class="easyui-calendar" style="width:200px;height:200px;"></div> JS调用加载 <div id="box"></div> <script> $(function

  • javascript实现的淘宝旅行通用日历组件用法实例

    本文实例讲述了javascript实现的淘宝旅行通用日历组件用法.分享给大家供大家参考. 在线演示:http://demo.jb51.net/js/2015/trip-calendar/demo.html PS:下面的演示代码,需要用到 trip-calendar.js与trip-calendar.css文件.打包下载地址 具体如下: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8">

  • 微信小程序日历组件calendar详解及实例

    微信小程序日历组件calendar详解及实例 模版使用: src="../cal/calendar.wxml"> is="calendar" data="{{selected_value,days,month,years,lunar_years,lunar_month,lunar_days,selectDateType,l unar_selected_value}}"> JS代码使用: var Calendar = require('

  • 微信小程序picker组件简单用法示例【附demo源码下载】

    本文实例讲述了微信小程序picker组件简单用法.分享给大家供大家参考,具体如下: picker滚动选择器,现支持三种选择器,通过mode来区分,分别是普通选择器(mode=selector),时间选择器(mode=time),日期选择器(mode=date),默认是普通选择器. 具体功能说明如下: 普通选择器:mode=selector 属性名 类型 默认值 说明 range Array [] mode为selector时,range有效 value Number 0 mode为selecto

  • 微信小程序可滑动周日历组件使用详解

    微信小程序可滑动周日历组件,供大家参考,具体内容如下 看网上周日历组件比较少,自己弄了一个,和大家分享一下. 如果样式变形,请检查是否有共用样式起冲突 展示一下效果图 在components组件文件夹下新建calendarWeek文件夹 直接上代码吧: index.wxml <!--components/calendarWeek/index.wxml--> <!-- 日历 --> <view class="date-choose shrink border-bott

  • 微信小程序可滑动月日历组件使用详解

    微信小程序可滑动月日历组件 此日历可进行左右滑动,展示签到打卡信息,和大家分享一下. 如果样式变形,请检查是否有共用样式起冲突 展示一下效果图 在components组件文件夹下新建calendarMonth文件夹 直接上代码吧: index.wxml <!--components/calendar/index.wxml--> <view class='month'> <!-- <view class='arrow' bindtap='prevMonth'><

  • vue实现一个炫酷的日历组件

    公司业务新开了一个商家管理微信H5移动端项目,日历控件是商家管理员查看通过日程来筛选获取某日用户的订单等数据. 如图: 假设今天为2018-09-02 90天前: 90天后; 产品需求: 展示当前日期(服务器时间)前后90天,一共181天的日期. 日历可以左右滑动切换月份. 当月份的如果不在181天区间的,需要置灰并且不可点击. 点击日历绑定的节点的外部,关闭弹窗. 涉及内容: 获取服务器时间,渲染日历数据 vue-touch监听手势滑动事件 ios日期兼容处理 clickOutSide自定义指

随机推荐

其他