import 'dart:io'; import 'package:google_maps_place_picker_mb_v2/google_maps_place_picker.dart'; import 'package:hmg_patient_app/config/config.dart'; import 'package:hmg_patient_app/core/viewModels/project_view_model.dart'; import 'package:hmg_patient_app/models/ambulanceRequest/locationDetails.dart'; import 'package:hmg_patient_app/theme/colors.dart'; import 'package:hmg_patient_app/uitl/app_shared_preferences.dart'; import 'package:hmg_patient_app/uitl/translations_delegate_base.dart'; import 'package:hmg_patient_app/widgets/app_map/google_huawei_map.dart'; import 'package:hmg_patient_app/widgets/buttons/defaultButton.dart'; import 'package:hmg_patient_app/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:geocoding/geocoding.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart' as googleMap; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:huawei_hmsavailability/huawei_hmsavailability.dart'; import 'package:provider/provider.dart'; class PickupLocationFromMap extends StatefulWidget { final Function(LocationDetails)? onPick; final double? latitude; final double? longitude; final bool? isWithAppBar; final String? buttonLabel; final Color? buttonColor; const PickupLocationFromMap({Key? key, this.onPick, this.latitude, this.longitude, this.isWithAppBar = true, this.buttonLabel, this.buttonColor}) : super(key: key); @override State createState() => _PickupLocationFromMapState(); } class _PickupLocationFromMapState extends State { bool isHuawei = false; late Placemark selectedPlace; late AppMap appMap; late LatLng currentPostion; AppSharedPreferences sharedPref = AppSharedPreferences(); double latitude = 0; double longitude = 0; late HmsApiAvailability hmsApiAvailability; static CameraPosition kGooglePlex = CameraPosition( target: LatLng(24.126613,45.081137), zoom: 14.4746, ); @override void initState() { if(Platform.isAndroid) { hmsApiAvailability = HmsApiAvailability(); checkIsHuawei(); } appMap = AppMap( //changed by Aamir kGooglePlex.toMap() as Map, onCameraMove: () { _updatePosition(kGooglePlex); }, onMapCreated: () { currentPostion = LatLng(widget.latitude!, widget.longitude!); latitude = widget.latitude!; longitude = widget.longitude!; setState(() {}); }, onCameraIdle: () async { List placemarks = await placemarkFromCoordinates(latitude, longitude); selectedPlace = placemarks[0]; print(selectedPlace); }, ); super.initState(); } checkIsHuawei() async { // isHuawei = await FlutterHmsGmsAvailability.isHmsAvailable; // print(isHuawei); // setState(() {}); await hmsApiAvailability.isHMSAvailable().then((value) { isHuawei = value == 0 ? true : false; }); print(isHuawei); setState(() {}); } @override Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return AppScaffold( isShowAppBar: true, showNewAppBarTitle: true, showNewAppBar: true, appBarTitle: TranslationBase.of(context).selectLocation, body: isHuawei ? Column( children: [ Expanded( child: Stack( alignment: Alignment.center, children: [ if (appMap != null) appMap, Container( margin: EdgeInsets.only(bottom: 50.0), child: Icon( Icons.place, color: CustomColors.accentColor, size: 50, ), ), ], ), ), Container( padding: const EdgeInsets.only(left: 20, right: 20, top: 14, bottom: 14), child: DefaultButton(TranslationBase.of(context).next, () async { LocationDetails locationDetails = new LocationDetails(); locationDetails.lat = latitude; locationDetails.long = longitude; locationDetails.formattedAddress = selectedPlace.street!; widget.onPick!(locationDetails); Navigator.of(context).pop(); }), ), ], ) : PlacePicker( apiKey: GOOGLE_API_KEY, enableMyLocationButton: true, automaticallyImplyAppBarLeading: false, autocompleteLanguage: projectViewModel.currentLanguage, enableMapTypeButton: true, selectInitialPosition: true, region: "SA", onPlacePicked: (PickResult result) { LocationDetails locationDetails = new LocationDetails(); locationDetails.lat = latitude; locationDetails.long = longitude; locationDetails.formattedAddress = result.formattedAddress!; print(result.adrAddress); widget.onPick!(locationDetails); Navigator.of(context).pop(); }, selectedPlaceWidgetBuilder: (_, selectedPlace, state, isSearchBarFocused) { print("state: $state, isSearchBarFocused: $isSearchBarFocused"); return isSearchBarFocused ? Container() : FloatingCard( bottomPosition: 0.0, leftPosition: 0.0, rightPosition: 0.0, width: 500, borderRadius: BorderRadius.circular(12.0), child: state == SearchingState.Searching ? Center(child: CircularProgressIndicator()) : Container( margin: EdgeInsets.all(12), child: DefaultButton( TranslationBase.of(context).next, () { LocationDetails locationDetails = new LocationDetails(); locationDetails.lat = selectedPlace!.geometry!.location.lat; locationDetails.long = selectedPlace.geometry!.location.lng; locationDetails.formattedAddress = selectedPlace.formattedAddress!; widget.onPick!(locationDetails); Navigator.of(context).pop(); }, ), ), ); }, initialPosition: googleMap.LatLng(projectViewModel.latitude, projectViewModel.longitude), useCurrentLocation: true, ), ); } void _updatePosition(CameraPosition _position) { print(_position); latitude = _position.target.latitude; longitude = _position.target.longitude; } }