import 'dart:async'; import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../config/enum/ride_enum.dart'; import '../config/size_config.dart'; import '../models/users.dart'; class RideStatusProvider extends ChangeNotifier { // Singleton instance static final RideStatusProvider _instance = RideStatusProvider._internal(); bool _disposed = false; factory RideStatusProvider() { return _instance; } RideEnum _ridestatus = RideEnum.idle; RideEnum get ridestatus => _ridestatus; bool _navigateToClientScreen = false; bool get navigateToClientScreen => _navigateToClientScreen; RideStatusProvider._internal(); void updatestates(RideEnum status) { log("🟢 updatestates"); log("🟢 updatestates -- $status"); if (_disposed) return; log("Updating ride status from $_ridestatus to $status"); _ridestatus = status; log("🟢 🟢 status"); _safeNotify(); } // ✅ ADD THIS METHOD TO TRIGGER NAVIGATION void triggerNavigationToClient() { _navigateToClientScreen = true; notifyListeners(); } // ✅ ADD THIS METHOD TO RESET THE FLAG void navigationToClientCompleted() { _navigateToClientScreen = false; // No need to notify listeners here, as it's a reset } void _safeNotify() { if (!_disposed) { notifyListeners(); } } @override void dispose() { _disposed = true; _countdownTimer?.cancel(); super.dispose(); } // ************************ Counter Time int _remainingSecondsToGoNextStep = 15; Timer? _countdownTimer; bool _canChangeState = false; int get remainingSecondsToGoNextStep => _remainingSecondsToGoNextStep; bool get canChangeState => _canChangeState; void startCountdown({int fromSeconds = 15}) { _countdownTimer?.cancel(); _remainingSecondsToGoNextStep = fromSeconds; _canChangeState = false; notifyListeners(); _countdownTimer = Timer.periodic(const Duration(seconds: 1), (timer) { if (_remainingSecondsToGoNextStep > 1) { _remainingSecondsToGoNextStep--; notifyListeners(); } else { _countdownTimer?.cancel(); _remainingSecondsToGoNextStep = 0; _canChangeState = true; notifyListeners(); } }); } void cancelCountdown() { _countdownTimer?.cancel(); } // ************************ } final rideprovidersiglton = RideStatusProvider();