Showing
1 changed file
with
60 additions
and
1 deletions
| @@ -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"); |
-
Please register or login to post a comment