flutter 自定义日历

在项目开发中,为了展示发布的动态,需要创建一个具备日历功能的组件。通过Flutter的自定义日历库,结合CSDN博主的文章,解决了预设组件功能限制的问题,实现了左右滑动切换月份及日期底部标记不同颜色的日历视图。
摘要由CSDN通过智能技术生成

在项目中需要实现一个日历展示我发布过的动态,效果如图,同时需要左右滑动翻页

 尝试使用组件发现可自定义的范围比较小,且无法实现需求,看到这篇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) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值