week_page.dart 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. // import 'package:flutter/material.dart';
  2. // import 'package:shared/utils/log_utils.dart';
  3. // import 'calendar_utils.dart' show get2Weekdays, addDay, subtractDay, firstDayOfWeek;
  4. // import 'day_table_view.dart';
  5. //
  6. // enum PageState {
  7. // previous,
  8. // current,
  9. // next,
  10. // }
  11. //
  12. // /// 一周的Days的PageView页面
  13. // class WeekPage extends StatefulWidget {
  14. // const WeekPage({
  15. // super.key,
  16. // required this.selectedDate,
  17. // required this.now,
  18. // required this.isAutoSelect,
  19. // this.onChangedSelectedDate,
  20. // this.onChangedPage,
  21. // });
  22. //
  23. // final DateTime now;
  24. // final DateTime selectedDate;
  25. // final bool isAutoSelect;
  26. //
  27. // final Function(DateTime)? onChangedSelectedDate; //选择日期变化的监听
  28. // final Function(DateTime date, PageState state)? onChangedPage; //切换日期Page的监听
  29. //
  30. // final double height = 40 + 40 + 10;
  31. //
  32. // @override
  33. // State<StatefulWidget> createState() => _WeekPageState();
  34. // }
  35. //
  36. // class _WeekPageState extends State<WeekPage> {
  37. // double get height => widget.height;
  38. // final int initialPage = 999;
  39. // List<int> pageCounts = [0, 1, 2];
  40. // int currentPage = 1;
  41. // late DateTime _currentPageDate;
  42. // late DateTime _slectedDate;
  43. //
  44. // DateTime get now => widget.now;
  45. //
  46. // DateTime get selectedDate => widget.selectedDate;
  47. //
  48. // late PageController _pageController;
  49. //
  50. // @override
  51. // void initState() {
  52. // super.initState();
  53. // _currentPageDate = selectedDate;
  54. // _slectedDate = selectedDate;
  55. // _pageController = PageController(initialPage: initialPage);
  56. // }
  57. //
  58. // @override
  59. // void didUpdateWidget(covariant WeekPage oldWidget) {
  60. // super.didUpdateWidget(oldWidget);
  61. //
  62. // if (widget.selectedDate != oldWidget.selectedDate) {
  63. // setState(() {
  64. // _currentPageDate = widget.selectedDate;
  65. // _slectedDate = widget.selectedDate;
  66. // });
  67. //
  68. // // 计算要滚动到的页面索引
  69. // int targetPageIndex = _calculateTargetPageIndex(widget.selectedDate);
  70. //
  71. // // 使用 WidgetsBinding 以确保在构建完成后再跳转页面
  72. // WidgetsBinding.instance.addPostFrameCallback((_) {
  73. // // 检查目标页面索引是否在有效范围内
  74. // Log.d("targetPageIndex:$targetPageIndex pageCounts.length:${pageCounts.length}");
  75. // if (targetPageIndex >= 0 && targetPageIndex < pageCounts.length) {
  76. // _pageController.jumpToPage(targetPageIndex);
  77. // } else {
  78. // //超过了索引就刷新数据源?
  79. // Log.d("超过了索引就刷新数据源");
  80. // }
  81. // });
  82. // }
  83. // }
  84. //
  85. // // 计算要滚动到的页面索引
  86. // int _calculateTargetPageIndex(DateTime date) {
  87. // // 获取当前周的第一天
  88. // DateTime currentFirstDayOfWeek = firstDayOfWeek(now);
  89. // // 获取选中日期的周的第一天
  90. // DateTime targetFirstDayOfWeek = firstDayOfWeek(date);
  91. //
  92. // // 计算当前日期与目标日期之间的天数差
  93. // int differenceInDays = targetFirstDayOfWeek.difference(currentFirstDayOfWeek).inDays + 1;
  94. //
  95. // // 计算目标页面索引
  96. // // 每页14天
  97. // int targetPageIndex = (differenceInDays / 14).floor(); // 用floor确保向下取整
  98. //
  99. // // 确保目标索引在有效范围内
  100. // // targetPageIndex = (targetPageIndex + pageCounts.length) % pageCounts.length;
  101. //
  102. // Log.d("differenceInDays:$differenceInDays targetPageIndex:$targetPageIndex");
  103. //
  104. // return targetPageIndex;
  105. // }
  106. //
  107. // @override
  108. // Widget build(BuildContext context) {
  109. // return Flexible(
  110. // child: AnimatedSize(
  111. // duration: const Duration(milliseconds: 250),
  112. // curve: Curves.easeInOut,
  113. // alignment: Alignment.topCenter,
  114. // child: SizedBox(
  115. // height: height,
  116. // child: pageViewBuilder(),
  117. // ),
  118. // ),
  119. // );
  120. // }
  121. //
  122. // //PageView的方式展示不同的星期,每周每一个Page
  123. // Widget pageViewBuilder() {
  124. // return PageView.builder(
  125. // itemBuilder: (context, index) {
  126. // final idx = _getIndex(index);
  127. // return dayTable(idx);
  128. // },
  129. // onPageChanged: onPageChanged,
  130. // controller: _pageController,
  131. // );
  132. // }
  133. //
  134. // //两周的数据
  135. // Widget dayTable(int index) {
  136. // int at = pageCounts[index] - 1;
  137. // final weekdays = get2Weekdays(now, at);
  138. // return DayTableView(
  139. // weekdays: weekdays,
  140. // onSelect: (date) {
  141. // setState(() {
  142. // _slectedDate = date;
  143. // });
  144. // //主动点击之后回调
  145. // widget.onChangedSelectedDate?.call(date);
  146. // },
  147. // selectedDate: _slectedDate,
  148. // currentDate: now,
  149. // );
  150. // }
  151. //
  152. // //是否需要切换页面的时候自动选中
  153. // void changeSelectedDate(int value) {
  154. // if (_pageState(value) == PageState.next) {
  155. // if (widget.isAutoSelect) {
  156. // _slectedDate = addDay(selectedDate, 14);
  157. // widget.onChangedSelectedDate?.call(_slectedDate);
  158. // }
  159. // } else {
  160. // if (widget.isAutoSelect) {
  161. // _slectedDate = subtractDay(selectedDate, 14);
  162. // widget.onChangedSelectedDate?.call(_slectedDate);
  163. // }
  164. // }
  165. // }
  166. //
  167. // //当切换页面的时候更新当前页面数据,返回当前页面第一条数据的日期
  168. // void updateCurrentPageDate(int value) {
  169. // final first = firstDayOfWeek(_currentPageDate);
  170. //
  171. // if (_pageState(value) == PageState.next) {
  172. // _currentPageDate = addDay(first, 14);
  173. // widget.onChangedPage?.call(_currentPageDate, PageState.next);
  174. // } else {
  175. // _currentPageDate = subtractDay(first, 14);
  176. // widget.onChangedPage?.call(_currentPageDate, PageState.previous);
  177. // }
  178. // }
  179. //
  180. // void onPageChanged(int value) {
  181. // changeSelectedDate(value);
  182. // updateCurrentPageDate(value);
  183. //
  184. // int currentIndex = _getIndex(value);
  185. // int leftIndex = (currentIndex - 1 < 0) ? pageCounts.length - 1 : currentIndex - 1;
  186. // int rightIndex = (currentIndex + 1 > pageCounts.length - 1) ? 0 : currentIndex + 1;
  187. //
  188. // pageCounts[leftIndex] = pageCounts[currentIndex] - 1;
  189. // pageCounts[rightIndex] = pageCounts[currentIndex] + 1;
  190. //
  191. // currentPage = pageCounts[currentIndex];
  192. // }
  193. //
  194. // int _getIndex(int idx) {
  195. // return (idx + 1) % pageCounts.length;
  196. // }
  197. //
  198. // PageState _pageState(int idx) {
  199. // final prePage = currentPage;
  200. // final current = pageCounts[_getIndex(idx)];
  201. // return (prePage < current) ? PageState.next : PageState.previous;
  202. // }
  203. // }