Commit 82e2dd1c4f68ebe3ff40dd8a75685622524485f2

Authored by weixin_45529955
1 parent 786986ea

桌位页面增加“跨天检测”日期,保证日期默认为当前自然日、

@@ -93,10 +93,14 @@ class TableManagerPage extends StatefulWidget { @@ -93,10 +93,14 @@ class TableManagerPage extends StatefulWidget {
93 } 93 }
94 } 94 }
95 95
96 -class TableManagerPageState extends State<TableManagerPage> { 96 +class TableManagerPageState extends State<TableManagerPage>
  97 + with WidgetsBindingObserver {
97 TableManagerModelOrReserve? tableManagerModel; 98 TableManagerModelOrReserve? tableManagerModel;
98 final ItemScrollController itemScrollController = ItemScrollController(); 99 final ItemScrollController itemScrollController = ItemScrollController();
99 bool isTap = false; 100 bool isTap = false;
  101 + bool _isFollowingToday = true;
  102 + late DateTime _lastObservedDay;
  103 + Timer? _dayCheckTimer;
100 // 进度监听对象 104 // 进度监听对象
101 int? min; 105 int? min;
102 int? max; 106 int? max;
@@ -200,6 +204,10 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -200,6 +204,10 @@ class TableManagerPageState extends State<TableManagerPage> {
200 dateTime = DateTime.now(); 204 dateTime = DateTime.now();
201 dateText = returnDate(dateTime); 205 dateText = returnDate(dateTime);
202 dateTimeSelect = dateTime; 206 dateTimeSelect = dateTime;
  207 + _lastObservedDay = DateTime(dateTime.year, dateTime.month, dateTime.day);
  208 +
  209 + WidgetsBinding.instance.addObserver(this);
  210 + _startDayCheckTimer();
203 211
204 personNumList = Utils.getPersonNumList(); 212 personNumList = Utils.getPersonNumList();
205 213
@@ -262,6 +270,7 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -262,6 +270,7 @@ class TableManagerPageState extends State<TableManagerPage> {
262 }; 270 };
263 await storeBaseIndoProvider.getMealSectionByDay(context, pramas, 271 await storeBaseIndoProvider.getMealSectionByDay(context, pramas,
264 showLoading: false); 272 showLoading: false);
  273 + if (!mounted) return;
265 initTimeTable(needInit: needInit); 274 initTimeTable(needInit: needInit);
266 } 275 }
267 276
@@ -431,6 +440,9 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -431,6 +440,9 @@ class TableManagerPageState extends State<TableManagerPage> {
431 //生成日期文本 440 //生成日期文本
432 createDateText1(BuildContext context, DateTime day) { 441 createDateText1(BuildContext context, DateTime day) {
433 if (Utils.isOneDay(day, dateTime)) return; //日期没变 442 if (Utils.isOneDay(day, dateTime)) return; //日期没变
  443 + final DateTime now = DateTime.now();
  444 + _isFollowingToday = Utils.isOneDay(day, now);
  445 + _lastObservedDay = DateTime(now.year, now.month, now.day);
434 dateTimeSelect = day; 446 dateTimeSelect = day;
435 447
436 dateText = returnDate(day); 448 dateText = returnDate(day);
@@ -473,6 +485,51 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -473,6 +485,51 @@ class TableManagerPageState extends State<TableManagerPage> {
473 return date; 485 return date;
474 } 486 }
475 487
  488 + void _startDayCheckTimer() {
  489 + _dayCheckTimer?.cancel();
  490 + _dayCheckTimer = Timer.periodic(const Duration(minutes: 1), (_) {
  491 + _checkDateRollover();
  492 + });
  493 + }
  494 +
  495 + void _refreshDateTexts() {
  496 + dateText = returnDate(dateTime);
  497 + selectDateStr = returnDayDateStr(dateTime);
  498 + if (currTimeIndex != null &&
  499 + (storeBaseIndoProvider.dayDateData?.length ?? 0) > 0) {
  500 + selectWeekAndLunarCalendar = returnWeekAndLunarCalendar(dateTime, context);
  501 + }
  502 + if (mounted) {
  503 + setState(() {});
  504 + }
  505 + }
  506 +
  507 + void _checkDateRollover() {
  508 + if (!mounted) return;
  509 +
  510 + final DateTime now = DateTime.now();
  511 + if (Utils.isOneDay(now, _lastObservedDay)) return;
  512 + _lastObservedDay = DateTime(now.year, now.month, now.day);
  513 +
  514 + if (_isFollowingToday) {
  515 + dateTime = now;
  516 + dateTimeSelect = dateTime;
  517 + _refreshDateTexts();
  518 + getMealSectionByDay();
  519 + } else {
  520 + // 用户手动选了其他日期时,只重算“今天/明天/后天”文案,不抢回今天。
  521 + _refreshDateTexts();
  522 + }
  523 + }
  524 +
  525 + @override
  526 + void didChangeAppLifecycleState(AppLifecycleState state) {
  527 + super.didChangeAppLifecycleState(state);
  528 + if (state == AppLifecycleState.resumed) {
  529 + _checkDateRollover();
  530 + }
  531 + }
  532 +
476 _getDoltStr(BuildContext context) { 533 _getDoltStr(BuildContext context) {
477 if ((storeBaseIndoProvider.dayDateData?.length ?? 0) > 0) { 534 if ((storeBaseIndoProvider.dayDateData?.length ?? 0) > 0) {
478 int index = storeBaseIndoProvider.dayDateData! 535 int index = storeBaseIndoProvider.dayDateData!
@@ -519,6 +576,8 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -519,6 +576,8 @@ class TableManagerPageState extends State<TableManagerPage> {
519 @override 576 @override
520 void dispose() { 577 void dispose() {
521 // TODO: implement dispose 578 // TODO: implement dispose
  579 + WidgetsBinding.instance.removeObserver(this);
  580 + _dayCheckTimer?.cancel();
522 super.dispose(); 581 super.dispose();
523 EventBus().off("refresh_tablemanager"); 582 EventBus().off("refresh_tablemanager");
524 EventBus().off("refresh_tablePhoto"); 583 EventBus().off("refresh_tablePhoto");