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/month_view_pager.dart

93 lines
3.2 KiB

5 years ago
import 'package:flutter/material.dart';
import 'package:flutter_custom_calendar/calendar_provider.dart';
import 'package:flutter_custom_calendar/configuration.dart';
5 years ago
import 'package:flutter_custom_calendar/model/date_model.dart';
import 'package:flutter_custom_calendar/utils/date_util.dart';
import 'package:flutter_custom_calendar/widget/month_view.dart';
import 'package:provider/provider.dart';
5 years ago
class MonthViewPager extends StatefulWidget {
MonthViewPager();
5 years ago
@override
_MonthViewPagerState createState() => _MonthViewPagerState();
}
class _MonthViewPagerState extends State<MonthViewPager> {
CalendarProvider calendarProvider;
5 years ago
@override
void initState() {
calendarProvider = Provider.of<CalendarProvider>(context, listen: false);
//计算当前月视图的index
DateModel dateModel = calendarProvider.lastClickDateModel;
List<DateModel> monthList =
calendarProvider.calendarConfiguration.monthList;
int index = 0;
for (int i = 0; i < monthList.length; i++) {
DateModel firstDayOfMonth = monthList[i];
DateModel lastDayOfMonth = DateModel.fromDateTime(firstDayOfMonth
.getDateTime()
.add(Duration(
days: DateUtil.getMonthDaysCount(
firstDayOfMonth.year, firstDayOfMonth.month))));
// print("firstDayOfMonth:$firstDayOfMonth");
// print("lastDayOfMonth:$lastDayOfMonth");
if ((dateModel.isAfter(firstDayOfMonth) ||
dateModel.isSameWith(firstDayOfMonth)) &&
dateModel.isBefore(lastDayOfMonth)) {
index = i;
break;
}
}
// print("monthList:$monthList");
// print("当前月:index:$index");
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
calendarProvider.calendarConfiguration.pageController.jumpToPage(index);
});
}
@override
void dispose() {
super.dispose();
}
5 years ago
@override
Widget build(BuildContext context) {
// 获取到当前的CalendarProvider对象,设置listen为false不需要刷新
calendarProvider = Provider.of<CalendarProvider>(context, listen: false);
CalendarConfiguration configuration =
calendarProvider.calendarConfiguration;
5 years ago
return Container(
child: PageView.builder(
onPageChanged: (position) {
//月份的变化
DateModel dateModel = configuration.monthList[position];
configuration.monthChange(dateModel.year, dateModel.month);
5 years ago
},
controller: configuration.pageController,
5 years ago
itemBuilder: (context, index) {
DateModel dateModel = configuration.monthList[index];
5 years ago
return new MonthView(
year: dateModel.year,
month: dateModel.month,
minSelectDate: DateModel.fromDateTime(DateTime(
configuration.minSelectYear,
configuration.minSelectMonth,
configuration.minSelectDay)),
maxSelectDate: DateModel.fromDateTime(DateTime(
configuration.maxSelectYear,
configuration.maxSelectMonth,
configuration.maxSelectDay)),
extraDataMap: configuration.extraDataMap,
5 years ago
);
},
itemCount: configuration.monthList.length,
5 years ago
),
);
}
}