在项目中需要实现一个日历展示我发布过的动态,效果如图,同时需要左右滑动翻页
尝试使用组件发现可自定义的范围比较小,且无法实现需求,看到这篇Flutter自定义日历,实现日期底部不同颜色的日历事件_apro-wang的博客-CSDN博客_flutter自定义日历后进行了一些修改最终实现了需要的效果
//日历组件
import 'package:domain/user/model/publish_project.dart';
import 'package:flutter/material.dart';
import 'package:be_real/config/global_style.dart';
import 'package:domain/user/repository/user_repository.dart';
import 'package:data/repository_module.dart';
import 'package:be_real/view/account/components/delete_memory.dart';
import 'package:be_real/event/manager.dart';
import 'package:event_bus/event_bus.dart';
class Calender extends StatefulWidget {
const Calender({Key key}) : super(key: key);
@override
_CalenderState createState() => _CalenderState();
}
class _CalenderState extends State<Calender> {
int _year = DateTime.now().year; //当前展示年
int _month = DateTime.now().month; //当前展示月
int _day = DateTime.now().day; //当前展示日
List _datas = []; //日期数组--只展示一个月份
List _recentPublish = []; //我的当前展示月发布--某一天未发布赋值null
List<Project> _myPublishAll = []; //我的全部动态--接口获取
UserRepository _userRepository = userRepository();
@override
void initState() {
//设置默认当前月日期
_setDatas(year: _year, month: _month);
//获取我的全部动态
_getMyPublishAll();
//刷新我的全部动态
Manager.refreshMyPublishAll = EventBus();
Manager.refreshMyPublishAll.on().listen((event) async {
print('刷新我的全部动态');
_getMyPublishAll();
});
super.initState();
}
//获取我发布的所有动态--接口获取
_getMyPublishAll() async {
await _userRepository.getMyselfPublishAll().then((value) async {
await setState((){
_myPublishAll = value.isSuccess;
});
print('我的最近发布:${_myPublishAll}');
await _loadAttendanceMonthRecord();
});
}
//赋值我的当前展示月发布
_loadAttendanceMonthRecord() async {
await setState(() {
for(int i = 0; i < _datas.length; i++){ //外层循环当前展示月日期数组
for(int j = 0; j < _myPublishAll.length; j++){ //内层循环我发布的动态数组
if(_datas[i] == _myPublishAll[j].createDate){
_recentPublish[i] = _myPublishAll[j];
break;
}
}
}
});
print('本月发布:${_recentPublish}');
}
@override
Widget build(BuildContext context)