Git Product home page Git Product logo

flutter_custom_calendar's Introduction

The code owner of the repo has not been actively building Flutter projects, thus the repo has been archived. 该项目的作者已经长时间未开发 Flutter 项目,故该项目已被归档。

flutter_custom_calendar

本插件是基于flutter_custom_calendar做了稍微的修改进行上传的。

具体使用方法见flutter_custom_calendar

新增一个选择mode

支持选择开始和结束,选择范围内的日期,使用方法

controller = new CalendarController(
    minYear: 2019,
    minYearMonth: 1,
    maxYear: 2021,
    maxYearMonth: 12,
    showMode: CalendarConstants.MODE_SHOW_MONTH_AND_WEEK,
    selectedDateTimeList: _selectedDate,
    selectMode: CalendarSelectedMode.mutltiStartToEndSelect)
  ..addOnCalendarSelectListener((dateModel) {
    _selectedModels.add(dateModel);
  })
  ..addOnCalendarUnSelectListener((dateModel) {
    if (_selectedModels.contains(dateModel)) {
      _selectedModels.remove(dateModel);
    }
  });

CalendarSelectedMode.mutltiStartToEndSelect这个选择模式会选择开始和结束中间的 默认选择的。

安装和使用

Use this package as a library

  1. Depend on it Add this to your package's pubspec.yaml file:
dependencies:
  flutter_custom_calendar: ^1.0.4+0.5
  1. Install it You can install packages from the command line:

with Flutter:

$ flutter pub get

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

  1. Import it Now in your Dart code, you can use:
import 'package:flutter_custom_calendar/flutter_custom_calendar.dart';

监听月视图和周视图状态

  controller.addExpandChangeListener((value) {
    /// 添加改变 月视图和 周视图的监听
    _isMonthSelected = value;
    setState(() {});
  });
});

变更月视图和周视图

前提条件是showModelCalendarConstants.MODE_SHOW_MONTH_AND_WEEK或者CalendarConstants.MODE_SHOW_WEEK_AND_MONTH.

变更到周视图

 setState(() {
 controller.weekAndMonthViewChange(CalendarConstants.MODE_SHOW_ONLY_WEEK);
                  });

变更到月视图

setState(() {controller.weekAndMonthViewChange(CalendarConstants.MODE_SHOW_ONLY_MONTH);
                  });

动画演示

flutter_custom_calendar's People

Contributors

312569496 avatar alexv525 avatar hqwlkj avatar ifgyong avatar lxd312569496 avatar msidolphin avatar nicholasjela avatar zmtzawqlp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_custom_calendar's Issues

itemSize的设计模式貌似并不合理

itemSize是按比例放大缩小item宽高的,但如果想要item不那么高,宽度铺满屏幕,则无法完成需求,最好是自定义的item宽高,分开出来写,期待您的回复

新增选择时间段

选择时间段的时候可以做个背景颜色吗,就是开始日期和结束日期,中间的时间都用背景颜色选中,头尾都是圆角中间一条连下去那种效果

默认打开应该选择当前天

这个是个bug,学习到了,以前用原生实现过业务上的日历,也是借鉴别人,真心日历这块很复杂,做好不容易.
希望坚持这个库

调用changeExtraData方法时快速切换月份会严重卡顿

设备:魅族16s pro
能否只刷新当前月份的视图呢?

WidgetsBinding.instance.addPostFrameCallback((callback) {
      Provider.of<CalendarProvider>(context, listen: false)
          .generation
          .addListener(() async {
        extraDataMap = widget.configuration.extraDataMap;
        if (widget.configuration.nowMonth == widget.month
            && widget.configuration.nowYear == widget.year) {
          await getItems();
        }
      });
 });

bug太多

bug太多,特别是选择日期上

ObserverList 不销毁没问题吗

ObserverList monthChangeListeners =
ObserverList(); //保存多个月份监听的事件
这个不销毁没问题吗

还有一个问题,我用showModalBottomSheet弹出视图,再当前页,关闭后,点击按钮,仍然在当前页弹出,然后界面报错。weeklist为空,找半天找到你在-widget/calendarV_vew里面dispose关闭时调用了widget.calendarController.clearData();这个方法,现在给你注销了这一行,自己在使用你这个控件的地方自己调用controller.clearData(); 真是坑,找半天。这个方法还是独立出来好。

environment 导致的兼容问题

environment:
sdk: ">=2.1.0 <3.0.0"

Because every version of flutter_custom_calendar from git depends on provider 3.0.0+1 and education_flutter depends on provider ^3.1.0+1, flutter_custom_calendar from git is forbidden.

customExtraData

customExtraData 切换月份的时候,怎么更新自定义的额外数据

UI线程的问题,不知道能否优化下

切换月份的时候,查看Performance overlay,平均每帧渲染的时间过长,各种飘红,试着改了下,效果不明显。对flutter的优化还不太够啊,我再翻翻资料看能不能优化下

自定义绘制item 时大小控制

typedef void DrawDayWidget(DateModel dateModel, Canvas canvas, Size size);

自定义绘制时 宽度高度 在哪定义的 size 在哪设置的

有个问提 编译打包的时候 报错 昨天更新才出现的

Error: The getter 'generation' isn't defined for the class 'CalendarProvider'.

  • 'CalendarProvider' is from 'package:flutter_custom_calendar/calendar_provider.dart' ('/D:/flutter/flutter/.pub-cache/git/flutter_custom_calendar-dafc20dd39811fa64b91bc3fe6a3554b2b43f655/lib/calendar_provider.dart').

这个错怎么处理

你好,请问支持点击中断吗

目前有签到需求,需要实现已签到日期点击时不可取消,但是我无法在监听器中进行拦截,请问有更好的办法吗?我考虑过设置最大选中和最小选中,可是它同样和补签需求出现了冲突

controller.moveToCalendar(year, month, day)里day不生效

当前源码长这样 day完全没生效,所以无法在外部指定时间联动controller
//跳转到指定日期
void moveToCalendar(int year, int month, int day,
...
if (calendarProvider.expandStatus.value == true) {
DateModel dateModel = DateModel.fromDateTime(DateTime(year, month, 1));
...
} else {
DateModel dateModel = DateModel.fromDateTime(DateTime(year, month, 1));
...

加入缓存的代码有问题

month_view.dart代码中,原逻辑为:
//获取到对应的月份数据,赋值给变量items
getItems();
//紧接着将变量items写入缓存
CacheData.getInstance().monthListCache[firstDayOfMonth] = items;

问题:getItems()是个异步操作,执行getItems()后,执行写入缓存时,此时items还没被赋值数据。
应该为:
//future返回后写入缓存
getItems().then((_){
CacheData.getInstance().monthListCache[firstDayOfMonth] = items;
});

在drawer中加载失效

把CalendarViewWidget 放在Drawer中,
第一次打开Drawer,有日历。
关闭Drawer.再打开,日历消失
image

如何自动选中日历上日期

我在日历下面加了个PageView,当滑动到指定日期,我想让日历自动显示这个日期已经被选中。我试了

calendarController.calendarConfiguration.selectDateModel = dateModel;
calendarController.calendarProvider.selectDateModel = dateModel;
calendarController.calendarConfiguration.calendarSelect(dateModel);

好像都不行。

controller.moveToCalendar无效

看了一下,貌似原因在于你的monthList里的DateModel的day都是1,而输入的day不为1时targetPage就为-1,函数直接return了,所以其实你的controller只能实现跳到某一月,不能跳到指定的某一天。
这个问题我也在想解决方案,貌似只能在calendar的父widget里加一个“当前选中日期”的state,点击某个按钮时改变这个state再重新build日历视图,不知道你有更好的解决方案没。

怎么让日历默认显示周视图?

有几个问题请教下!
1.怎么让日历默认显示周视图?就是应用刚打开的时候只显示一行日期,随后用toggleExpandStatus()进行切换?
`

CalendarController controller;
@OverRide
void initState() {
controller = new CalendarController( showMode: Constants.MODE_SHOW_WEEK_AND_MONTH,);
}`

2.再次请教一个基本用法,如下改变事件该怎么监听?能否给一个具体点的代码?
`

void addExpandChangeListener(ValueChanged expandChange) 监听日历的展开收缩状态

`

单选模式下 多点触控问题

大佬 单选模式下 多点触控 不同的手指同时间按下日历 gridview.build 会出现绘制错乱,并绘制成多点选择

计算问题

date_util.dart类中的函数isCurrentDay(是否是今天),计算错误。getMonthViewLineCount(月的行数)计算错误

isCurrentDay有两天

打印dateModel中的isCurrentDay,今天是2019年8月1日,结果发现8月1日跟8月2日 isCurrentDay都是true

image

image

多选日期设置selectedDateTimeList会报错

控制器初始化代码:

_controller = CalendarController(
      selectMode: CalendarConstants.MODE_MULTI_SELECT,
      minSelectYear: minSelectDate.year,
      minSelectMonth: minSelectDate.month,
      minSelectDay: minSelectDate.day,
      maxSelectYear: maxSelectDate.year,
      maxSelectMonth: maxSelectDate.month,
      maxSelectDay: maxSelectDate.day,
      selectedDateTimeList: selectedDates,
    );

widget.selectedDates为空Set的时候正常,一旦有值,就直接报错。下面是错误信息:

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following NoSuchMethodError was thrown building NotificationListener<DraggableScrollableNotification>:
The method 'addAll' was called on null.
Receiver: null
Tried calling: addAll(Instance of '_CompactLinkedHashSet<DateModel>')

User-created ancestor of the error-causing widget was: 
  MaterialApp file:///Users/feng/Work/sobenapp/lib/main.dart:147:12
When the exception was thrown, this was the stack: 
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1      new CalendarController (package:flutter_custom_calendar/controller.dart:80:12)
#2      _MultiSelectDateWidgetState.initState (package:sobenapp/widget/repayment/rment_date_picker.dart:86:18)
#3      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4068:58)
#4      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3919:5)
...

根据错误日志提示,我找到了报错的地方:

if (selectedDateTimeList != null && selectedDateTimeList.isNotEmpty) {
    calendarConfiguration.defaultSelectedDateList
        .addAll(selectedDateTimeList.map((dateTime) {
    return DateModel.fromDateTime(dateTime);
    }).toSet());
}

我在初始化CalendarController的时候不传selectedDateTimeList,然后打印_controller.calendarConfiguration.defaultSelectedDateList,发现是null

但是查看源码,默认是有初始化的,也没有发现有其他地方重新赋值。

Set<DateModel> defaultSelectedDateList = new Set(); //默认被选中的日期

大佬帮忙看看是怎么回事,谢谢。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.