import 'dart:async'; import 'package:aves/widgets/common/map/zoomed_bounds.dart'; import 'package:latlong2/latlong.dart'; class AvesMapController { final StreamController _streamController = StreamController.broadcast(); Stream get _events => _streamController.stream; Stream get moveCommands => _events.where((event) => event is MapControllerMoveEvent).cast(); Stream get idleUpdates => _events.where((event) => event is MapIdleUpdate).cast(); Stream get markerLocationChanges => _events.where((event) => event is MapMarkerLocationChangeEvent).cast(); void dispose() { _streamController.close(); } void moveTo(LatLng latLng) => _streamController.add(MapControllerMoveEvent(latLng)); void notifyIdle(ZoomedBounds bounds) => _streamController.add(MapIdleUpdate(bounds)); void notifyMarkerLocationChange() => _streamController.add(MapMarkerLocationChangeEvent()); } class MapControllerMoveEvent { final LatLng latLng; MapControllerMoveEvent(this.latLng); } class MapIdleUpdate { final ZoomedBounds bounds; MapIdleUpdate(this.bounds); } class MapMarkerLocationChangeEvent {}