@@ -179,7 +179,14 @@ class ScheduleBloc extends Bloc<ScheduleEvent, ScheduleState> {
179179 }
180180
181181 _activeEarlyStartScheduleId = null ;
182- if (_isPreparationOnGoing (resolvedSchedule)) {
182+ if (_isAtPreparationStartBoundary (resolvedSchedule, now)) {
183+ emit (ScheduleState .upcoming (resolvedSchedule));
184+ debugPrint ('preparation boundary reached: $resolvedSchedule ' );
185+ add (const ScheduleStarted ());
186+ return ;
187+ }
188+
189+ if (_isPreparationOnGoing (resolvedSchedule, now)) {
183190 emit (ScheduleState .ongoing (resolvedSchedule));
184191 debugPrint (
185192 'ongoingSchedule: $resolvedSchedule , currentStep: ${resolvedSchedule .preparation .currentStep }' );
@@ -267,15 +274,20 @@ class ScheduleBloc extends Bloc<ScheduleEvent, ScheduleState> {
267274 _activeEarlyStartScheduleId = null ;
268275 _lastSnapshotSavedAt = null ;
269276 emit (const ScheduleState .notExists ());
270- } catch (_ ) {
271- debugPrint ('error finishing schedule: $_ ' );
277+ } catch (error ) {
278+ debugPrint ('error finishing schedule: $error ' );
272279 }
273280 }
274281
275282 void _startScheduleTimer (ScheduleWithPreparationEntity schedule) {
276283 final now = _nowProvider ();
277284 final target = schedule.preparationStartTime;
278- if (! target.isAfter (now)) return ;
285+ if (! target.isAfter (now)) {
286+ if (! isClosed && _currentScheduleId == schedule.id) {
287+ add (const ScheduleStarted ());
288+ }
289+ return ;
290+ }
279291 final duration = target.difference (now);
280292 _scheduleStartTimer = Timer (duration, () {
281293 // Only add event if bloc is still active and schedule ID matches
@@ -363,9 +375,18 @@ class ScheduleBloc extends Bloc<ScheduleEvent, ScheduleState> {
363375 await _clearEarlyStartSessionUseCase (scheduleId);
364376 }
365377
366- bool _isPreparationOnGoing (ScheduleWithPreparationEntity schedule) {
378+ bool _isAtPreparationStartBoundary (
379+ ScheduleWithPreparationEntity schedule,
380+ DateTime now,
381+ ) {
382+ return schedule.preparationStartTime.isAtSameMomentAs (now);
383+ }
384+
385+ bool _isPreparationOnGoing (
386+ ScheduleWithPreparationEntity schedule,
387+ DateTime now,
388+ ) {
367389 final start = schedule.preparationStartTime;
368- final now = _nowProvider ();
369390 return start.isBefore (now) && schedule.scheduleTime.isAfter (now);
370391 }
371392
0 commit comments