// 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 mapType = StreamController.broadcast(); StreamSink get sinkmapType => mapType.sink; Stream get streammapType => mapType.stream; final mapController = StreamController.broadcast(); StreamSink get sinkmapController => mapController.sink; Stream get streammapController => mapController.stream; final allDevices = StreamController>.broadcast(); StreamSink> get sinkAllDevices => allDevices.sink; Stream> get streamAllDevices => allDevices.stream; final allMarker = StreamController>.broadcast(); StreamSink> get sinkAllMarker => allMarker.sink; Stream> get streamAllMarker => allMarker.stream; final polylines = StreamController>.broadcast(); StreamSink> get sinkPolylines => polylines.sink; Stream> get streamPolylines => polylines.stream; Future updateCameraPosition( Completer 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 findTheWay( BuildContext context, Completer controller, LatLng origin, LatLng destination, ) async { List 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); } } }