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.
flutter_custom_calendar/lib/widget/calendar_view.dart

142 lines
6.1 KiB

6 years ago
import 'package:flutter/material.dart';
import 'package:flutter_custom_calendar/constants/constants.dart';
import 'package:flutter_custom_calendar/controller.dart';
6 years ago
import 'package:flutter_custom_calendar/model/date_model.dart';
import 'package:flutter_custom_calendar/widget/month_view_pager.dart';
import 'package:flutter_custom_calendar/widget/week_view_pager.dart';
6 years ago
/**
*
*/
class CalendarViewWidget extends StatefulWidget {
//整体的背景设置
BoxDecoration boxDecoration;
//控制器
CalendarController calendarController;
CalendarViewWidget({@required this.calendarController, this.boxDecoration});
@override
_CalendarViewWidgetState createState() => _CalendarViewWidgetState();
}
class _CalendarViewWidgetState extends State<CalendarViewWidget>
with SingleTickerProviderStateMixin {
6 years ago
double itemHeight;
double totalHeight;
bool expand = true;
AnimationController _animationController;
6 years ago
@override
void initState() {
_animationController =
AnimationController(duration: Duration(milliseconds: 200), vsync: this);
widget.calendarController.expandChanged.addListener(() {
print("_CalendarViewWidgetState:$expand");
setState(() {
expand = !expand;
});
});
}
6 years ago
@override
Widget build(BuildContext context) {
//暂时先这样写死,提前计算布局的高度,不然会出现问题:a horizontal viewport was given an unlimited amount of I/flutter ( 6759): vertical space in which to expand.
itemHeight = MediaQuery.of(context).size.width / 7;
totalHeight = itemHeight * 6 + 10 * (6 - 1);
return Container(
//外部可以自定义背景设置
decoration: widget.boxDecoration,
child: new Column(
children: <Widget>[
/**
* constsetStateview
*/
widget.calendarController.weekBarItemWidgetBuilder(),
AnimatedContainer(
duration: Duration(milliseconds: 500),
height: expand ? totalHeight : itemHeight,
child: expand
? Container(
height: totalHeight,
child: MonthViewPager(
selectMode: widget.calendarController.selectMode,
monthChange: (int year, int month) {
widget.calendarController.monthChange(year, month);
},
calendarSelect: (dateModel) {
widget.calendarController.selectDateModel = dateModel;
widget.calendarController.calendarSelect(dateModel);
},
monthList: widget.calendarController.monthList,
pageController: widget.calendarController.pageController,
selectedDateList:
widget.calendarController.selectedDateList,
selectDateModel:
widget.calendarController.selectDateModel,
dayWidgetBuilder:
widget.calendarController.dayWidgetBuilder,
minSelectDate: DateModel()
..year = widget.calendarController.minSelectYear
..month = widget.calendarController.minSelectMonth
..day = widget.calendarController.minSelectDay,
maxSelectDate: DateModel()
..year = widget.calendarController.maxSelectYear
..month = widget.calendarController.maxSelectMonth
..day = widget.calendarController.maxSelectDay,
maxMultiSelectCount:
widget.calendarController.maxMultiSelectCount,
multiSelectOutOfRange:
widget.calendarController.multiSelectOutOfRange,
multiSelectOutOfSize:
widget.calendarController.multiSelectOutOfSize,
extraDataMap: widget.calendarController.extraDataMap,
),
)
: Container(
height: itemHeight,
child: WeekViewPager(
selectMode: widget.calendarController.selectMode,
monthChange: (int year, int month) {
widget.calendarController.monthChange(year, month);
},
calendarSelect: (dateModel) {
widget.calendarController.selectDateModel = dateModel;
widget.calendarController.calendarSelect(dateModel);
},
weekList: widget.calendarController.weekList,
pageController: widget.calendarController.pageController,
selectedDateList:
widget.calendarController.selectedDateList,
selectDateModel:
widget.calendarController.selectDateModel,
dayWidgetBuilder:
widget.calendarController.dayWidgetBuilder,
minSelectDate: DateModel()
..year = widget.calendarController.minSelectYear
..month = widget.calendarController.minSelectMonth
..day = widget.calendarController.minSelectDay,
maxSelectDate: DateModel()
..year = widget.calendarController.maxSelectYear
..month = widget.calendarController.maxSelectMonth
..day = widget.calendarController.maxSelectDay,
maxMultiSelectCount:
widget.calendarController.maxMultiSelectCount,
multiSelectOutOfRange:
widget.calendarController.multiSelectOutOfRange,
multiSelectOutOfSize:
widget.calendarController.multiSelectOutOfSize,
extraDataMap: widget.calendarController.extraDataMap,
),
),
6 years ago
),
],
),
);
}
}