Merge branch 'hhc_cmc' into 'master'
Hhc cmc See merge request Cloud_Solution/diplomatic-quarter!138merge-update-with-lab-changes
commit
2185f5ce11
@ -0,0 +1,211 @@
|
||||
import 'package:diplomaticquarterapp/config/config.dart';
|
||||
import 'package:diplomaticquarterapp/core/enum/OrderService.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_request_modle.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/HHC_get_all_services_response_model.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hHC_all_pres_orders_request_model.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_hhc_all_pres_orders_response_model.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_request_model.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/get_order_detail_by_order_iD_response_model.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/patient_er_insert_pres_order_request_model.dart';
|
||||
import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/HomeHealthCare/update_pres_oreder_request_model.dart';
|
||||
import 'package:diplomaticquarterapp/core/viewModels/AlHabibMedicalService/add_new_address_Request_Model.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
import '../base_service.dart';
|
||||
|
||||
class CustomerAddressesService extends BaseService {
|
||||
|
||||
List<AddressInfo> addressesList = List();
|
||||
CustomerInfo customerInfo;
|
||||
|
||||
Future addAddressInfo({ AddNewAddressRequestModel
|
||||
addNewAddressRequestModel }) async {
|
||||
|
||||
addNewAddressRequestModel.customer.email = customerInfo.email;
|
||||
addNewAddressRequestModel.customer.id = customerInfo.customerId;
|
||||
addNewAddressRequestModel.customer.roleIds = [3];
|
||||
addNewAddressRequestModel.customer.addresses[0].email = customerInfo.email;
|
||||
addNewAddressRequestModel.customer.addresses[0].phoneNumber = customerInfo.mobileNumber;
|
||||
addNewAddressRequestModel.customer.addresses[0].firstName = user.firstName;
|
||||
addNewAddressRequestModel.customer.addresses[0].lastName = user.lastName;
|
||||
addNewAddressRequestModel.customer.addresses[0].countryId = 69;
|
||||
|
||||
var f = DateFormat('E, d MMM yyyy HH:mm:ss');
|
||||
var date = f.format(DateTime.now().toUtc()) + " GMT";
|
||||
addNewAddressRequestModel.customer.addresses[0].createdOnUtc = date;
|
||||
hasError = false;
|
||||
await baseAppClient.post(ADD_ADDRESS_INFO,
|
||||
onSuccess: (dynamic response, int statusCode) {
|
||||
addressesList.clear();
|
||||
response["customers"][0]["addresses"].forEach((data) {
|
||||
addressesList
|
||||
.add(AddressInfo.fromJson(data));
|
||||
});
|
||||
}, onFailure: (String error, int statusCode) {
|
||||
hasError = true;
|
||||
super.error = error;
|
||||
}, body: addNewAddressRequestModel.toJson(), isExternal: true, isAllowAny: true);
|
||||
}
|
||||
|
||||
Future getCustomerAddresses() async {
|
||||
Map<String, String> queryParams = {
|
||||
'fields':'addresses'
|
||||
};
|
||||
hasError = false;
|
||||
await baseAppClient.get("$GET_CUSTOMER_ADDRESSES${customerInfo.customerId}",
|
||||
onSuccess: (dynamic response, int statusCode) {
|
||||
addressesList.clear();
|
||||
response["customers"][0]["addresses"].forEach((data) {
|
||||
addressesList
|
||||
.add(AddressInfo.fromJson(data));
|
||||
});
|
||||
}, onFailure: (String error, int statusCode) {
|
||||
hasError = true;
|
||||
super.error = error;
|
||||
}, queryParams: queryParams, isExternal: true);
|
||||
}
|
||||
|
||||
|
||||
Future getCustomerInfo() async {
|
||||
Map<String, String> queryParams = {
|
||||
'FileNumber':'${user.patientID}'
|
||||
};
|
||||
|
||||
hasError = false;
|
||||
await baseAppClient.get(GET_CUSTOMER_INFO,
|
||||
onSuccess: (dynamic response, int statusCode) {
|
||||
customerInfo= CustomerInfo.fromJson(response);
|
||||
}, onFailure: (String error, int statusCode) {
|
||||
hasError = true;
|
||||
super.error = error;
|
||||
}, queryParams: queryParams, isExternal: true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class CustomerInfo {
|
||||
bool isRegistered;
|
||||
String userName;
|
||||
Null password;
|
||||
String email;
|
||||
Null errorMessage;
|
||||
String mobileNumber;
|
||||
int customerId;
|
||||
|
||||
CustomerInfo(
|
||||
{this.isRegistered,
|
||||
this.userName,
|
||||
this.password,
|
||||
this.email,
|
||||
this.errorMessage,
|
||||
this.mobileNumber,
|
||||
this.customerId});
|
||||
|
||||
CustomerInfo.fromJson(Map<String, dynamic> json) {
|
||||
isRegistered = json['IsRegistered'];
|
||||
userName = json['UserName'];
|
||||
password = json['Password'];
|
||||
email = json['Email'];
|
||||
errorMessage = json['ErrorMessage'];
|
||||
mobileNumber = json['MobileNumber'];
|
||||
customerId = json['CustomerId'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['IsRegistered'] = this.isRegistered;
|
||||
data['UserName'] = this.userName;
|
||||
data['Password'] = this.password;
|
||||
data['Email'] = this.email;
|
||||
data['ErrorMessage'] = this.errorMessage;
|
||||
data['MobileNumber'] = this.mobileNumber;
|
||||
data['CustomerId'] = this.customerId;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class AddressInfo {
|
||||
String id;
|
||||
String firstName;
|
||||
String lastName;
|
||||
String email;
|
||||
Null company;
|
||||
int countryId;
|
||||
String country;
|
||||
Null stateProvinceId;
|
||||
String city;
|
||||
String address1;
|
||||
String address2;
|
||||
String zipPostalCode;
|
||||
String phoneNumber;
|
||||
Null faxNumber;
|
||||
String customerAttributes;
|
||||
String createdOnUtc;
|
||||
Null province;
|
||||
String latLong;
|
||||
|
||||
AddressInfo(
|
||||
{this.id,
|
||||
this.firstName,
|
||||
this.lastName,
|
||||
this.email,
|
||||
this.company,
|
||||
this.countryId,
|
||||
this.country,
|
||||
this.stateProvinceId,
|
||||
this.city,
|
||||
this.address1,
|
||||
this.address2,
|
||||
this.zipPostalCode,
|
||||
this.phoneNumber,
|
||||
this.faxNumber,
|
||||
this.customerAttributes,
|
||||
this.createdOnUtc,
|
||||
this.province,
|
||||
this.latLong});
|
||||
|
||||
AddressInfo.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
firstName = json['first_name'];
|
||||
lastName = json['last_name'];
|
||||
email = json['email'];
|
||||
company = json['company'];
|
||||
countryId = json['country_id'];
|
||||
country = json['country'];
|
||||
stateProvinceId = json['state_province_id'];
|
||||
city = json['city'];
|
||||
address1 = json['address1'];
|
||||
address2 = json['address2'];
|
||||
zipPostalCode = json['zip_postal_code'];
|
||||
phoneNumber = json['phone_number'];
|
||||
faxNumber = json['fax_number'];
|
||||
customerAttributes = json['customer_attributes'];
|
||||
createdOnUtc = json['created_on_utc'];
|
||||
province = json['province'];
|
||||
latLong = json['lat_long'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['id'] = this.id;
|
||||
data['first_name'] = this.firstName;
|
||||
data['last_name'] = this.lastName;
|
||||
data['email'] = this.email;
|
||||
data['company'] = this.company;
|
||||
data['country_id'] = this.countryId;
|
||||
data['country'] = this.country;
|
||||
data['state_province_id'] = this.stateProvinceId;
|
||||
data['city'] = this.city;
|
||||
data['address1'] = this.address1;
|
||||
data['address2'] = this.address2;
|
||||
data['zip_postal_code'] = this.zipPostalCode;
|
||||
data['phone_number'] = this.phoneNumber;
|
||||
data['fax_number'] = this.faxNumber;
|
||||
data['customer_attributes'] = this.customerAttributes;
|
||||
data['created_on_utc'] = this.createdOnUtc;
|
||||
data['province'] = this.province;
|
||||
data['lat_long'] = this.latLong;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,136 @@
|
||||
class AddNewAddressRequestModel {
|
||||
Customer customer;
|
||||
|
||||
AddNewAddressRequestModel({this.customer});
|
||||
|
||||
AddNewAddressRequestModel.fromJson(Map<String, dynamic> json) {
|
||||
customer = json['customer'] != null
|
||||
? new Customer.fromJson(json['customer'])
|
||||
: null;
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
if (this.customer != null) {
|
||||
data['customer'] = this.customer.toJson();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class Customer {
|
||||
List<Addresses> addresses;
|
||||
int id;
|
||||
String email;
|
||||
List<int> roleIds;
|
||||
|
||||
Customer({this.addresses, this.id, this.email, this.roleIds});
|
||||
|
||||
Customer.fromJson(Map<String, dynamic> json) {
|
||||
if (json['addresses'] != null) {
|
||||
addresses = new List<Addresses>();
|
||||
json['addresses'].forEach((v) {
|
||||
addresses.add(new Addresses.fromJson(v));
|
||||
});
|
||||
}
|
||||
id = json['id'];
|
||||
email = json['email'];
|
||||
roleIds = json['role_ids'].cast<int>();
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
if (this.addresses != null) {
|
||||
data['addresses'] = this.addresses.map((v) => v.toJson()).toList();
|
||||
}
|
||||
data['id'] = this.id;
|
||||
data['email'] = this.email;
|
||||
data['role_ids'] = this.roleIds;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class Addresses {
|
||||
int id;
|
||||
String firstName;
|
||||
String lastName;
|
||||
String email;
|
||||
Null company;
|
||||
int countryId;
|
||||
String country;
|
||||
Null stateProvinceId;
|
||||
String city;
|
||||
String address1;
|
||||
String address2;
|
||||
String zipPostalCode;
|
||||
String phoneNumber;
|
||||
Null faxNumber;
|
||||
String customerAttributes;
|
||||
String createdOnUtc;
|
||||
Null province;
|
||||
String latLong;
|
||||
|
||||
Addresses(
|
||||
{this.id,
|
||||
this.firstName,
|
||||
this.lastName,
|
||||
this.email,
|
||||
this.company,
|
||||
this.countryId,
|
||||
this.country,
|
||||
this.stateProvinceId,
|
||||
this.city,
|
||||
this.address1,
|
||||
this.address2,
|
||||
this.zipPostalCode,
|
||||
this.phoneNumber,
|
||||
this.faxNumber,
|
||||
this.customerAttributes,
|
||||
this.createdOnUtc,
|
||||
this.province,
|
||||
this.latLong});
|
||||
|
||||
Addresses.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
firstName = json['first_name'];
|
||||
lastName = json['last_name'];
|
||||
email = json['email'];
|
||||
company = json['company'];
|
||||
countryId = json['country_id'];
|
||||
country = json['country'];
|
||||
stateProvinceId = json['state_province_id'];
|
||||
city = json['city'];
|
||||
address1 = json['address1'];
|
||||
address2 = json['address2'];
|
||||
zipPostalCode = json['zip_postal_code'];
|
||||
phoneNumber = json['phone_number'];
|
||||
faxNumber = json['fax_number'];
|
||||
customerAttributes = json['customer_attributes'];
|
||||
createdOnUtc = json['created_on_utc'];
|
||||
province = json['province'];
|
||||
latLong = json['lat_long'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['id'] = this.id;
|
||||
data['first_name'] = this.firstName;
|
||||
data['last_name'] = this.lastName;
|
||||
data['email'] = this.email;
|
||||
data['company'] = this.company;
|
||||
data['country_id'] = this.countryId;
|
||||
data['country'] = this.country;
|
||||
data['state_province_id'] = this.stateProvinceId;
|
||||
data['city'] = this.city;
|
||||
data['address1'] = this.address1;
|
||||
data['address2'] = this.address2;
|
||||
data['zip_postal_code'] = this.zipPostalCode;
|
||||
data['phone_number'] = this.phoneNumber;
|
||||
data['fax_number'] = this.faxNumber;
|
||||
data['customer_attributes'] = this.customerAttributes;
|
||||
data['created_on_utc'] = this.createdOnUtc;
|
||||
data['province'] = this.province;
|
||||
data['lat_long'] = this.latLong;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,147 @@
|
||||
import 'package:diplomaticquarterapp/config/config.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/cmc_view_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/uitl/app_toast.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(PickResult) 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;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
||||
latitude = widget.latitude;
|
||||
longitude = widget.longitude;
|
||||
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,
|
||||
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: Colors.grey[800],
|
||||
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: "$latitude,$longitude",
|
||||
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();
|
||||
},
|
||||
label: " Add New Address ",
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
initialPosition: LatLng(latitude, longitude),
|
||||
useCurrentLocation: false,
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
||||
@ -1,68 +0,0 @@
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hexcolor/hexcolor.dart';
|
||||
import 'cmc_page.dart';
|
||||
|
||||
class CMCIndexPage extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppScaffold(
|
||||
isShowAppBar: true,
|
||||
appBarTitle: TranslationBase.of(context).serviceInformation,
|
||||
body: SingleChildScrollView(
|
||||
padding: EdgeInsets.all(12),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Texts(
|
||||
"CMC",
|
||||
fontWeight: FontWeight.normal,
|
||||
fontSize: 25,
|
||||
color: Color(0xff60686b),
|
||||
),
|
||||
SizedBox(
|
||||
height: 12,
|
||||
),
|
||||
Texts(
|
||||
"This service is designed to help you to set drinking water goals and track the volume of water you are drinking on a daily basis. This service allows for schedule reminders and offers a basic statistical analysis of the amount of what you have consumed over the course of a day, week or month.",
|
||||
fontWeight: FontWeight.normal,
|
||||
fontSize: 17,
|
||||
),
|
||||
SizedBox(
|
||||
height: 22,
|
||||
),
|
||||
Center(
|
||||
child: Image.asset(
|
||||
'assets/images/AlHabibMedicalService/Wifi-AR.png')),
|
||||
SizedBox(
|
||||
height: 77,
|
||||
),
|
||||
],
|
||||
)),
|
||||
bottomSheet: Container(
|
||||
height: MediaQuery.of(context).size.height * 0.10,
|
||||
width: double.infinity,
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Container(
|
||||
width: MediaQuery.of(context).size.width * 0.9,
|
||||
child: SecondaryButton(
|
||||
onTap: () => Navigator.push(
|
||||
context,
|
||||
FadePage(
|
||||
page: CMCPage(),
|
||||
),
|
||||
),
|
||||
label: "CMC",
|
||||
textColor: Theme.of(context).backgroundColor),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,145 @@
|
||||
import 'package:diplomaticquarterapp/config/config.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/uitl/app_toast.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 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;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
||||
latitude = widget.latitude;
|
||||
longitude = widget.longitude;
|
||||
super.initState();
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
ProjectViewModel projectViewModel = Provider.of(context);
|
||||
return BaseView<HomeHealthCareViewModel>(
|
||||
onModelReady: (model) {},
|
||||
builder: (_, model, widget) => AppScaffold(
|
||||
isShowDecPage: false,
|
||||
isShowAppBar: true,
|
||||
baseViewModel: model,
|
||||
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: Colors.grey[800],
|
||||
textColor: Colors.white,
|
||||
onTap: () async {
|
||||
AddNewAddressRequestModel
|
||||
addNewAddressRequestModel =
|
||||
new AddNewAddressRequestModel(
|
||||
customer: Customer(addresses: [
|
||||
Addresses(
|
||||
address1:
|
||||
selectedPlace.formattedAddress,
|
||||
address2: selectedPlace
|
||||
.formattedAddress,
|
||||
customerAttributes: "",
|
||||
city: "",
|
||||
createdOnUtc: "",
|
||||
id: 0,
|
||||
latLong: "$latitude,$longitude",
|
||||
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();
|
||||
},
|
||||
label: " Add New Address ",
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
initialPosition: LatLng(latitude, longitude),
|
||||
useCurrentLocation: false,
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
||||
@ -1,69 +0,0 @@
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hexcolor/hexcolor.dart';
|
||||
|
||||
import 'home_health_care_page.dart';
|
||||
|
||||
class HomeHealthCareIndexPage extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppScaffold(
|
||||
isShowAppBar: true,
|
||||
appBarTitle: TranslationBase.of(context).serviceInformation,
|
||||
body: SingleChildScrollView(
|
||||
padding: EdgeInsets.all(12),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Texts(
|
||||
TranslationBase.of(context).homeHealthCare,
|
||||
fontWeight: FontWeight.normal,
|
||||
fontSize: 25,
|
||||
color: Color(0xff60686b),
|
||||
),
|
||||
SizedBox(
|
||||
height: 12,
|
||||
),
|
||||
Texts(
|
||||
TranslationBase.of(context).homeHealthCareText,
|
||||
fontWeight: FontWeight.normal,
|
||||
fontSize: 17,
|
||||
),
|
||||
SizedBox(
|
||||
height: 22,
|
||||
),
|
||||
Center(
|
||||
child: Image.asset(
|
||||
'assets/images/AlHabibMedicalService/Wifi-AR.png')),
|
||||
SizedBox(
|
||||
height: 77,
|
||||
),
|
||||
],
|
||||
)),
|
||||
bottomSheet: Container(
|
||||
height: MediaQuery.of(context).size.height * 0.10,
|
||||
width: double.infinity,
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Container(
|
||||
width: MediaQuery.of(context).size.width * 0.9,
|
||||
child: SecondaryButton(
|
||||
onTap: () => Navigator.push(
|
||||
context,
|
||||
FadePage(
|
||||
page: HomeHealthCarePage(),
|
||||
),
|
||||
),
|
||||
label: TranslationBase.of(context).loginRegister,
|
||||
textColor: Theme.of(context).backgroundColor),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,139 @@
|
||||
import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/customer_addresses_service.dart';
|
||||
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class SelectLocationDialog extends StatefulWidget {
|
||||
final List<AddressInfo> addresses;
|
||||
final Function(AddressInfo) onValueSelected;
|
||||
AddressInfo selectedAddress;
|
||||
|
||||
SelectLocationDialog(
|
||||
{Key key, this.addresses, this.onValueSelected, this.selectedAddress});
|
||||
|
||||
@override
|
||||
_SelectLocationDialogState createState() => _SelectLocationDialogState();
|
||||
}
|
||||
|
||||
class _SelectLocationDialogState extends State<SelectLocationDialog> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
widget.selectedAddress = widget.selectedAddress ?? widget.addresses[0];
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SimpleDialog(
|
||||
title: Texts("sdsdsd"),
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
Container(
|
||||
height: 150,
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
children: [
|
||||
Divider(),
|
||||
...List.generate(
|
||||
widget.addresses.length,
|
||||
(index) => Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(
|
||||
height: 2,
|
||||
),
|
||||
Row(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
setState(() {
|
||||
widget.selectedAddress = widget.addresses[index];
|
||||
});
|
||||
},
|
||||
child: ListTile(
|
||||
title: Text(widget.addresses[index].address1),
|
||||
leading: Radio(
|
||||
value: widget.addresses[index],
|
||||
groupValue: widget.selectedAddress,
|
||||
activeColor: Colors.red[800],
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
widget.selectedAddress = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 5.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 5.0,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Container(
|
||||
child: Center(
|
||||
child: Texts(
|
||||
TranslationBase.of(context).cancel.toUpperCase(),
|
||||
color: Colors.red,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
width: 1,
|
||||
height: 30,
|
||||
color: Colors.grey[500],
|
||||
),
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
widget.onValueSelected(widget.selectedAddress);
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Center(
|
||||
child: Texts(
|
||||
TranslationBase.of(context).ok,
|
||||
fontWeight: FontWeight.w400,
|
||||
)),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue