import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/ImagesInfo.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/add_new_address_Request_Model.dart'; import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/cmc_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/theme/colors.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_maps_place_picker/google_maps_place_picker.dart'; import 'package:provider/provider.dart'; class CMCLocationPage extends StatefulWidget { final Function onPick; final double latitude; final double longitude; final dynamic model; const CMCLocationPage({Key key, this.onPick, this.latitude, this.longitude, this.model}) : super(key: key); @override _CMCLocationPageState createState() => _CMCLocationPageState(); } class _CMCLocationPageState extends State { double latitude = 0; double longitude = 0; bool showCurrentLocation = false; Function onPick; @override void initState() { onPick=widget.onPick; latitude = widget.latitude; longitude = widget.longitude; if (latitude == 0.0 && longitude == 0.0) { showCurrentLocation = true; } super.initState(); } @override Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return BaseView( onModelReady: (model) {}, builder: (_, model, widget) => AppScaffold( isShowDecPage: false, isShowAppBar: true, baseViewModel: model, showNewAppBar: true, showNewAppBarTitle: true, backgroundColor: CustomColors.appBackgroudGreyColor, description: TranslationBase.of(context).infoCMC, imagesInfo: [ ImagesInfo(imageAr: 'https://hmgwebservices.com/Images/MobileApp/CMC/ar/0.png', imageEn: 'https://hmgwebservices.com/Images/MobileApp/CMC/en/0.png'), ], appBarTitle: TranslationBase.of(context).addNewAddress, body: PlacePicker( apiKey: GOOGLE_API_KEY, enableMyLocationButton: true, automaticallyImplyAppBarLeading: false, autocompleteOnTrailingWhitespace: true, selectInitialPosition: true, autocompleteLanguage: projectViewModel.currentLanguage, enableMapTypeButton: true, searchForInitialValue: false, onPlacePicked: (PickResult result) { print(result.adrAddress); }, 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: Column( children: [ SecondaryButton( color: CustomColors.accentColor, textColor: Colors.white, onTap: () async { print(selectedPlace); AddNewAddressRequestModel addNewAddressRequestModel = new AddNewAddressRequestModel( customer: Customer( addresses: [ Addresses( address1: selectedPlace.formattedAddress, address2: selectedPlace.formattedAddress, customerAttributes: "", city: "", createdOnUtc: "", id: 0, latLong: selectedPlace.geometry.location.lat.toString() + "," + selectedPlace.geometry.location.lng.toString(), email: "", ) ], ), ); selectedPlace.addressComponents.forEach((e) { if (e.types.contains("country")) { addNewAddressRequestModel.customer.addresses[0].country = e.longName; } if (e.types.contains("postal_code")) { addNewAddressRequestModel.customer.addresses[0].zipPostalCode = e.longName; } if (e.types.contains("locality")) { addNewAddressRequestModel.customer.addresses[0].city = e.longName; } }); await model.addAddressInfo(addNewAddressRequestModel: addNewAddressRequestModel); if (model.state == ViewState.ErrorLocal) { Utils.showErrorToast(model.error); } else { onPick(); AppToast.showSuccessToast(message: "Address Added Successfully"); } Navigator.of(context).pop(); }, label: TranslationBase.of(context).addNewAddress, ), ], ), ), ); }, initialPosition: LatLng(latitude, longitude), useCurrentLocation: showCurrentLocation, ), ), ); } }