import 'package:flutter/material.dart'; import '../services/share_service.dart'; class ShareProvider with ChangeNotifier { final ShareService _shareService; String _shareId = ''; String _geoId = ''; bool _isLoading = false; String _error = ''; Map? _position; String _trackingShareId = ''; String _trackingToken = ''; Map? _trackedPosition; ShareProvider({ShareService? shareService}) : _shareService = shareService ?? ShareService(); String get shareId => _shareId; String get geoId => _geoId; bool get isLoading => _isLoading; String get error => _error; Map? get position => _position; String get trackingShareId => _trackingShareId; Map? get trackedPosition => _trackedPosition; Future createShare(String token, double x, double y) async { _isLoading = true; _error = ''; notifyListeners(); try { final result = await _shareService.createShare(token, x, y); _geoId = result['geo_id']?.toString() ?? ''; _shareId = result['share_id']?.toString() ?? ''; notifyListeners(); } catch (e) { _error = e.toString(); notifyListeners(); rethrow; } finally { _isLoading = false; notifyListeners(); } } Future getPosition(String token, String shareId) async { _isLoading = true; _error = ''; notifyListeners(); try { _position = await _shareService.getPositionByShareId(token, shareId); notifyListeners(); } catch (e) { _error = e.toString(); notifyListeners(); rethrow; } finally { _isLoading = false; notifyListeners(); } } void clearShare() { _shareId = ''; _geoId = ''; _position = null; notifyListeners(); } Future startTracking(String shareId, String token) async { _trackingShareId = shareId; _trackingToken = token; _error = ''; notifyListeners(); await updateTrackedPosition(); } Future updateTrackedPosition() async { if (_trackingShareId.isEmpty) return; try { _trackedPosition = await _shareService.getPositionByShareId(_trackingToken, _trackingShareId); notifyListeners(); } catch (e) { _error = e.toString(); notifyListeners(); } } void stopTracking() { _trackingShareId = ''; _trackingToken = ''; _trackedPosition = null; notifyListeners(); } }