import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:hl_lieferservice/feature/delivery/bloc/tour_bloc.dart'; import 'package:hl_lieferservice/feature/delivery/bloc/tour_event.dart'; /// Holt bei einem Tageswechsel die aktuelle Tour, sobald der Fahrer zur /// Tour-Ansicht zurückkehrt: beim Öffnen der App und beim Schließen einer /// darüberliegenden Seite. /// /// Solange eine Seite darüber liegt (Lieferung, Unterschrift, Zahlung), wird /// nicht geladen: Die neue Tour enthielte die offene Lieferung nicht mehr, und /// der Fahrer verlöre seine Eingaben, z. B. bei einer Tour über Mitternacht. class TourDayWatcher extends StatefulWidget { const TourDayWatcher({super.key, required this.child}); final Widget child; @override State createState() => _TourDayWatcherState(); } class _TourDayWatcherState extends State with WidgetsBindingObserver { @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } @override void didChangeAppLifecycleState(AppLifecycleState state) { if (state == AppLifecycleState.resumed) _checkDay(); } /// Läuft auch, wenn eine darüberliegende Seite geschlossen wird: `ModalRoute` /// meldet dann, dass diese Route wieder die oberste ist. @override void didChangeDependencies() { super.didChangeDependencies(); _checkDay(); } void _checkDay() { if (ModalRoute.of(context)?.isCurrent ?? true) { context.read().add(const RefreshTourIfDayChanged()); } } @override Widget build(BuildContext context) => widget.child; }