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.
154 lines
7.0 KiB
Dart
154 lines
7.0 KiB
Dart
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<CMCLocationPage> {
|
|
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<CMCViewModel>(
|
|
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,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|