Merge branch 'development' into 'master'

Development

See merge request Cloud_Solution/driver-app!23
setting_page
Mohammad Aljammal 5 years ago
commit 259cc3810a

@ -37,8 +37,50 @@ const Map<String, Map<String, String>> localizedValues = {
'en': 'Undelivered Packages',
'ar': 'الطرود التي لم يتم تسليمها'
},
'away': {'en': 'away', 'ar': 'بعيدا'},
'scan': {'en': 'Scan', 'ar': 'مسح'},
'scan2': {'en': 'away', 'ar': 'بعيدا'},
'scanDb': {'en': 'away', 'ar': 'بعيدا'},
'deliveryInfo': {
'en': 'Delivery information',
'ar': 'معلومات الشحنة'
},
'confirmationSent': {
'en': 'Confirmation email and SMS has been sent',
'ar': 'تم إرسال التأكيد للبرييد الإلكتروني والرسائل النصية القصيرة'
},
'location': {
'en': 'Location',
'ar': 'الموقع'
},
'call': {
'en': 'Call',
'ar': 'اتصال'
},
'sms': {
'en': 'SMS',
'ar': 'رسالة نصية'
},
'packageContent': {
'en': 'Package Content',
'ar': 'محتوى الحزمة'
},
'payment': {
'en': 'Payment',
'ar': 'دفع'
},
'delivryTime': {
'en': 'Delivery Time',
'ar': 'وقت التوصيل'
},
'clientReached': {
'en': 'Client Reached',
'ar': 'الوصول الى العميل'
},
'addNoteBtn': {
'en': 'Add Note',
'ar': 'اضافة ملاحظة'
},
'nextDelivery': {
'en': 'Next Delivery',
'ar': 'الشحنة التالية'
}
};

@ -0,0 +1,153 @@
class PendingOrdersRes {
int rowID;
int orderID;
String firstName;
String middleName;
String lastName;
int gender;
String nationalityID;
String mobileNumber;
String preferredLanguage;
int driverID;
int statusID;
bool ispaused;
int groupID;
String description;
String descriptionN;
double longitude;
double latitude;
Null amount;
String orderCreatedOn;
Null ePharmacyOrderNo;
int projectID;
String appointmentNo;
String dischargeID;
String patientID;
bool patientOutSA;
int distanceInKilometers;
List<ItemsQuantitiesList> itemsQuantitiesList;
PendingOrdersRes(
{this.rowID,
this.orderID,
this.firstName,
this.middleName,
this.lastName,
this.gender,
this.nationalityID,
this.mobileNumber,
this.preferredLanguage,
this.driverID,
this.statusID,
this.ispaused,
this.groupID,
this.description,
this.descriptionN,
this.longitude,
this.latitude,
this.amount,
this.orderCreatedOn,
this.ePharmacyOrderNo,
this.projectID,
this.appointmentNo,
this.dischargeID,
this.patientID,
this.patientOutSA,
this.distanceInKilometers,
this.itemsQuantitiesList});
PendingOrdersRes.fromJson(Map<String, dynamic> json) {
rowID = json['RowID'];
orderID = json['OrderID'];
firstName = json['FirstName'];
middleName = json['MiddleName'];
lastName = json['LastName'];
gender = json['Gender'];
nationalityID = json['NationalityID'];
mobileNumber = json['MobileNumber'];
preferredLanguage = json['PreferredLanguage'];
driverID = json['DriverID'];
statusID = json['StatusID'];
ispaused = json['Ispaused'];
groupID = json['GroupID'];
description = json['Description'];
descriptionN = json['DescriptionN'];
longitude = json['Longitude'];
latitude = json['Latitude'];
amount = json['Amount'];
orderCreatedOn = json['OrderCreatedOn'];
ePharmacyOrderNo = json['ePharmacyOrderNo'];
projectID = json['ProjectID'];
appointmentNo = json['AppointmentNo'];
dischargeID = json['DischargeID'];
patientID = json['PatientID'];
patientOutSA = json['PatientOutSA'];
distanceInKilometers = json['DistanceInKilometers'];
if (json['ItemsQuantitiesList'] != null) {
itemsQuantitiesList = new List<ItemsQuantitiesList>();
json['ItemsQuantitiesList'].forEach((v) {
itemsQuantitiesList.add(new ItemsQuantitiesList.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['RowID'] = this.rowID;
data['OrderID'] = this.orderID;
data['FirstName'] = this.firstName;
data['MiddleName'] = this.middleName;
data['LastName'] = this.lastName;
data['Gender'] = this.gender;
data['NationalityID'] = this.nationalityID;
data['MobileNumber'] = this.mobileNumber;
data['PreferredLanguage'] = this.preferredLanguage;
data['DriverID'] = this.driverID;
data['StatusID'] = this.statusID;
data['Ispaused'] = this.ispaused;
data['GroupID'] = this.groupID;
data['Description'] = this.description;
data['DescriptionN'] = this.descriptionN;
data['Longitude'] = this.longitude;
data['Latitude'] = this.latitude;
data['Amount'] = this.amount;
data['OrderCreatedOn'] = this.orderCreatedOn;
data['ePharmacyOrderNo'] = this.ePharmacyOrderNo;
data['ProjectID'] = this.projectID;
data['AppointmentNo'] = this.appointmentNo;
data['DischargeID'] = this.dischargeID;
data['PatientID'] = this.patientID;
data['PatientOutSA'] = this.patientOutSA;
data['DistanceInKilometers'] = this.distanceInKilometers;
if (this.itemsQuantitiesList != null) {
data['ItemsQuantitiesList'] =
this.itemsQuantitiesList.map((v) => v.toJson()).toList();
}
return data;
}
}
class ItemsQuantitiesList {
String itemName;
int productID;
int quantity;
ItemsQuantitiesList({this.itemName, this.productID, this.quantity});
ItemsQuantitiesList.fromJson(Map<String, dynamic> json) {
itemName = json['ItemName'];
productID = json['ProductID'];
quantity = json['Quantity'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ItemName'] = this.itemName;
data['ProductID'] = this.productID;
data['Quantity'] = this.quantity;
return data;
}
}

@ -10,13 +10,13 @@ class ScanQrRequestModel {
ScanQrRequestModel(
{this.deliveryOrderID,
this.driverID,
this.createdBy,
this.channel,
this.groupID,
this.tokenID,
this.userID,
this.mobileNo});
this.driverID,
this.createdBy,
this.channel,
this.groupID,
this.tokenID,
this.userID,
this.mobileNo});
ScanQrRequestModel.fromJson(Map<String, dynamic> json) {
deliveryOrderID = json['DeliveryOrderID'];

@ -24,9 +24,8 @@ class BaseAppClient {
}) async {
String url = BASE_URL + endPoint;
try {
Map profile = await sharedPref.getObject(USER_PROFILE);
String token = await sharedPref.getString(TOKEN);
String token = await sharedPref.getString(TOKEN);
if (profile != null) {
AuthenticatedUser doctorProfile = AuthenticatedUser.fromJson(profile);
body['DriverID'] = doctorProfile?.userID;
@ -38,7 +37,6 @@ class BaseAppClient {
}
print("URL : $url");
print("Body : ${json.encode(body)}");

@ -1,11 +1,12 @@
import 'package:driverapp/config/config.dart';
import 'package:driverapp/core/model/pending_orders/pending_orders_model.dart';
import 'package:driverapp/core/model/pending_orders/pending_orders_req_model.dart';
import 'package:driverapp/core/model/pending_orders/pending_orders_res_model.dart';
import 'package:driverapp/core/model/scan_qr/scan_qr_request_model.dart';
import 'package:driverapp/core/service/base_service.dart';
class OrdersService extends BaseService {
List<PendingOrders> _orders = List();
List<PendingOrders> get orders => _orders;
List<PendingOrdersRes> _orders = List();
List<PendingOrdersRes> get orders => _orders;
bool isOrderInserted;
PendingOrders _requestGetPendingOrders = PendingOrders(
@ -22,41 +23,39 @@ class OrdersService extends BaseService {
hasError = false;
try {
await baseAppClient.post(GET_ALL_ORDERS,
onSuccess: (dynamic response, int statusCode) {
_orders.clear();
response['PatientER_Delivery_GetAllOrderList'].forEach((order) {
_orders.add(PendingOrders.fromJson(order));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: _requestGetPendingOrders.toJson());
onSuccess: (dynamic response, int statusCode) {
_orders.clear();
response['PatientER_Delivery_GetAllOrderList'].forEach((order) {
_orders.add(PendingOrdersRes.fromJson(order));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: _requestGetPendingOrders.toJson());
} catch (e) {
hasError = true;
super.error = error;
throw e;
}
}
Future insertOrder() async {
ScanQrRequestModel _scanQrRequestModel = ScanQrRequestModel(deliveryOrderID: 1200, groupID: 0);
ScanQrRequestModel _scanQrRequestModel =
ScanQrRequestModel(deliveryOrderID: 1200, groupID: 0);
hasError = false;
try {
await baseAppClient.post(SCAN_QR,
onSuccess: (dynamic response, int statusCode) {
isOrderInserted = response["PatientER_Delivery_IsOrderInserted"];
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: _scanQrRequestModel.toJson());
onSuccess: (dynamic response, int statusCode) {
isOrderInserted = response["PatientER_Delivery_IsOrderInserted"];
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: _scanQrRequestModel.toJson());
} catch (e) {
hasError = true;
super.error = error;
throw e;
}
}
}

@ -1,13 +1,14 @@
import 'package:driverapp/core/enum/viewstate.dart';
import 'package:driverapp/core/model/pending_orders/pending_orders_res_model.dart';
import 'package:driverapp/core/service/orders_service.dart';
import 'package:driverapp/core/model/pending_orders/pending_orders_model.dart';
import 'package:driverapp/core/model/pending_orders/pending_orders_req_model.dart';
import '../../locator.dart';
import 'base_view_model.dart';
class OrdersViewModel extends BaseViewModel {
OrdersService _pendingOrdersService = locator<OrdersService>();
List<PendingOrders> get orders => _pendingOrdersService.orders;
List<PendingOrdersRes> get orders => _pendingOrdersService.orders;
Future getPendingOrders() async {
setState(ViewState.Busy);
@ -19,7 +20,6 @@ class OrdersViewModel extends BaseViewModel {
setState(ViewState.Idle);
}
Future insertOrder() async {
setState(ViewState.ErrorLocal);
await _pendingOrdersService.insertOrder();

@ -4,8 +4,8 @@ import 'core/service/authentication_service.dart';
import 'core/service/hospital_service.dart';
import 'core/service/orders_service.dart';
import 'core/viewModels/authentication_view_model.dart';
import 'core/viewModels/orders_view_model.dart';
import 'core/viewModels/hospital_view_model.dart';
import 'core/viewModels/orders_view_model.dart';
GetIt locator = GetIt.instance;

@ -5,7 +5,6 @@ import 'package:driverapp/core/viewModels/authentication_view_model.dart';
import 'package:driverapp/core/viewModels/project_view_model.dart';
import 'package:driverapp/pages/base/base_view.dart';
import 'package:driverapp/pages/dashboard/dashboard_screen.dart';
import 'package:driverapp/pages/landing/landing_page.dart';
import 'package:driverapp/uitl/translations_delegate_base.dart';
import 'package:driverapp/uitl/utils.dart';
import 'package:driverapp/widgets/buttons/secondary_button.dart';
@ -29,8 +28,9 @@ class LoginPage extends StatelessWidget {
return AnimatedSwitcher(
duration: Duration(microseconds: 350),
child: BaseView<AuthenticationViewModel>(
builder: (_, model, widget) => AppScaffold(
isShowAppBar: false,
builder: (_, model, widget) =>
AppScaffold(
isShowAppBar: false,
body: SingleChildScrollView(
child: Center(
child: Column(

@ -23,9 +23,8 @@ class _DashboardScreenState extends State<DashboardScreen> {
int orderId;
return BaseView<OrdersViewModel>(
onModelReady: (model) => model.getPendingOrders(),
builder:
(BuildContext context, OrdersViewModel model, Widget child) =>
AppScaffold(
builder: (BuildContext context, OrdersViewModel model, Widget child) =>
AppScaffold(
body: Column(
// mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
@ -265,8 +264,8 @@ class _DashboardScreenState extends State<DashboardScreen> {
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
InkWell(
onTap:(){
_scanQrAndGetPatient(context,model);
onTap: () {
_scanQrAndGetPatient(context, model);
},
child: Text(
'SCAN',
@ -340,64 +339,64 @@ class _DashboardScreenState extends State<DashboardScreen> {
),
Expanded(
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.vertical,
itemCount: //model.orders == null ? 0 : model.orders.length,
3,
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 12.2),
child: InkWell(
child: RoundedContainer(
height: MediaQuery.of(context).size.height * 0.108,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
flex: 1,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: EdgeInsets.only(left: 22.0),
child: Image.asset(
'assets/images/location.png',
height: MediaQuery.of(context)
.size
.height *
shrinkWrap: true,
scrollDirection: Axis.vertical,
itemCount: //model.orders == null ? 0 : model.orders.length,
3,
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 12.2),
child: InkWell(
child: RoundedContainer(
height: MediaQuery.of(context).size.height * 0.108,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
flex: 1,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: EdgeInsets.only(left: 22.0),
child: Image.asset(
'assets/images/location.png',
height:
MediaQuery.of(context).size.height *
0.10,
width: MediaQuery.of(context)
.size
.width *
0.09,
),
)
],
),
),
if (model.orders.length != 0)
Expanded(
flex: 3,
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
width: MediaQuery.of(context).size.width *
0.09,
),
)
],
),
),
if (model.orders.length != 0)
Expanded(
flex: 3,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
model.orders[index].firstName +
' ' +
model.orders[index].lastName,
style: TextStyle(fontSize: 18.0),
Padding(
padding: EdgeInsets.only(top: 5.0),
child: Text(
model.orders[index].firstName +
' ' +
model.orders[index].lastName,
style: TextStyle(fontSize: 18.0),
),
),
Text(
model.orders[index].mobileNumber,
style: TextStyle(
color: Color(0xff30B7B9),
fontWeight: FontWeight.w600,
fontSize: 15.0),
color: Color(0xff30B7B9),
fontWeight: FontWeight.w600,
fontSize: 15.0,
),
),
Expanded(
child: Text(
'Olaya ST, Behind kfc next to king ,Olaya ST ',
'Olaya ST, Behind kfc next to king ,',
style: TextStyle(color: Colors.black45),
),
),
@ -453,7 +452,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
);
}
_scanQrAndGetPatient(BuildContext context,OrdersViewModel model) async {
_scanQrAndGetPatient(BuildContext context, OrdersViewModel model) async {
/// When give qr we will change this method to get data
/// var result = await BarcodeScanner.scan();
/// int patientID = get from qr result
@ -464,10 +463,8 @@ class _DashboardScreenState extends State<DashboardScreen> {
await model.insertOrder();
if (model.state == ViewState.ErrorLocal) {
Utils.showErrorToast(model.error);
}else{
} else {
AppToast.showSuccessToast(message: "Order Added");
}
}
}

@ -2,6 +2,7 @@ import 'package:driverapp/widgets/delivery/customer_brief_card.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../../uitl/translations_delegate_base.dart';
import '../../widgets/others/app_scaffold_widget.dart';
class DeliveryConfirmedPage extends StatelessWidget {
@ -40,11 +41,10 @@ class DeliveryConfirmedPage extends StatelessWidget {
Container(
width: 300,
height: 300,
padding: EdgeInsets.only(top:60),
padding: EdgeInsets.only(top: 60),
decoration: BoxDecoration(
color: Colors.white10,
shape: BoxShape.circle
),
shape: BoxShape.circle),
child: Column(
children: <Widget>[
Icon(
@ -53,14 +53,18 @@ class DeliveryConfirmedPage extends StatelessWidget {
size: 60,
),
Text(
'Delivery Confirmed',
TranslationBase
.of(context)
.deliveryInfo,
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
),
Text(
'Confirmation email and SMS has been sent',
TranslationBase
.of(context)
.confirmationSent,
style: TextStyle(
color: Colors.white,
fontSize: 13,
@ -74,7 +78,6 @@ class DeliveryConfirmedPage extends StatelessWidget {
),
],
),
Stack(
children: <Widget>[
Container(
@ -103,28 +106,38 @@ class DeliveryConfirmedPage extends StatelessWidget {
padding: EdgeInsets.all(8),
color: Colors.orangeAccent,
shape: RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(10.0),
borderRadius:
new BorderRadius.circular(10.0),
),
icon: Icon(
Icons.mode_edit,
color: Colors.white,
),
label: Text(
'Add Note',
TranslationBase
.of(context)
.addNoteBtn,
style: TextStyle(color: Colors.white),
),
onPressed: () {},
),
SizedBox(height: 20,),
SizedBox(
height: 20,
),
FlatButton(
color: Color(0xff41bdbb),
padding: EdgeInsets.only(right: 100, left: 100),
padding:
EdgeInsets.only(right: 100, left: 100),
shape: RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(18.0),
side: BorderSide(color: Color(0xff41bdbb)),
borderRadius:
new BorderRadius.circular(18.0),
side:
BorderSide(color: Color(0xff41bdbb)),
),
child: Text(
'Next Delivery',
TranslationBase
.of(context)
.nextDelivery,
style: TextStyle(color: Colors.white),
),
onPressed: () {},
@ -139,8 +152,7 @@ class DeliveryConfirmedPage extends StatelessWidget {
itemId: item.driverID,
customerFirstName: item.firstName,
customerLastName: item.lastName,
mobileNo: item.mobileNumber
),
mobileNo: item.mobileNumber),
],
),
],
@ -152,4 +164,3 @@ class DeliveryConfirmedPage extends StatelessWidget {
);
}
}

@ -5,6 +5,7 @@ import 'package:driverapp/widgets/delivery/package_content.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../../uitl/translations_delegate_base.dart';
import '../../widgets/others/app_scaffold_widget.dart';
class InformationPage extends StatelessWidget {
@ -43,7 +44,9 @@ class InformationPage extends StatelessWidget {
),
Container(
child: Text(
'Delivery information',
TranslationBase
.of(context)
.deliveryInfo,
style: TextStyle(
color: Colors.white,
fontSize: 20,
@ -84,7 +87,9 @@ class InformationPage extends StatelessWidget {
size: 30,
color: Colors.white,
),
btnName: 'Location',
btnName: TranslationBase
.of(context)
.location,
btnFunction: () {},
),
delivery_info_button(
@ -104,7 +109,9 @@ class InformationPage extends StatelessWidget {
size: 30,
color: Colors.white,
),
btnName: 'SMS',
btnName: TranslationBase
.of(context)
.sms,
btnFunction: () {},
),
delivery_info_button(
@ -114,7 +121,9 @@ class InformationPage extends StatelessWidget {
size: 30,
color: Colors.white,
),
btnName: 'Call',
btnName: TranslationBase
.of(context)
.call,
btnFunction: () {},
),
],
@ -128,7 +137,9 @@ class InformationPage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'Package Content',
TranslationBase
.of(context)
.packageContent,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20),
@ -186,7 +197,9 @@ class InformationPage extends StatelessWidget {
side: BorderSide(color: Color(0xff41bdbb)),
),
child: Text(
'Client Reached',
TranslationBase
.of(context)
.clientReached,
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,

@ -15,9 +15,8 @@ class _OrdersListScreenState extends State<OrdersListScreen> {
Widget build(BuildContext context) {
return BaseView<OrdersViewModel>(
onModelReady: (model) => model.getPendingOrders(),
builder:
(BuildContext context, OrdersViewModel model, Widget child) =>
Scaffold(
builder: (BuildContext context, OrdersViewModel model, Widget child) =>
Scaffold(
appBar: AppBar(
centerTitle: true,
backgroundColor: Color(0xffF4F9FA),
@ -75,7 +74,8 @@ class _OrdersListScreenState extends State<OrdersListScreen> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Expanded(
Padding(
padding: EdgeInsets.only(top: 10.0),
child: Text(
model.orders[index].firstName +
' ' +

@ -49,23 +49,60 @@ class TranslationBase {
String get english => localizedValues['english'][locale.languageCode];
String get arabic => localizedValues['arabic'][locale.languageCode];
String get enterCredentialsMsg =>
localizedValues['enterCredentialsMsg'][locale.languageCode];
String get forgotPassword =>
localizedValues['forgotPassword'][locale.languageCode];
String get login => localizedValues['login'][locale.languageCode];
String get haveGreatDay =>
localizedValues['haveGreatDay'][locale.languageCode];
String get youHave => localizedValues['youHave'][locale.languageCode];
String get deliveredPackages =>
localizedValues['deliveredPackages'][locale.languageCode];
String get seeAll => localizedValues['seeAll'][locale.languageCode];
String get nearestDropOffs =>
localizedValues['nearestDropOffs'][locale.languageCode];
String get undeliveredPackages =>
localizedValues['undeliveredPackages'][locale.languageCode];
String get away => localizedValues['away'][locale.languageCode];
String get scan => localizedValues['scan'][locale.languageCode];
String get deliveryInfo =>
localizedValues['deliveryInfo'][locale.languageCode];
String get location => localizedValues['location'][locale.languageCode];
String get call => localizedValues['call'][locale.languageCode];
String get sms => localizedValues['sms'][locale.languageCode];
String get packageContent =>
localizedValues['packageContent'][locale.languageCode];
String get payment => localizedValues['payment'][locale.languageCode];
String get delivryTime => localizedValues['delivryTime'][locale.languageCode];
String get clientReached =>
localizedValues['clientReached'][locale.languageCode];
String get addNoteBtn => localizedValues['addNoteBtn'][locale.languageCode];
String get nextDelivery =>
localizedValues['nextDelivery'][locale.languageCode];
String get confirmationSent =>
localizedValues['confirmationSent'][locale.languageCode];
}
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import '../../uitl/translations_delegate_base.dart';
class CustomerBrief extends StatelessWidget {
final int itemId;
final String time;
@ -109,7 +111,9 @@ class CustomerBrief extends StatelessWidget {
Row(
children: <Widget>[
Text(
'payment',
TranslationBase
.of(context)
.payment,
),
SizedBox(
width: 170,
@ -125,7 +129,11 @@ class CustomerBrief extends StatelessWidget {
),
Row(
children: <Widget>[
Text('Delivery Time'),
Text(
TranslationBase
.of(context)
.delivryTime,
),
SizedBox(
width: 50,
),

Loading…
Cancel
Save