import 'package:barcode_scan/platform_wrapper.dart'; import 'package:driverapp/config/size_config.dart'; import 'package:driverapp/core/enum/viewstate.dart'; import 'package:driverapp/core/model/scan_qr/scan_qr_request_model.dart'; import 'package:driverapp/core/viewModels/authentication_view_model.dart'; import 'package:driverapp/core/viewModels/orders_view_model.dart'; import 'package:driverapp/pages/delivery/information_page.dart'; import 'package:driverapp/pages/orders/pending_orders_page.dart'; import 'package:driverapp/uitl/app_toast.dart'; import 'package:driverapp/uitl/translations_delegate_base.dart'; import 'package:driverapp/uitl/utils.dart'; import 'package:driverapp/widgets/data_display/circle-container.dart'; import 'package:driverapp/widgets/others/app_scaffold_widget.dart'; import 'package:driverapp/widgets/others/network_base_view.dart'; import 'package:driverapp/widgets/others/rounded_container.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:provider/provider.dart'; import 'package:driverapp/pages/orders/deliverd_orders_page.dart'; import '../base/base_view.dart'; class DashboardScreen extends StatefulWidget { @override _DashboardScreenState createState() => _DashboardScreenState(); } class _DashboardScreenState extends State { bool _isInit = false; AuthenticationViewModel _authenticationViewModel; @override void didChangeDependencies() { if (!_isInit) { _authenticationViewModel = Provider.of(context); _isInit = true; } super.didChangeDependencies(); } @override Widget build(BuildContext context) { int orderId; return BaseView( onModelReady: (model) => model.getPendingOrders(), builder: (BuildContext context, OrdersViewModel model, Widget child) => AppScaffold( body: Container( height: MediaQuery.of(context).size.height * .95, child: ListView( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Padding( padding: EdgeInsets.all(16.0), child: Column( children: [ SafeArea( child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( TranslationBase.of(context).haveGreatDay, style: TextStyle( fontSize: 14.5, color: Color(0xff636363), fontWeight: FontWeight.w300), ), Padding( padding: EdgeInsets.only(top: 4.5), child: Text( _authenticationViewModel.user.userName, style: TextStyle( fontWeight: FontWeight.w400, fontSize: 25.0), ), ), ], ), ), ], ), ), Padding( padding: EdgeInsets.all(16.0), child: SafeArea( child: Column( children: [ CircleAvatar( radius: 25.5, backgroundColor: Color(0xff30B7B9), child: CircleAvatar( backgroundColor: Color(0xff30B7B9), maxRadius: 26.0, child: Image.asset( 'assets/images/driver.png', fit: BoxFit.contain, ), ), ), ], ), ), ), ], ), Row( children: [ Expanded( child: Column( children: [ Padding( padding: EdgeInsets.symmetric(horizontal: 10.0), child: Container( height: MediaQuery.of(context).orientation == Orientation.portrait ? MediaQuery.of(context).size.height * 0.16 : MediaQuery.of(context).size.height * 0.30, width: MediaQuery.of(context).size.width * 0.44, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), gradient: LinearGradient(colors: [ Color(0xff17AFB8), Color(0xff49C1BC) ]), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Padding( padding: EdgeInsets.all(2.0), child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text( TranslationBase.of(context).youHave, style: TextStyle( color: Colors.white, fontSize: MediaQuery.of(context) .orientation == Orientation.landscape ? SizeConfig.textMultiplier * 2.2 : SizeConfig.textMultiplier * 1.3, ), ), Text( '5', style: TextStyle( color: Colors.white, fontSize: SizeConfig.textMultiplier * 3.0), ), Text( TranslationBase.of(context) .undeliveredPackages, style: TextStyle( color: Colors.white, fontSize: MediaQuery.of(context) .orientation == Orientation.landscape ? SizeConfig.textMultiplier * 2.2 : SizeConfig.textMultiplier * 1.3, ), ) ], ), ), ), Padding( padding: EdgeInsets.only(right: 9.5), child: Container( width: 100, height: 100, decoration: BoxDecoration( color: Colors.white10, shape: BoxShape.circle), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( 'assets/images/closed_box.png', height: MediaQuery.of(context) .orientation == Orientation.portrait ? MediaQuery.of(context) .size .height * 0.09 : MediaQuery.of(context) .size .height * 0.20, width: MediaQuery.of(context) .size .width * 0.20, scale: 0.9, fit: BoxFit.contain, ), ], ), ), ), ], ), ), ) ], ), ), Expanded( child: Column( children: [ Padding( padding: EdgeInsets.symmetric(horizontal: 10.0), child: Container( height: MediaQuery.of(context).orientation == Orientation.portrait ? MediaQuery.of(context).size.height * 0.16 : MediaQuery.of(context).size.height * 0.30, width: MediaQuery.of(context).size.width * 0.45, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), gradient: LinearGradient(colors: [ Color(0xff17AFB8), Color(0xff49C1BC) ]), ), child: InkWell( onTap: () => Navigator.push( context, MaterialPageRoute( builder: (context) => DeliverdOrdersPage())), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Padding( padding: EdgeInsets.all(2.0), child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text( TranslationBase.of(context).youHave, style: TextStyle( color: Colors.white, fontSize: MediaQuery.of(context) .orientation == Orientation.landscape ? SizeConfig.textMultiplier * 2.2 : SizeConfig.textMultiplier * 1.3, ), ), Text( '5', style: TextStyle( color: Colors.white, fontSize: SizeConfig.textMultiplier * 3.0), ), Text( TranslationBase.of(context) .undeliveredPackages, style: TextStyle( color: Colors.white, fontSize: MediaQuery.of(context) .orientation == Orientation.landscape ? SizeConfig.textMultiplier * 2.2 : SizeConfig.textMultiplier * 1.3, ), ) ], ), ), ), Padding( padding: EdgeInsets.only(right: 9.5), child: Container( width: 100, height: 100, decoration: BoxDecoration( color: Colors.white10, shape: BoxShape.circle), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( 'assets/images/opend_box.png', height: MediaQuery.of(context) .orientation == Orientation.portrait ? MediaQuery.of(context) .size .height * 0.09 : MediaQuery.of(context) .size .height * 0.20, width: MediaQuery.of(context) .size .width * 0.20, scale: 0.9, fit: BoxFit.contain, ), ], ), ), ), ], ), ), ), ) ], ), ), ], ), Padding( padding: EdgeInsets.symmetric(vertical: 16.0, horizontal: 15.0), child: Row( children: [ Expanded( child: InkWell( child: Container( height: MediaQuery.of(context).orientation == Orientation.portrait ? MediaQuery.of(context).size.height * 0.18 : MediaQuery.of(context).size.height * 0.30, width: MediaQuery.of(context).size.width * 0.50, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), gradient: LinearGradient( colors: [ Hexcolor("#45B7AE"), Hexcolor("#119FA9") ], ), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( 'assets/images/qr_code.png', width: MediaQuery.of(context).size.width * 0.26, height: MediaQuery.of(context) .orientation == Orientation.portrait ? MediaQuery.of(context).size.height * 0.14 : MediaQuery.of(context).size.height * 0.28, fit: BoxFit.contain, ) ], ), Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.start, children: [ InkWell( onTap: () { _scanQrAndGetPatient(context, model); }, child: Padding( padding: EdgeInsets.only(top: 8.0), child: Text( TranslationBase.of(context).scan, style: TextStyle( fontSize: MediaQuery.of(context) .orientation == Orientation.landscape ? SizeConfig.textMultiplier * 6.0 : SizeConfig.textMultiplier * 4.0, color: Colors.white, fontWeight: FontWeight.w400, ), ), ), ), Padding( padding: EdgeInsets.only(top: 0.0), child: Text( TranslationBase.of(context) .toAddPackageToQue, style: TextStyle( fontSize: MediaQuery.of(context) .orientation == Orientation.landscape ? SizeConfig.textMultiplier * 3.0 : SizeConfig.textMultiplier * 2.0, color: Colors.white, letterSpacing: 0.2, wordSpacing: 0.5, ), ), ), ], ) ], ), ), ), ) ], ), ), NetworkBaseView( baseViewModel: model, child: Padding( padding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 1.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Column( children: [ Text( TranslationBase.of(context).nearestDropOffs, style: TextStyle( fontSize: 21.0, fontWeight: FontWeight.w400, ), ), ], ), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ InkWell( child: Row( children: [ Text( TranslationBase.of(context).seeAll, style: TextStyle( fontSize: 14.5, color: Color(0xff42B6AD)), ), Icon( Icons.arrow_forward_ios, size: 15.0, color: Color(0xff42B6AD), ), ], ), onTap: () => Navigator.push( context, MaterialPageRoute( builder: (context) => OrdersListScreen()), ), ), ], ), ], ), ), ), NetworkBaseView( baseViewModel: model, child: Expanded( child: ListView.builder( shrinkWrap: true, scrollDirection: Axis.vertical, itemCount: model.orders == null ? 0 : model.orders.length < 3 ? model.orders.length : 3, itemBuilder: (BuildContext context, int index) { return Padding( padding: EdgeInsets.symmetric(horizontal: 12.2), child: InkWell( child: RoundedContainer( raduis: 25.0, height: MediaQuery.of(context).orientation == Orientation.portrait ? MediaQuery.of(context).size.height * 0.120 : MediaQuery.of(context).size.height * 0.209, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( flex: 1, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsets.only( left: 15.0, top: 14.0), child: Image.asset( 'assets/images/location.png', height: MediaQuery.of(context) .orientation == Orientation.portrait ? MediaQuery.of(context) .size .height * 0.06 : MediaQuery.of(context) .size .height * 0.11, width: MediaQuery.of(context) .orientation == Orientation.portrait ? MediaQuery.of(context) .size .width * 0.05 : MediaQuery.of(context) .size .width * 0.09, ), ) ], ), ), if (model.orders.length != 0) Expanded( flex: 5, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsets.only(top: 20.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, ), ), Expanded( child: Text( model.orders[index].orderID .toString(), style: TextStyle( fontSize: 15.0, fontWeight: FontWeight.w400, letterSpacing: 8.0), ), ), ], ), ), Padding( padding: EdgeInsets.all(8.0), child: CircleContainer( borderWidth: 0.9, child: Text( model.orders[index].distanceInKilometers .toString() + ' K.m\naway', style: TextStyle( color: Color(0xff42B6AD), fontWeight: FontWeight.w800, fontStyle: FontStyle.normal), ), ), ), ], ), ), onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => InformationPage(model.orders[index]))); }, ), ); }, ), ), ), ], ), ), ), ); } _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 var result = await BarcodeScanner.scan(); // if (result.rawContent == "") { List listOfParams = result.rawContent.split(','); ScanQrRequestModel _scanQrRequestModel = ScanQrRequestModel( deliveryOrderID: int.parse(listOfParams[0]), groupID: 0); String patientType = "1"; await model.insertOrder(_scanQrRequestModel); if (model.state == ViewState.ErrorLocal) { Utils.showErrorToast(model.error); } else { AppToast.showSuccessToast(message: "Order Added"); } } }