123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- // import 'package:flutter/material.dart';
- // import 'package:shared/utils/log_utils.dart';
- // import 'calendar_utils.dart' show get2Weekdays, addDay, subtractDay, firstDayOfWeek;
- // import 'day_table_view.dart';
- //
- // enum PageState {
- // previous,
- // current,
- // next,
- // }
- //
- // /// 一周的Days的PageView页面
- // class WeekPage extends StatefulWidget {
- // const WeekPage({
- // super.key,
- // required this.selectedDate,
- // required this.now,
- // required this.isAutoSelect,
- // this.onChangedSelectedDate,
- // this.onChangedPage,
- // });
- //
- // final DateTime now;
- // final DateTime selectedDate;
- // final bool isAutoSelect;
- //
- // final Function(DateTime)? onChangedSelectedDate; //选择日期变化的监听
- // final Function(DateTime date, PageState state)? onChangedPage; //切换日期Page的监听
- //
- // final double height = 40 + 40 + 10;
- //
- // @override
- // State<StatefulWidget> createState() => _WeekPageState();
- // }
- //
- // class _WeekPageState extends State<WeekPage> {
- // double get height => widget.height;
- // final int initialPage = 999;
- // List<int> pageCounts = [0, 1, 2];
- // int currentPage = 1;
- // late DateTime _currentPageDate;
- // late DateTime _slectedDate;
- //
- // DateTime get now => widget.now;
- //
- // DateTime get selectedDate => widget.selectedDate;
- //
- // late PageController _pageController;
- //
- // @override
- // void initState() {
- // super.initState();
- // _currentPageDate = selectedDate;
- // _slectedDate = selectedDate;
- // _pageController = PageController(initialPage: initialPage);
- // }
- //
- // @override
- // void didUpdateWidget(covariant WeekPage oldWidget) {
- // super.didUpdateWidget(oldWidget);
- //
- // if (widget.selectedDate != oldWidget.selectedDate) {
- // setState(() {
- // _currentPageDate = widget.selectedDate;
- // _slectedDate = widget.selectedDate;
- // });
- //
- // // 计算要滚动到的页面索引
- // int targetPageIndex = _calculateTargetPageIndex(widget.selectedDate);
- //
- // // 使用 WidgetsBinding 以确保在构建完成后再跳转页面
- // WidgetsBinding.instance.addPostFrameCallback((_) {
- // // 检查目标页面索引是否在有效范围内
- // Log.d("targetPageIndex:$targetPageIndex pageCounts.length:${pageCounts.length}");
- // if (targetPageIndex >= 0 && targetPageIndex < pageCounts.length) {
- // _pageController.jumpToPage(targetPageIndex);
- // } else {
- // //超过了索引就刷新数据源?
- // Log.d("超过了索引就刷新数据源");
- // }
- // });
- // }
- // }
- //
- // // 计算要滚动到的页面索引
- // int _calculateTargetPageIndex(DateTime date) {
- // // 获取当前周的第一天
- // DateTime currentFirstDayOfWeek = firstDayOfWeek(now);
- // // 获取选中日期的周的第一天
- // DateTime targetFirstDayOfWeek = firstDayOfWeek(date);
- //
- // // 计算当前日期与目标日期之间的天数差
- // int differenceInDays = targetFirstDayOfWeek.difference(currentFirstDayOfWeek).inDays + 1;
- //
- // // 计算目标页面索引
- // // 每页14天
- // int targetPageIndex = (differenceInDays / 14).floor(); // 用floor确保向下取整
- //
- // // 确保目标索引在有效范围内
- // // targetPageIndex = (targetPageIndex + pageCounts.length) % pageCounts.length;
- //
- // Log.d("differenceInDays:$differenceInDays targetPageIndex:$targetPageIndex");
- //
- // return targetPageIndex;
- // }
- //
- // @override
- // Widget build(BuildContext context) {
- // return Flexible(
- // child: AnimatedSize(
- // duration: const Duration(milliseconds: 250),
- // curve: Curves.easeInOut,
- // alignment: Alignment.topCenter,
- // child: SizedBox(
- // height: height,
- // child: pageViewBuilder(),
- // ),
- // ),
- // );
- // }
- //
- // //PageView的方式展示不同的星期,每周每一个Page
- // Widget pageViewBuilder() {
- // return PageView.builder(
- // itemBuilder: (context, index) {
- // final idx = _getIndex(index);
- // return dayTable(idx);
- // },
- // onPageChanged: onPageChanged,
- // controller: _pageController,
- // );
- // }
- //
- // //两周的数据
- // Widget dayTable(int index) {
- // int at = pageCounts[index] - 1;
- // final weekdays = get2Weekdays(now, at);
- // return DayTableView(
- // weekdays: weekdays,
- // onSelect: (date) {
- // setState(() {
- // _slectedDate = date;
- // });
- // //主动点击之后回调
- // widget.onChangedSelectedDate?.call(date);
- // },
- // selectedDate: _slectedDate,
- // currentDate: now,
- // );
- // }
- //
- // //是否需要切换页面的时候自动选中
- // void changeSelectedDate(int value) {
- // if (_pageState(value) == PageState.next) {
- // if (widget.isAutoSelect) {
- // _slectedDate = addDay(selectedDate, 14);
- // widget.onChangedSelectedDate?.call(_slectedDate);
- // }
- // } else {
- // if (widget.isAutoSelect) {
- // _slectedDate = subtractDay(selectedDate, 14);
- // widget.onChangedSelectedDate?.call(_slectedDate);
- // }
- // }
- // }
- //
- // //当切换页面的时候更新当前页面数据,返回当前页面第一条数据的日期
- // void updateCurrentPageDate(int value) {
- // final first = firstDayOfWeek(_currentPageDate);
- //
- // if (_pageState(value) == PageState.next) {
- // _currentPageDate = addDay(first, 14);
- // widget.onChangedPage?.call(_currentPageDate, PageState.next);
- // } else {
- // _currentPageDate = subtractDay(first, 14);
- // widget.onChangedPage?.call(_currentPageDate, PageState.previous);
- // }
- // }
- //
- // void onPageChanged(int value) {
- // changeSelectedDate(value);
- // updateCurrentPageDate(value);
- //
- // int currentIndex = _getIndex(value);
- // int leftIndex = (currentIndex - 1 < 0) ? pageCounts.length - 1 : currentIndex - 1;
- // int rightIndex = (currentIndex + 1 > pageCounts.length - 1) ? 0 : currentIndex + 1;
- //
- // pageCounts[leftIndex] = pageCounts[currentIndex] - 1;
- // pageCounts[rightIndex] = pageCounts[currentIndex] + 1;
- //
- // currentPage = pageCounts[currentIndex];
- // }
- //
- // int _getIndex(int idx) {
- // return (idx + 1) % pageCounts.length;
- // }
- //
- // PageState _pageState(int idx) {
- // final prePage = currentPage;
- // final current = pageCounts[_getIndex(idx)];
- // return (prePage < current) ? PageState.next : PageState.previous;
- // }
- // }
|