// 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 createState() => _WeekPageState(); // } // // class _WeekPageState extends State { // double get height => widget.height; // final int initialPage = 999; // List 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; // } // }