import 'package:flutter/foundation.dart'; import 'models.dart'; import 'service.dart'; class DestinationsProvider extends ChangeNotifier { DestinationsProvider(this.service); final DestinationService service; DestinationCapabilities? capabilities; List methods = []; bool loading = false, failed = false, _disposed = false; int _revision = 0; Future refresh() async { final revision = ++_revision; loading = true; failed = false; notifyListeners(); try { final caps = await service.capabilities(); final rows = await service.list(); if (_disposed || revision != _revision) return; capabilities = caps; methods = rows; } catch (_) { if (_disposed || revision != _revision) return; failed = true; } if (_disposed) return; loading = false; notifyListeners(); } List search(String query, DestinationType type) { final q = query.trim().toLowerCase(); final rows = methods .where( (d) => d.details.type == type && '${d.label} ${d.details.display}'.toLowerCase().contains(q), ) .toList(); rows.sort( (a, b) => (b.lastUsed ?? DateTime(1970)).compareTo( a.lastUsed ?? DateTime(1970), ), ); return rows; } void reset() { _revision++; methods = []; capabilities = null; loading = failed = false; service.clearTransient(); notifyListeners(); } @override void dispose() { _disposed = true; _revision++; super.dispose(); } }