Merge branch 'development' into Haroon
# Conflicts: # lib/config/config.dartmerge-requests/352/head
commit
2242b78116
@ -0,0 +1,53 @@
|
|||||||
|
class ServicePrice {
|
||||||
|
String currency;
|
||||||
|
double maxPrice;
|
||||||
|
double maxTotalPrice;
|
||||||
|
double maxVAT;
|
||||||
|
double minPrice;
|
||||||
|
double minTotalPrice;
|
||||||
|
double minVAT;
|
||||||
|
int price;
|
||||||
|
int totalPrice;
|
||||||
|
int vat;
|
||||||
|
|
||||||
|
ServicePrice({
|
||||||
|
this.currency,
|
||||||
|
this.maxPrice,
|
||||||
|
this.maxTotalPrice,
|
||||||
|
this.maxVAT,
|
||||||
|
this.minPrice,
|
||||||
|
this.minTotalPrice,
|
||||||
|
this.minVAT,
|
||||||
|
this.price,
|
||||||
|
this.totalPrice,
|
||||||
|
this.vat});
|
||||||
|
|
||||||
|
ServicePrice.fromJson(dynamic json) {
|
||||||
|
currency = json["Currency"];
|
||||||
|
maxPrice = json["MaxPrice"];
|
||||||
|
maxTotalPrice = json["MaxTotalPrice"];
|
||||||
|
maxVAT = json["MaxVAT"];
|
||||||
|
minPrice = json["MinPrice"];
|
||||||
|
minTotalPrice = json["MinTotalPrice"];
|
||||||
|
minVAT = json["MinVAT"];
|
||||||
|
price = json["Price"];
|
||||||
|
totalPrice = json["TotalPrice"];
|
||||||
|
vat = json["VAT"];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
var map = <String, dynamic>{};
|
||||||
|
map["Currency"] = currency;
|
||||||
|
map["MaxPrice"] = maxPrice;
|
||||||
|
map["MaxTotalPrice"] = maxTotalPrice;
|
||||||
|
map["MaxVAT"] = maxVAT;
|
||||||
|
map["MinPrice"] = minPrice;
|
||||||
|
map["MinTotalPrice"] = minTotalPrice;
|
||||||
|
map["MinVAT"] = minVAT;
|
||||||
|
map["Price"] = price;
|
||||||
|
map["TotalPrice"] = totalPrice;
|
||||||
|
map["VAT"] = vat;
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
import 'package:diplomaticquarterapp/pages/conference/clipped_video.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class RRTAgreementPage extends StatelessWidget{
|
||||||
|
TranslationBase localize;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
localize = TranslationBase.of(context);
|
||||||
|
|
||||||
|
return AppScaffold(
|
||||||
|
appBarTitle: localize.userAgreement,
|
||||||
|
isShowAppBar: true,
|
||||||
|
showHomeAppBarIcon: false,
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
padding: EdgeInsets.all(20),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Text(localize.rrtUserAgreementTitle, style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500, fontSize: 22), maxLines: 100, textAlign: TextAlign.center),
|
||||||
|
SizedBox(height: 20),
|
||||||
|
text(localize.rrtUserAgreementP1),
|
||||||
|
text(localize.rrtUserAgreementP2),
|
||||||
|
text(localize.rrtUserAgreementP3)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget text(String string)=> Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 15),
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
clipBehavior: Clip.hardEdge,
|
||||||
|
width: 10, height: 10,
|
||||||
|
decoration: BoxDecoration(borderRadius: BorderRadius.circular(20), color: Colors.black)
|
||||||
|
),
|
||||||
|
SizedBox(width: 20),
|
||||||
|
Expanded(child: Text(string, style: TextStyle(color: Colors.black87, fontSize: 18), maxLines: 100, textAlign: TextAlign.justify)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
@ -1,94 +1,54 @@
|
|||||||
|
import 'package:diplomaticquarterapp/core/model/prescriptions/prescriptions_order.dart';
|
||||||
import 'package:diplomaticquarterapp/core/viewModels/er/rrt-view-model.dart';
|
import 'package:diplomaticquarterapp/core/viewModels/er/rrt-view-model.dart';
|
||||||
|
import 'package:diplomaticquarterapp/locator.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/ErService/rapid-response-team/rrt-order-list-item.dart';
|
||||||
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
|
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
|
||||||
class RRTLogPage extends StatefulWidget{
|
class RRTLogPage extends StatefulWidget{
|
||||||
|
final List<PrescriptionsOrder> orders;
|
||||||
|
|
||||||
|
const RRTLogPage({this.orders});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<StatefulWidget> createState() => RRTLogPageState();
|
State<StatefulWidget> createState() => RRTLogPageState();
|
||||||
|
|
||||||
}
|
}
|
||||||
class RRTLogPageState extends State<RRTLogPage>{
|
class RRTLogPageState extends State<RRTLogPage>{
|
||||||
|
|
||||||
|
RRTViewModel viewModel;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return BaseView<RRTViewModel>(
|
|
||||||
onModelReady: (viewModel){
|
|
||||||
|
|
||||||
},
|
return BaseView<RRTViewModel>(
|
||||||
builder: (ctx, vm, widget){
|
onModelReady: (vm) => viewModel = vm,
|
||||||
|
builder: (ctx, vm, widgetState){
|
||||||
return ListView.builder(
|
return ListView.builder(
|
||||||
itemCount: 10,
|
itemCount: widget.orders.length,
|
||||||
itemBuilder: (ctx, idx) => RRTLogListItem()
|
itemBuilder: (ctx, idx) {
|
||||||
|
var order = widget.orders[idx];
|
||||||
|
return RRTLogListItem(order, onCancel: deleteOrder);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
deleteOrder(PrescriptionsOrder order) async {
|
||||||
|
GifLoaderDialogUtils.showMyDialog(context);
|
||||||
|
var success = await viewModel.cancelOrder(order);
|
||||||
|
GifLoaderDialogUtils.hideDialog(context);
|
||||||
// ------------------------
|
if(success)
|
||||||
// List Item Widget
|
setState(() {
|
||||||
// ------------------------
|
widget.orders.remove(order);
|
||||||
|
});
|
||||||
|
|
||||||
final _item_content_seperator = Container(height: 0.25, padding: EdgeInsets.all(10), color: Colors.grey.withOpacity(0.5));
|
|
||||||
|
|
||||||
class RRTLogListItem extends StatelessWidget{
|
|
||||||
BuildContext _context;
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
_context = context;
|
|
||||||
|
|
||||||
return Container(
|
|
||||||
padding: EdgeInsets.all(15), margin: EdgeInsets.symmetric(horizontal: 15, vertical: 10),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Colors.white,
|
|
||||||
borderRadius: BorderRadius.circular(15),
|
|
||||||
boxShadow: [BoxShadow(color: Colors.grey.withOpacity(0.25), spreadRadius: 1, blurRadius: 3)]
|
|
||||||
),
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
||||||
children: [
|
|
||||||
_contentItem(label: "Request ID", value: "2318"),
|
|
||||||
_item_content_seperator,
|
|
||||||
_contentItem(label: "Status", value: "2318"),
|
|
||||||
_item_content_seperator,
|
|
||||||
_contentItem(label: "Pickup Date", value: "2318"),
|
|
||||||
_item_content_seperator,
|
|
||||||
_contentItem(label: "Location", value: "2318"),
|
|
||||||
_item_content_seperator,
|
|
||||||
SizedBox(height: 10),
|
|
||||||
FractionallySizedBox(child: cancelButton())
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _contentItem({@required String label, String value}){
|
|
||||||
return Container(
|
|
||||||
padding: EdgeInsets.symmetric(vertical: 10),
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
Text(label, style: TextStyle(color: Theme.of(_context).appBarTheme.color, fontSize: 9, letterSpacing: 1),),
|
|
||||||
SizedBox(height: 5,),
|
|
||||||
Text(value, style: TextStyle(color: Theme.of(_context).appBarTheme.color,fontWeight: FontWeight.bold, fontSize: 14),),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget cancelButton() => MaterialButton(
|
|
||||||
height: 45,
|
|
||||||
color: Color(0xFFc5272d),
|
|
||||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10) ),
|
|
||||||
onPressed: () { },
|
|
||||||
child: Text("CANCEL", style: TextStyle(color: Colors.white, fontSize: 13),),
|
|
||||||
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,71 @@
|
|||||||
|
|
||||||
|
import 'package:diplomaticquarterapp/core/model/prescriptions/prescriptions_order.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
final _item_content_seperator = Container(height: 0.25, padding: EdgeInsets.all(10), color: Colors.grey.withOpacity(0.5));
|
||||||
|
|
||||||
|
class RRTLogListItem extends StatelessWidget{
|
||||||
|
final PrescriptionsOrder order;
|
||||||
|
final Function(PrescriptionsOrder) onCancel;
|
||||||
|
RRTLogListItem(this.order, {this.onCancel});
|
||||||
|
|
||||||
|
BuildContext _context;
|
||||||
|
|
||||||
|
TranslationBase localize;
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
_context = context;
|
||||||
|
localize = TranslationBase.of(context);
|
||||||
|
|
||||||
|
return Container(
|
||||||
|
padding: EdgeInsets.all(15), margin: EdgeInsets.symmetric(horizontal: 15, vertical: 10),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(15),
|
||||||
|
boxShadow: [BoxShadow(color: Colors.grey.withOpacity(0.25), spreadRadius: 1, blurRadius: 3)]
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
_contentItem(label: localize.reqId, value: order.iD.toString()),
|
||||||
|
_item_content_seperator,
|
||||||
|
_contentItem(label: localize.status, value: order.getStatusName(localize)),
|
||||||
|
_item_content_seperator,
|
||||||
|
_contentItem(label: localize.pickupDate, value: order.getFormattedDateTime()),
|
||||||
|
_item_content_seperator,
|
||||||
|
_contentItem(label: localize.location, value: order.getNearestProjectDescription()),
|
||||||
|
_item_content_seperator,
|
||||||
|
SizedBox(height: 10),
|
||||||
|
|
||||||
|
if(onCancel != null)
|
||||||
|
FractionallySizedBox(child: cancelButton())
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _contentItem({@required String label, String value}){
|
||||||
|
return Container(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 10),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(label, style: TextStyle(color: Theme.of(_context).appBarTheme.color, fontSize: 9, letterSpacing: 1),),
|
||||||
|
SizedBox(height: 5,),
|
||||||
|
Text(value, style: TextStyle(color: Theme.of(_context).appBarTheme.color,fontWeight: FontWeight.bold, fontSize: 14),),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget cancelButton() => MaterialButton(
|
||||||
|
height: 45,
|
||||||
|
color: Color(0xFFc5272d),
|
||||||
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10) ),
|
||||||
|
onPressed: () => onCancel(order),
|
||||||
|
child: Text(localize.cancel, style: TextStyle(color: Colors.white, fontSize: 13),),
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,195 @@
|
|||||||
|
import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart';
|
||||||
|
import 'package:diplomaticquarterapp/core/viewModels/er/rrt-view-model.dart';
|
||||||
|
import 'package:diplomaticquarterapp/models/rrt/service_price.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/ErService/ErOptions.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/ErService/rapid-response-team/rrt-main-screen.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/utils.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/dialogs/alert_dialog.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||||
|
|
||||||
|
class RRTPlaceOrderPage extends StatelessWidget{
|
||||||
|
TranslationBase localize;
|
||||||
|
RRTViewModel viewModel;
|
||||||
|
Addresses selectedAddress;
|
||||||
|
final ServicePrice servicePrice;
|
||||||
|
|
||||||
|
RRTPlaceOrderPage({@required this.selectedAddress, @required this.servicePrice});
|
||||||
|
|
||||||
|
TextEditingController noteController = TextEditingController(text: '');
|
||||||
|
BuildContext _context;
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
_context = context;
|
||||||
|
localize = TranslationBase.of(context);
|
||||||
|
var lat = selectedAddress.latLong.split(',').first;
|
||||||
|
var lng = selectedAddress.latLong.split(',').last;
|
||||||
|
|
||||||
|
return BaseView<RRTViewModel>(
|
||||||
|
onModelReady: (vm) => viewModel = vm,
|
||||||
|
builder: (ctx,vm,wState){
|
||||||
|
return AppScaffold(
|
||||||
|
appBarTitle: localize.rapidResponseTeam,
|
||||||
|
isShowAppBar: true,
|
||||||
|
body: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
padding: EdgeInsets.all(20),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
Text(localize.selectedLocation, style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),),
|
||||||
|
|
||||||
|
selectedAddressField(),
|
||||||
|
|
||||||
|
AspectRatio(
|
||||||
|
aspectRatio: 3/1,
|
||||||
|
child: ClipRRect(
|
||||||
|
clipBehavior: Clip.hardEdge,
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
child: Image.network(
|
||||||
|
"https://maps.googleapis.com/maps/api/staticmap?center=$lat,$lng &zoom=16&size=800x400&maptype=roadmap&markers=color:red%7C$lat,$lng&key=AIzaSyCyDbWUM9d_sBUGIE8PcuShzPaqO08NSC8",
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
SizedBox(height: 10,),
|
||||||
|
|
||||||
|
Container(
|
||||||
|
height: 70,
|
||||||
|
margin: EdgeInsets.symmetric(vertical: 5),
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 15, vertical: 10),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white, borderRadius: BorderRadius.circular(10),
|
||||||
|
boxShadow: [BoxShadow(blurRadius: 5, spreadRadius: 2, offset: Offset(2,2), color: Colors.grey.withOpacity(0.25))]
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(localize.totalAmountPayable, style: TextStyle(fontSize: 13),),
|
||||||
|
SizedBox(height: 5,),
|
||||||
|
Text("${servicePrice.totalPrice ?? '- - -'} ${localize.sar}" , style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
Container(
|
||||||
|
height: 70,
|
||||||
|
margin: EdgeInsets.symmetric(vertical: 5),
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 0, vertical: 10),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white, borderRadius: BorderRadius.circular(10),
|
||||||
|
boxShadow: [BoxShadow(blurRadius: 5, spreadRadius: 2, offset: Offset(2,2), color: Colors.grey.withOpacity(0.25))]
|
||||||
|
),
|
||||||
|
child: TextField(
|
||||||
|
controller: noteController,
|
||||||
|
style: TextStyle(fontSize: 18.0),
|
||||||
|
decoration: InputDecoration(
|
||||||
|
filled: true,
|
||||||
|
fillColor: Colors.white,
|
||||||
|
labelText: localize.notes,
|
||||||
|
contentPadding: const EdgeInsets.only(left: 14.0, bottom: 8.0, top: 8.0),
|
||||||
|
focusedBorder: OutlineInputBorder(
|
||||||
|
borderSide: BorderSide(color: Colors.white),
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
enabledBorder: UnderlineInputBorder(
|
||||||
|
borderSide: BorderSide(color: Colors.white),
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
submitButton(context)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Widget selectedAddressField(){
|
||||||
|
var address = "${selectedAddress.address1 ?? ''} ${selectedAddress.address2 ?? ''}";
|
||||||
|
return Container(
|
||||||
|
margin: EdgeInsets.symmetric(vertical: 10),
|
||||||
|
child: Expanded(
|
||||||
|
child: MaterialButton(
|
||||||
|
height: 50, color: Colors.white,
|
||||||
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10) ),
|
||||||
|
onPressed: (){},
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Expanded(child: Text(address, style: TextStyle(color: Colors.black87, fontSize: 15, letterSpacing: 1))),
|
||||||
|
Icon(Icons.location_on_rounded, size: 30, color: Colors.black,)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Widget submitButton(BuildContext context){
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.all(15),
|
||||||
|
child: MaterialButton(
|
||||||
|
height: 50,
|
||||||
|
color: Theme.of(context).appBarTheme.color,
|
||||||
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
|
||||||
|
onPressed: () => placeOrder(),
|
||||||
|
child: Text(localize.submit, style: TextStyle(color: Colors.white, fontSize: 15, letterSpacing: 1),),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
placeOrder() async{
|
||||||
|
if(selectedAddress != null && selectedAddress.latLong != null && selectedAddress.latLong.isNotEmpty && selectedAddress.latLong.split(',').length > 1){
|
||||||
|
GifLoaderDialogUtils.showMyDialog(_context);
|
||||||
|
|
||||||
|
Map<String, dynamic> params = {};
|
||||||
|
var cordinates = selectedAddress.latLong.split(',');
|
||||||
|
var latlng = LatLng(double.parse(cordinates.first), double.parse(cordinates.last));
|
||||||
|
params['Latitude'] = latlng.latitude;
|
||||||
|
params['Longitude'] = latlng.longitude;
|
||||||
|
params['Notes'] = noteController.text;
|
||||||
|
var requestId = await viewModel.createOrder(params);
|
||||||
|
|
||||||
|
GifLoaderDialogUtils.hideDialog(_context);
|
||||||
|
|
||||||
|
if(requestId != null){
|
||||||
|
AlertDialogBox(
|
||||||
|
context: _context,
|
||||||
|
title: '',
|
||||||
|
confirmMessage: localize.rrtOrderSuccessMessage,
|
||||||
|
okText: localize.ok,
|
||||||
|
okFunction: (){
|
||||||
|
AlertDialogBox.closeAlertDialog(_context);
|
||||||
|
gotoRRTRoot();
|
||||||
|
}
|
||||||
|
).showAlertDialog(_context);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
AppToast.showErrorToast(message: 'Invalid location selected');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
gotoRRTRoot(){
|
||||||
|
Navigator.popUntil(_context, (route) => Utils.route(route, equalsTo: ErOptions));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class SelectionDialog<T> extends StatefulWidget{
|
||||||
|
@override
|
||||||
|
State<StatefulWidget> createState() => SelectionDialogState();
|
||||||
|
|
||||||
|
String title;
|
||||||
|
List<T> items;
|
||||||
|
show({@required String title, @required List<T> items}){
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class SelectionDialogState extends State<SelectionDialog>{
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(15)),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(15),
|
||||||
|
child: Text(widget.title,),
|
||||||
|
),
|
||||||
|
|
||||||
|
Container(height: 0.5, color: Colors.grey,),
|
||||||
|
|
||||||
|
ListView.separated(
|
||||||
|
padding: EdgeInsets.all(10),
|
||||||
|
itemCount: widget.items.length,
|
||||||
|
itemBuilder: (ctx,idx) => item(idx),
|
||||||
|
separatorBuilder: (ctx,idx) => Container(height: 0.25, color: Colors.grey.withOpacity(0.7),))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget item(int idx){
|
||||||
|
var model = widget.items[idx];
|
||||||
|
return Container(
|
||||||
|
padding: EdgeInsets.all(10),
|
||||||
|
height: 20,
|
||||||
|
color: Colors.blue,
|
||||||
|
child: Text(model.toString()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue