You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
3.3 KiB

import 'package:flutter_custom_calendar/utils/date_util.dart';
6 years ago
import 'package:flutter_custom_calendar/utils/lunar_util.dart';
/**
*
*/
class DateModel {
int year;
int month;
int day = 1;
List<int> lunar = List(3);
6 years ago
//农历字符串
String get lunarString {
if (solarTerm.isNotEmpty) {
return solarTerm;
} else if (gregorianFestival.isNotEmpty) {
return gregorianFestival;
} else if (traditionFestival.isNotEmpty) {
return traditionFestival;
} else {
return LunarUtil.numToChinese(lunar[1], lunar[2], lunar[3]);
}
}
//24节气
String get solarTerm => LunarUtil.getSolarTerm(year, month, day);
//公历节日
String get gregorianFestival {
String result = LunarUtil.gregorianFestival(month, day);
if (result?.isNotEmpty == true) {
return result;
}
return LunarUtil.getSpecialFestival(year, month, day);
}
//传统农历节日
String get traditionFestival =>
LunarUtil.getTraditionFestival(year, month, day);
6 years ago
bool isCurrentMonth; //是否是当前月份
6 years ago
Object extraData; //自定义的额外数据
bool isInRange = false; //是否在范围内,比如可以实现在某个范围外,设置置灰的功能
bool isSelected; //是否被选中,用来实现一些标记或者选择功能
bool isCanClick =
true; //todo:是否可点击设置范围外的日历不可点击或者可以通过自定义拦截点击事件来设置true或者false
//是否是周末
bool get isWeekend => DateUtil.isWeekend(getDateTime());
//是否是闰年
bool get isLeapYear => DateUtil.isLeapYear(year);
//是否是今天
bool get isCurrentDay => DateUtil.isCurrentDay(year, month, day);
int get lunarYear => lunar[0];
int get lunarMonth => lunar[1];
int get lunarDay => lunar[2];
6 years ago
@override
String toString() {
return 'DateModel{year: $year, month: $month, day: $day}';
} //如果是闰月,则返回闰月
//转化成DateTime格式
DateTime getDateTime() {
return new DateTime(year, month, day);
}
//根据DateTime创建对应的model并初始化农历和传统节日等信息
static DateModel fromDateTime(DateTime dateTime) {
DateModel dateModel = new DateModel()
..year = dateTime.year
..month = dateTime.month
..day = dateTime.day;
List<int> lunar =
LunarUtil.solarToLunar(dateModel.year, dateModel.month, dateModel.day);
dateModel.lunar = lunar;
// 将数据的初始化放到各个get方法里面进行操作类似懒加载,不然很浪费
// LunarUtil.setupLunarCalendar(dateModel);
6 years ago
return dateModel;
}
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is DateModel &&
runtimeType == other.runtimeType &&
year == other.year &&
month == other.month &&
day == other.day;
@override
int get hashCode => year.hashCode ^ month.hashCode ^ day.hashCode;
//是否是同一天
bool isSameWith(DateModel dateModel) {
return year == dateModel.year &&
month == dateModel.month &&
day == dateModel.day;
}
//是否在某天之后
bool isAfter(DateModel dateModel) {
return this.getDateTime().isAfter(dateModel.getDateTime());
}
//是否在某天之前
bool isBefore(DateModel dateModel) {
return this.getDateTime().isBefore(dateModel.getDateTime());
}
6 years ago
}