Commit 82e2dd1c4f68ebe3ff40dd8a75685622524485f2

Authored by weixin_45529955
1 parent 786986ea

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

... ... @@ -93,10 +93,14 @@ class TableManagerPage extends StatefulWidget {
}
}
class TableManagerPageState extends State<TableManagerPage> {
class TableManagerPageState extends State<TableManagerPage>
with WidgetsBindingObserver {
TableManagerModelOrReserve? tableManagerModel;
final ItemScrollController itemScrollController = ItemScrollController();
bool isTap = false;
bool _isFollowingToday = true;
late DateTime _lastObservedDay;
Timer? _dayCheckTimer;
// 进度监听对象
int? min;
int? max;
... ... @@ -200,6 +204,10 @@ class TableManagerPageState extends State<TableManagerPage> {
dateTime = DateTime.now();
dateText = returnDate(dateTime);
dateTimeSelect = dateTime;
_lastObservedDay = DateTime(dateTime.year, dateTime.month, dateTime.day);
WidgetsBinding.instance.addObserver(this);
_startDayCheckTimer();
personNumList = Utils.getPersonNumList();
... ... @@ -262,6 +270,7 @@ class TableManagerPageState extends State<TableManagerPage> {
};
await storeBaseIndoProvider.getMealSectionByDay(context, pramas,
showLoading: false);
if (!mounted) return;
initTimeTable(needInit: needInit);
}
... ... @@ -431,6 +440,9 @@ class TableManagerPageState extends State<TableManagerPage> {
//生成日期文本
createDateText1(BuildContext context, DateTime day) {
if (Utils.isOneDay(day, dateTime)) return; //日期没变
final DateTime now = DateTime.now();
_isFollowingToday = Utils.isOneDay(day, now);
_lastObservedDay = DateTime(now.year, now.month, now.day);
dateTimeSelect = day;
dateText = returnDate(day);
... ... @@ -473,6 +485,51 @@ class TableManagerPageState extends State<TableManagerPage> {
return date;
}
void _startDayCheckTimer() {
_dayCheckTimer?.cancel();
_dayCheckTimer = Timer.periodic(const Duration(minutes: 1), (_) {
_checkDateRollover();
});
}
void _refreshDateTexts() {
dateText = returnDate(dateTime);
selectDateStr = returnDayDateStr(dateTime);
if (currTimeIndex != null &&
(storeBaseIndoProvider.dayDateData?.length ?? 0) > 0) {
selectWeekAndLunarCalendar = returnWeekAndLunarCalendar(dateTime, context);
}
if (mounted) {
setState(() {});
}
}
void _checkDateRollover() {
if (!mounted) return;
final DateTime now = DateTime.now();
if (Utils.isOneDay(now, _lastObservedDay)) return;
_lastObservedDay = DateTime(now.year, now.month, now.day);
if (_isFollowingToday) {
dateTime = now;
dateTimeSelect = dateTime;
_refreshDateTexts();
getMealSectionByDay();
} else {
// 用户手动选了其他日期时,只重算“今天/明天/后天”文案,不抢回今天。
_refreshDateTexts();
}
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.resumed) {
_checkDateRollover();
}
}
_getDoltStr(BuildContext context) {
if ((storeBaseIndoProvider.dayDateData?.length ?? 0) > 0) {
int index = storeBaseIndoProvider.dayDateData!
... ... @@ -519,6 +576,8 @@ class TableManagerPageState extends State<TableManagerPage> {
@override
void dispose() {
// TODO: implement dispose
WidgetsBinding.instance.removeObserver(this);
_dayCheckTimer?.cancel();
super.dispose();
EventBus().off("refresh_tablemanager");
EventBus().off("refresh_tablePhoto");
... ...