Files
sfm_app_final/lib/feature/map/map_bloc.dart
2024-12-27 10:59:47 +07:00

81 lines
2.8 KiB
Dart

// ignore_for_file: use_build_context_synchronously
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import '../../product/services/map_services.dart';
import '../../product/shared/shared_snack_bar.dart';
import '../devices/device_model.dart';
import '../../product/base/bloc/base_bloc.dart';
import '../../product/services/api_services.dart';
class MapBloc extends BlocBase {
APIServices apiServices = APIServices();
MapServices mapServices = MapServices();
@override
void dispose() {}
final mapTheme = StreamController<String>.broadcast();
StreamSink<String> get sinkMapTheme => mapTheme.sink;
Stream<String> get streamMapTheme => mapTheme.stream;
final mapType = StreamController<MapType>.broadcast();
StreamSink<MapType> get sinkMapType => mapType.sink;
Stream<MapType> get streamMapType => mapType.stream;
final mapController = StreamController<GoogleMapController>.broadcast();
StreamSink<GoogleMapController> get sinkmapController => mapController.sink;
Stream<GoogleMapController> get streammapController => mapController.stream;
final allDevices = StreamController<List<Device>>.broadcast();
StreamSink<List<Device>> get sinkAllDevices => allDevices.sink;
Stream<List<Device>> get streamAllDevices => allDevices.stream;
final allMarker = StreamController<Set<Marker>>.broadcast();
StreamSink<Set<Marker>> get sinkAllMarker => allMarker.sink;
Stream<Set<Marker>> get streamAllMarker => allMarker.stream;
final polylines = StreamController<List<LatLng>>.broadcast();
StreamSink<List<LatLng>> get sinkPolylines => polylines.sink;
Stream<List<LatLng>> get streamPolylines => polylines.stream;
Future<void> updateCameraPosition(
Completer<GoogleMapController> controller,
double latitude,
double longitude,
double zoom,
) async {
final CameraPosition cameraPosition =
CameraPosition(target: LatLng(latitude, longitude), zoom: zoom);
final GoogleMapController mapController = await controller.future;
mapController.animateCamera(CameraUpdate.newCameraPosition(cameraPosition));
}
Future<void> findTheWay(
BuildContext context,
Completer<GoogleMapController> controller,
LatLng origin,
LatLng destination,
) async {
List<LatLng> polylines = [];
final polylineCoordinates =
await mapServices.findTheWay(origin, destination);
if (polylineCoordinates.isNotEmpty) {
polylines = polylineCoordinates;
sinkPolylines.add(polylines);
await updateCameraPosition(
controller,
destination.latitude,
destination.longitude,
13.0,
);
} else {
showNoIconTopSnackBar(
context, "Không tìm thấy đường", Colors.orange, Colors.white);
}
}
}