前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Flutter自制插件之r_calendar日历插件

Flutter自制插件之r_calendar日历插件

作者头像
rhyme_lph
发布于 2020-02-18 06:42:15
发布于 2020-02-18 06:42:15
2.8K10
代码可运行
举报
文章被收录于专栏:Flutter&DartFlutter&Dart
运行总次数:0
代码可运行

image

r_calendar

??Flutter日历插件,支持自定义日历,月视图/周视图切换、点击拦截、单选(切换月自动选)、多选(散选/聚选) .---------------------------------------------- | github地址: | https://github.com/rhymelph/r_calendar | pub地址: | https://pub.dev/packages/r_calendar | apk体验: | https://fir.im/2aut `----------------------------------------------

  • [✔] 月视图/周视图切换
  • [✔] 自定义日历
  • [✔] 点击拦截
  • [✔] 单选,切换月/周自动选
  • [✔] 多选,散选/聚选

1.如何使用.

  • pubspec.yaml文件添加依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dependencies:
    r_calendar: last version
  • 导入包
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:r_calendar/r_calendar.dart';
  • 单选控制器初始化
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
///
/// [selectedDate] 默认选中的那天
/// [isAutoSelect] 当月份改变时,是否自动选中对应的月份的同一天

    RCalendarController controller= RCalendarController.single(
                    selectedDate: DateTime.now(),
                    isAutoSelect: true,);
  • 多选控制器初始化
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
///
/// [selectedDates] 默认选中的日期数组
/// [isDispersion] 是否散选,否则为连续选中

    RCalendarController controller = RCalendarController.multiple(
                    selectedDates: [
                        DateTime(2019, 12, 1),
                        DateTime(2019, 12, 2),
                        DateTime(2019, 12, 3),
                    ],
                    isDispersion: true);
  • 周视图/月视图(默认月视图)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
///
/// [mode] 模式
/// -   RCalendarMode.week 周视图模式
/// -   RCalendarMode.month 月视图模式

    RCalendarController controller = RCalendarController.single(
                    mode:RCalendarMode.week);
  • 数据变化监听
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// 添加监听器观察值的变化
    RCalendarController controller = RCalendarController.multiple(...)
    ..addListener((){
    // 是否为多选
    // controller.isMultiple

    // 单选下
    // 当月份改变时,是否自动选中对应的月份的同一天
    // controller.isAutoSelect
    // 当前选中的日期
    // controller.selectedDate;

    // 多选
    // 是否散选,否则为连续选中
    // controller.isDispersion;
    // 当前选中的日期列表
    // controller.selectedDates;

    // 周视图/月视图
    // controller.mode
    });
  • 自定义日历
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyRCalendarCustomWidget extends RCalendarCustomWidget {
  // 如果你想设置第一天是星期一,请更改MaterialLocalizations 的firstDayOfWeekIndex
  // 日 一 二 三 四 五 六
  //构建头部
  @override
  List<Widget> buildWeekListWidget(BuildContext context,MaterialLocalizations localizations){...};

  // 1 2 3 4 5 6 7
  //构建普通的日期
  @override
  Widget buildDateTime(BuildContext context,DateTime time, List<RCalendarType> types){...};

  //   <  2019年 11月 >
  //构建年份和月份 左指示器、右指示器,返回null就没有
  @override
  Widget buildTopWidget(BuildContext context,RCalendarController controller){...};

  //是否不可用,不可用时,无点击事件
  @override
  bool isUnable(DateTime time, bool isSameMonth){...};

  //点击拦截,当返回true时进行拦截,就不会改变选中日期
  @override
  FutureOr<bool> clickInterceptor(BuildContext context,DateTime dateTime){...};

  //子view的高度
  @override
  double get childHeight=>{...};
}

2.使用它.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:flutter/material.dart';
import 'package:r_calendar/r_calendar.dart';

void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
  RCalendarController controller;

  @override
  void initState() {
    super.initState();
    controller = RCalendarController.multiple(selectedDates: [
      DateTime(2019, 12, 1),
      DateTime(2019, 12, 2),
      DateTime(2019, 12, 3),
    ]);
//    controller = RCalendarController.single(selectedDate: DateTime.now(),isAutoSelect: true);
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: RCalendarWidget(
               controller: controller,
               customWidget: DefaultRCalendarCustomWidget(),
               firstDate: DateTime(1970, 1, 1), //当前日历的最小日期
               lastDate: DateTime(2055, 12, 31),//当前日历的最大日期
             ),
    );
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
组件很多地方不能自定义,也没有回调值,比如点击星期,能获得星期值,能获取当前所显示的年月份是多少,点击日期没有回调事件,长按日期事件没有
组件很多地方不能自定义,也没有回调值,比如点击星期,能获得星期值,能获取当前所显示的年月份是多少,点击日期没有回调事件,长按日期事件没有
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Flutter实现一个酷炫带动画的列表型多选日历组件
由于项目需要,用Flutter重构了之前用Android做过的日历组件,整体效果感觉不错,流畅度甚至超过原来的,这里需要提一下官网的做法,如下:
kimihe
2020/03/27
1.8K0
Flutter实现代码提示功能
在实现代码提示功能前,我们先来看看什么是代码提示,当我输入关键字String 时,如果输入到 Stri 的时候,编辑器会为我找出所有包含 Stri 的代码关键词,这个时候,我们只要选中需要输入的关键字,它就会为我补充剩余的单词,这个就是代码提示功能,那么在Flutter 中如何实现这一功能呢?
rhyme_lph
2021/07/29
1.7K0
Flutter实现代码提示功能
Flutter 时间选择组件
在Flutter 应用开发过程中,或多或少的都会涉及到时间选择器相关的内容。Flutter默认提供了DatePicker日期选择器,如果对样式没有特殊的要求,那么可以使用它来进行时间的选择,默认的样式如下所示。
xiangzhihong
2022/11/30
3.8K0
基于Flutter手把手教你实现一个日期选择(日历形式)
今天的主题是,在flutter里面实现一个日期选择的自定义控件,或者说自定义组件,考虑到这个日期自定义组件的通用性,我们将会采用插件开发开始来做,这样就可以发布到 pub.dev 上,供广大flutter开发者用(虽然别人不一定会用哈,但是我们要对自己有一个小小的要求不是嘛!)
老码小张
2023/11/14
2.9K0
基于Flutter手把手教你实现一个日期选择(日历形式)
Flutter 仿ios自定义一个DatePicker
编辑个人资料,修改生日的时候需要用到,需求就是如果传了日期就要滚动到传的日期位置,如果没有穿就是系统当前时间。所以动手撸一个,有需要的同学可以拿去做轮子。
赵哥窟
2021/03/02
1.1K0
Flutter 仿ios自定义一个DatePicker
为啥Flutter Hooks没有受到太多关注和青睐?
Flutter Hooks 虽然面世已经有一段时间了,但是迄今为止它并没有受到太多关注和青睐。我很奇怪为什么会是这个样子,毕竟它真的很好用!在本文中,我会试着告诉大家如何使用 Flutter Hooks 来减少样板代码,并基本上摆脱你现在用的几乎所有有状态小部件(StatefulWidget),让大家知道 Hooks 用起来是多么简单利落!
深度学习与Python
2020/08/11
1.2K0
Flutter中的日期、格式化日期、日期选择器组件在
所谓时间戳,是指自格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
拉维
2019/08/29
27.1K0
Flutter中的日期、格式化日期、日期选择器组件在
【Flutter 工程】003-钩子函数:Flutter Hooks
Hooks 是 React 框架中引入的一项特性,用来分离状态逻辑和视图逻辑。如今,这个概念已经不仅限于 React,其他前端框架也在学习和借鉴。在 Flutter 开发中,业务逻辑和视图逻辑的耦合一直是一个比较突出的痛点,这也是各大前端框架常遇到的一个共性难题。为了解决这个问题,前端社区提出了许多方案,如MVP、MVVM、React 的Mixin、高阶组件(HOC),以及Hooks。在Flutter中,开发者可能对Mixin比较熟悉。但是,Mixin的应用也存在一定的局限性:
訾博ZiBo
2025/01/06
1520
【Flutter 工程】003-钩子函数:Flutter Hooks
Flutter | 一文搞懂 BuildContext
[BuildContext] objects are actually [Element] objects. The [BuildContext] ,interface is used to discourage direct manipulation of [Element] objects.
345
2022/02/11
5910
Flutter路由插件-r_router(全面适配Navigator2.0)
在开发Flutter开发的过程中,路由跳转页面是十分常见的,市面上也有许许多多的路由插件包,例如fluro、ff_annotation_route、routermaster等等,但在个人使用上面,还是会有一些各种各样的不舒适,于是就开发了r_router这个插件包,我们来学习一下怎么使用吧!非常简单
rhyme_lph
2021/11/24
1.1K0
Flutter 构建完整应用手册-联网 顶
从大多数应用程序获取互联网上的数据是必要的。 幸运的是,Dart和Flutter为这类工作提供了工具!
南郭先生
2018/08/14
2.8K0
Flutter 构建完整应用手册-联网
                                                    顶
Flutter 中可定制的时间规划器
Flutter 从一开始就是一场伟大的邂逅。构建引人入胜的 UI 从未如此快速。无论您是业余爱好者还是有教养的开发人员,都不难对 Flutter 产生无可救药的迷恋。所有软件开发人员都明白日期是最棘手的事情。同样,时间表也不是特例。
老孟Flutter
2021/09/03
1.8K0
Flutter 中可定制的时间规划器
Flutter的两种本地存储方式之数据库(2)
如果需要持久化大量格式化后的数据,并且这些数据还会以较高的频率更新,为了考虑进一步的扩展性,通常会选用 sqlite 数据库来应对这样的场景。
徐建国
2021/08/06
2.1K0
flutter自定义组件最佳实践
接触flutter一段时间,用flutter做过一些demo项目,也看了一些flutter的源码,对flutter的组件体系有了一些了解,这里总结一下flutter自定义组件的最佳实践。
老码小张
2024/04/02
7961
flutter自定义组件最佳实践
「 flutter 必知必会 」最强事件发布/订阅框架方案 event_bus 全局事件总线使用解析
一、前言 EventBus是全局事件总线,底层通过Stream来实现;它可以实现不同页面的跨层访问,通过Stream的机制来实现不同widget之间的状态共享. 二、作用 举个例子: 你有一个主界面,里面有一些信息可能会修改,但触发源不在该界面,是在其他的界面触发了一些事件后,首页的内容需要做修改。如果没有EventBus,也有很多的方式可以实现,譬如定义全局静态变量、或者定义个CallBack接口传出去等等。不管怎样,总是要把主页和触发源关联起来,这是相当难受的,这不但会导致代码量暴涨,同时还会导致耦合
圆号本昊
2021/09/24
1.3K0
Flutter Lesson 3:Flutter组件(widget)前篇
介绍完Flutter开发环境的搭建以及Dart基础语法,我们就可以着手进行开发了。一般我们开始学习一门技术或者是一门语言的时候,都会写一个Hello World的Demo。所以,撸起袖子开始干。不过在职之前,我们先来看看Flutter项目的默认文件以及目录结构。
踏浪
2019/07/31
9100
Flutter Lesson 3:Flutter组件(widget)前篇
Flutter之旅:认识Widget(源码级)
1.Widget的第一印象 1.1:初次的见面 首先我们来到第一次看到Widget类的场景,那时还对这个世界一无所知, 进入程序的入口时runApp函数中需要传入一个Widget对象,这便是第一眼。 初始项目中的做法是自定义了一个MyApp类继承自StatelessWidget。 void main()=>runApp(MyApp()); ---->[flutter/lib/src/widgets/binding.dart:778]---- void runApp(Widget app) {
张风捷特烈
2020/04/30
1.4K0
Flutter之旅:认识Widget(源码级)
<大厂实战经验> Flutter&鸿蒙next 中使用 initState 和 mounted 处理异步请求的详细解析
在 Flutter 开发中,处理异步请求是常见的需求,例如从网络获取数据。理解如何在 initState 中触发异步请求,并在请求完成时使用 setState 更新 UI 是非常重要的。在这篇博客中,我们将深入探讨如何在 initState 中执行异步请求,并安全地使用 mounted 属性确保在适当的时机更新状态。
淼学派对
2024/11/12
2270
探索 Flutter 中的 NavigationRail:使用详解
在 Flutter 中,NavigationRail 是一个垂直的导航栏组件,用于在应用程序中提供导航功能。它通常用于更大屏幕空间的设备,如平板电脑和桌面应用程序。NavigationRail 提供了一种直观的方式来浏览应用程序的不同部分,并允许用户轻松地切换页面或执行导航操作。
繁依Fanyi
2024/03/24
1.1K0
超过百万的StackOverflow Flutter 问题-第二期
老孟导读:一个月前分享的《超过百万的StackOverflow Flutter 问题-第一期》受到很多朋友的喜欢,非常感谢大家的支持,在文章末尾有第一期的链接,希望此文能对你有所帮助。
老孟Flutter
2020/09/11
1.8K0
推荐阅读
相关推荐
Flutter实现一个酷炫带动画的列表型多选日历组件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验