aves/lib/widgets/common/map/controller.dart
Thibault Deckers e0f45f03c1 #2 info: edit location;
fixes for map center computation, DB & filter chip update on metadata changes, offscreen marker generation
2022-01-26 17:47:23 +09:00

40 lines
1.2 KiB
Dart

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<dynamic> get _events => _streamController.stream;
Stream<MapControllerMoveEvent> get moveCommands => _events.where((event) => event is MapControllerMoveEvent).cast<MapControllerMoveEvent>();
Stream<MapIdleUpdate> get idleUpdates => _events.where((event) => event is MapIdleUpdate).cast<MapIdleUpdate>();
Stream<MapMarkerLocationChangeEvent> get markerLocationChanges => _events.where((event) => event is MapMarkerLocationChangeEvent).cast<MapMarkerLocationChangeEvent>();
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 {}