import 'dart:async'; import 'package:diplomaticquarterapp/core/model/prescriptions/prescription_report.dart'; import 'package:diplomaticquarterapp/core/model/prescriptions/prescription_report_enh.dart'; import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/customer_addresses_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/medical/PrescriptionDeliveryViewModel.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/HomeHealthCare/NewHomeHealthCare/location_page.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/select_location_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:provider/provider.dart'; import 'package:diplomaticquarterapp/core/model/prescriptions/Prescriptions.dart'; import 'PrescriptionOrderOverveiw.dart'; class PrescriptionDeliveryAddressPage extends StatefulWidget { final Prescriptions prescriptions; final List prescriptionReportList; final List prescriptionReportEnhList; const PrescriptionDeliveryAddressPage({Key key, this.prescriptions, this.prescriptionReportList, this.prescriptionReportEnhList}) : super(key: key); @override _PrescriptionDeliveryAddressPageState createState() => _PrescriptionDeliveryAddressPageState(); } class _PrescriptionDeliveryAddressPageState extends State { AddressInfo _selectedAddress; Completer _controller = Completer(); CameraPosition _kGooglePlex = CameraPosition( target: LatLng(24.665011045779107, 46.73502189439707), zoom: 14.4746, ); Set markers = new Set(); double latitude = 0; double longitude = 0; @override void initState(){ super.initState(); _getCurrentLocation(); } _getCurrentLocation() async { await Geolocator.getLastKnownPosition().then((value) { latitude = value.latitude; latitude = value.longitude; _kGooglePlex = CameraPosition( target: LatLng(latitude, longitude), zoom: 14.4746, ); }).catchError((e) { latitude = 24.665011045779107; latitude = 46.73502189439707; }); } @override Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); return BaseView( onModelReady: (model) => model.getCustomerInfo(), builder: (_, model, w) => AppScaffold( isShowAppBar: true, appBarTitle: TranslationBase.of(context).shippingAddresss, baseViewModel: model, body: Container( height: MediaQuery.of(context).size.height* 0.65, child: SingleChildScrollView( physics: BouncingScrollPhysics(), child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( height: 8, ), InkWell( onTap: () { confirmSelectLocationDialog(model.addressesList); }, child: Container( margin: EdgeInsets.only(left: 10, right: 10, top: 15), height: 50, decoration: BoxDecoration( border: Border.all(color: Colors.grey), borderRadius: BorderRadius.circular(7), color: Colors.white, shape: BoxShape.rectangle, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Padding( padding: const EdgeInsets.all(8.0), child: Container( child: Text( getAddressName(), ), margin: EdgeInsets.only(left: 10, right: 10), ), ), ), Icon( Icons.arrow_drop_down, size: 22, color: Colors.grey, ) ], ), ), ), SizedBox( height: 10, ), _selectedAddress == null ? Container( child: Image.asset( projectViewModel.isArabic ? 'assets/images/pharmacy/shipping_image_ar.png' : 'assets/images/pharmacy/shipping_image.png', height: 300, ), ) : Padding( padding: const EdgeInsets.all(8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.all(8.0), child: Container( decoration: BoxDecoration( border: Border.all(color: Colors.grey) ), height: 200, child: GoogleMap( mapType: MapType.normal, markers: markers, initialCameraPosition: _kGooglePlex, onMapCreated: (GoogleMapController controller) { _controller.complete(controller); }, ), ), ), SizedBox(height: 10,), Texts(TranslationBase.of(context).shippingAddresss), SizedBox(height: 10,), Texts('${model.user.firstName} ${model.user.lastName}'), SizedBox(height: 10,), Texts(_selectedAddress.address1), SizedBox(height: 10,), Texts(_selectedAddress.address2), SizedBox(height: 10,), Texts(_selectedAddress.city+" "+_selectedAddress.country), ], ), ) ], ), ), ), bottomSheet: Container( width: double.infinity, height: MediaQuery.of(context).size.height * 0.25, color: Colors.grey[100], child: Column( children: [ Divider(), Container( width: MediaQuery.of(context).size.width * 0.8, child: Button( label: TranslationBase.of(context).addNewAddress.toUpperCase(), onTap: () { Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => LocationPage(latitude: latitude, longitude: longitude,),), ); }, ), ), Container( width: MediaQuery.of(context).size.width * 0.8, child: Button( label: TranslationBase.of(context).continues.toUpperCase(), disabled: _selectedAddress==null, backgroundColor: _selectedAddress==null?Colors.green[300]: Colors.green[700], onTap: () { Navigator.push( context, MaterialPageRoute( builder: (BuildContext context) => PrescriptionOrderOverview(latitude: latitude, longitude: longitude, prescriptionReportEnhList: widget.prescriptionReportEnhList, prescriptionReportList:widget.prescriptionReportList, prescriptions: widget.prescriptions, selectedAddress: _selectedAddress, ), ), ); }, )) ], ), )), ); } void confirmSelectLocationDialog(List addresses,) { showDialog( context: context, child: SelectLocationDialog( addresses: addresses, selectedAddress: _selectedAddress, onValueSelected: (value) { setState(() { _selectedAddress = value; List latLongArr = value.latLong.split(','); latitude = double.parse(latLongArr[0]); longitude = double.parse(latLongArr[1]); markers = Set(); markers.add( Marker( markerId: MarkerId( _selectedAddress.latLong.hashCode.toString(), ), position: LatLng(latitude, longitude), ), ); _kGooglePlex = CameraPosition( target: LatLng(latitude, longitude), zoom: 14.4746, ); }); }, ), ); } String getAddressName() { if (_selectedAddress != null) return _selectedAddress.address1; else return TranslationBase.of(context).selectAddress; } }