You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
HMG_Patient_App/lib/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/location_page.dart

351 lines
16 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/add_new_address_Request_Model.dart';
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/home_health_care_view_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/services/permission/permission_service.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.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/app_map/google_huawei_map.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.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 LocationPage extends StatefulWidget {
final Function(PickResult) onPick;
final double latitude;
final double longitude;
final dynamic model;
const LocationPage({Key key, this.onPick, this.latitude, this.longitude, this.model}) : super(key: key);
@override
_LocationPageState createState() => _LocationPageState();
}
class _LocationPageState extends State<LocationPage> {
double latitude = 0;
double longitude = 0;
bool showCurrentLocation = false;
AppMap appMap;
AppSharedPreferences sharedPref = AppSharedPreferences();
static CameraPosition _kGooglePlex = CameraPosition(
target: LatLng(37.42796133580664, -122.085749655962),
zoom: 14.4746,
);
LatLng currentPostion;
Completer<GoogleMapController> mapController = Completer();
Placemark selectedPlace;
@override
void initState() {
latitude = widget.latitude;
longitude = widget.longitude;
if (latitude == 0.0 && longitude == 0.0) {
showCurrentLocation = true;
}
appMap = AppMap(
_kGooglePlex.toMap(),
onCameraMove: (camera) {
_updatePosition(camera);
},
onMapCreated: () {
currentPostion = LatLng(widget.latitude, widget.longitude);
latitude = widget.latitude;
longitude = widget.longitude;
_getUserLocation();
// setMap();
setState(() {});
},
onCameraIdle: () async {
List<Placemark> placemarks = await placemarkFromCoordinates(latitude, longitude);
selectedPlace = placemarks[0];
},
);
super.initState();
}
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<HomeHealthCareViewModel>(
onModelReady: (model) {},
builder: (_, model, widget) => AppScaffold(
appBarTitle: TranslationBase.of(context).addAddress,
isShowDecPage: false,
isShowAppBar: true,
baseViewModel: model,
showNewAppBarTitle: true,
showNewAppBar: true,
body:
// 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).addNewAddress, () async {
// AddNewAddressRequestModel addNewAddressRequestModel = new AddNewAddressRequestModel(
// customer: Customer(addresses: [
// Addresses(
// address1: selectedPlace.name,
// address2: selectedPlace.street,
// customerAttributes: "",
// city: selectedPlace.locality,
// createdOnUtc: "",
// id: "0",
// faxNumber: "",
// phoneNumber: projectViewModel.user.mobileNumber,
// province: selectedPlace.locality,
// countryId: 69,
// latLong: "$latitude,$longitude",
// country: selectedPlace.country,
// zipPostalCode: selectedPlace.postalCode,
// email: projectViewModel.user.emailAddress)
// ]),
// );
// await model.addAddressInfo(addNewAddressRequestModel: addNewAddressRequestModel);
// if (model.state == ViewState.ErrorLocal) {
// Utils.showErrorToast(model.error);
// } else {
// AppToast.showSuccessToast(message: "Address Added Successfully");
// }
// Navigator.of(context).pop(addNewAddressRequestModel);
// }),
// ),
// ],
// ),
// 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) {
// return isSearchBarFocused
// ? Container()
// : FloatingCard(
// bottomPosition: 0.0,
// leftPosition: 0.0,
// rightPosition: 0.0,
// width: 500,
// borderRadius: BorderRadius.circular(0.0),
// child: state == SearchingState.Searching
// ? SizedBox(height: 43, child: Center(child: CircularProgressIndicator())).insideContainer
// : DefaultButton(TranslationBase.of(context).addNewAddress, () async {
// AddNewAddressRequestModel addNewAddressRequestModel = new AddNewAddressRequestModel(
// customer: Customer(addresses: [
// Addresses(
// address1: selectedPlace.formattedAddress,
// address2: selectedPlace.formattedAddress,
// customerAttributes: "",
// createdOnUtc: "",
// id: "0",
// faxNumber: "",
// phoneNumber: projectViewModel.user.mobileNumber,
// countryId: 69,
// latLong: "$latitude,$longitude",
// email: projectViewModel.user.emailAddress)
// // Addresses(
// // address1: selectedPlace.formattedAddress,
// // address2: selectedPlace.formattedAddress,
// // customerAttributes: "",
// // city: "",
// // createdOnUtc: "",
// // id: "0",
// // latLong: "${selectedPlace.geometry.location}",
// // 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 {
// AppToast.showSuccessToast(message: "Address Added Successfully");
// }
// Navigator.of(context).pop(addNewAddressRequestModel);
// }).insideContainer);
// },
// initialPosition: LatLng(latitude, longitude),
// useCurrentLocation: showCurrentLocation,
// ),
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,
),
),
// FloatingCard(
// bottomPosition: 0.0,
// leftPosition: 0.0,
// rightPosition: 0.0,
// width: 500,
// borderRadius: BorderRadius.circular(0.0),
// // child: state == SearchingState.Searching
// // ? SizedBox(height: 43, child: Center(child: CircularProgressIndicator())).insideContainer
// // :
// child: DefaultButton(TranslationBase.of(context).addNewAddress, () async {
// AddNewAddressRequestModel addNewAddressRequestModel = new AddNewAddressRequestModel(
// customer: Customer(addresses: [
// // Addresses(
// // address1: selectedPlace.formattedAddress,
// // address2: selectedPlace.formattedAddress,
// // customerAttributes: "",
// // createdOnUtc: "",
// // id: "0",
// // faxNumber: "",
// // phoneNumber: projectViewModel.user.mobileNumber,
// // countryId: 69,
// // latLong: "$latitude,$longitude",
// // email: projectViewModel.user.emailAddress)
//
// // Addresses(
// // address1: selectedPlace.formattedAddress,
// // address2: selectedPlace.formattedAddress,
// // customerAttributes: "",
// // city: "",
// // createdOnUtc: "",
// // id: "0",
// // latLong: "${selectedPlace.geometry.location}",
// // 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 {
// AppToast.showSuccessToast(message: "Address Added Successfully");
// }
// Navigator.of(context).pop(addNewAddressRequestModel);
// }).insideContainer),
],
),
),
),
);
}
void _getUserLocation() async {
if (await this.sharedPref.getDouble(USER_LAT) != null && await this.sharedPref.getDouble(USER_LONG) != null) {
var lat = await this.sharedPref.getDouble(USER_LAT);
var long = await this.sharedPref.getDouble(USER_LONG);
latitude = lat;
longitude = long;
currentPostion = LatLng(lat, long);
setMap();
} else {
if (await PermissionService.isLocationEnabled()) {
Geolocator.getLastKnownPosition().then((value) {
latitude = value.latitude;
longitude = value.longitude;
currentPostion = LatLng(latitude, longitude);
setMap();
});
} else {
if (Platform.isAndroid) {
Utils.showPermissionConsentDialog(context, TranslationBase.of(context).locationPermissionDialog, () {
Geolocator.getLastKnownPosition().then((value) {
latitude = value.latitude;
longitude = value.longitude;
currentPostion = LatLng(latitude, longitude);
setMap();
});
});
} else {
Geolocator.getLastKnownPosition().then((value) {
latitude = value.latitude;
longitude = value.longitude;
setMap();
});
}
}
}
}
setMap() {
setState(() {
_kGooglePlex = CameraPosition(
target: currentPostion,
zoom: 14.4746,
);
appMap.moveTo(cameraPostion: _kGooglePlex);
});
}
void _updatePosition(CameraPosition _position) {
print(_position);
latitude = _position.target.latitude;
longitude = _position.target.longitude;
}
}