// ignore_for_file: unused_local_variable, unused_field, non_constant_identifier_names, depend_on_referenced_packages import 'package:ai_barcode_scanner/ai_barcode_scanner.dart'; import 'package:buttons_tabbar/buttons_tabbar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:form_field_validator/form_field_validator.dart'; import 'package:gozap_package/components/coloredcontainer.dart'; import 'package:gozap_package/components/icons/gozap_icons.dart'; import 'package:gozap_package/components/localization/app_translations.dart'; import 'package:gozap_package/components/quantity_input.dart'; import 'package:gozap_package/components/responsive.dart'; import 'package:gozap_package/components/themes/themes.dart'; import 'package:gozap_package/models/user/user_model.dart'; import 'package:gozap_package/views/log_in/log_in_view.dart'; import 'package:gozap_package/views/reports/asset_report.dart'; import 'package:gozap_package/views/reports/recharge_report.dart'; import 'package:gozap_package/views/reports/service_report.dart'; import 'package:gozap_package/views/reports/swap_report.dart'; import 'package:provider/provider.dart'; import 'package:toast/toast.dart'; // import model import '/models/dashboard/dashboard_model.dart'; // import controller import '/controllers/dashboard/dashboard_controller.dart'; enum Menu { itemOne, itemTwo, itemThree, itemFour } class DashboardView extends StatefulWidget { const DashboardView({super.key}); @override State createState() => _DashboardViewState(); } class _DashboardViewState extends State with AutomaticKeepAliveClientMixin { @override bool get wantKeepAlive => true; final _globalOEDashboardSwapKey = GlobalKey(); final _globalOEDashboardRechargeKey = GlobalKey(); final _globalOEDashboardServiceKey = GlobalKey(); final _globalOEDashboardAssetKey = GlobalKey(); int SwapRechargeCount = 1; DateTime? startDate = DateTime.now(); DateTime? endDate = DateTime.now(); int selectedIndex = 0; DashboardController viewController = DashboardController(); void onItemTapped(int index) { setState(() { selectedIndex = index; }); } @override Widget build(BuildContext context) { super.build(context); return ChangeNotifierProvider( create: (context) => DashboardModel.instance(context), child: Consumer( builder: (context, viewModel, child) { if (viewModel.status == DashboardModelStatus.Loading) { return const Center( child: CircularProgressIndicator.adaptive(), ); } else if (viewModel.adminModule == null) { return const Center( child: Text("Somthing went wrong"), ); } else if (!viewModel.adminModule!.User.IsAdmin) { return const Center(child: Text("You are not a admin")); } else { var topBarWidget = Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SizedBox( child: Card( elevation: 10, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), ), child: ClipRRect( borderRadius: const BorderRadius.all(Radius.circular(15)), child: Image.asset( 'assets/images/logos/gozap_small_color_logo.png', width: 50, fit: BoxFit.cover, package: "gozap_package", ), ), ), ), Row( children: const [], ), SizedBox( width: 50, child: Card( elevation: 10, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), ), child: ClipRRect( borderRadius: const BorderRadius.all(Radius.circular(15)), child: PopupMenuButton( onSelected: ((Menu item) { if (item == Menu.itemFour) { Provider.of(context, listen: false) .remove( context, LogInView( nextScreen: const DashboardView())); } }), position: PopupMenuPosition.under, padding: const EdgeInsets.all(0), icon: Image.asset( 'assets/images/personal_info_profile.png', width: 100, fit: BoxFit.cover, package: "gozap_package", ), itemBuilder: (BuildContext context) => >[ const PopupMenuItem( value: Menu.itemOne, child: Text('Profile'), ), const PopupMenuItem( value: Menu.itemTwo, child: Text('Swap Report'), ), const PopupMenuItem( value: Menu.itemThree, child: Text('Recharge Report'), ), const PopupMenuItem( value: Menu.itemFour, child: Text('Logout'), ), ]), ), ), ), ], ); var totalSwapCountCardWidget = ColoredContainer( child: Row( children: [ const Padding( padding: EdgeInsets.all(5), child: Icon( GoZAPPIcon.admin_total_swaps, ), ), Expanded( child: Column( children: [ const Text("Total Swap's"), Text( "${viewModel.adminModule!.SwapHistoryMeta.TotalCount}", style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w700), ), ], ), ), ], )); var freeSwapCountCardWidget = ColoredContainer( containerColor: AppTheme.organeColor.withOpacity(0.2), child: Row( children: [ const Padding( padding: EdgeInsets.all(5), child: Icon(GoZAPPIcon.admin_free_swaps), ), Expanded( child: Column( children: [ const Text("Free Swap's"), Text( "${viewModel.adminModule!.SwapHistoryMeta.FreeSwapCount}", style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w700), ), ], ), ), ], )); var paidSwapCountWidget = ColoredContainer( containerColor: AppTheme.pinkColor.withOpacity(0.2), child: Row( children: [ const Padding( padding: EdgeInsets.all(5), child: Icon(GoZAPPIcon.admin_paid_swaps), ), Expanded( child: Column( children: [ const Text("Paid Swap's"), Text( "${viewModel.adminModule!.SwapHistoryMeta.PaidSwapCount}", style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w700), ), ], ), ), ], )); var rechargeCountWidget = ColoredContainer( containerColor: AppTheme.brownColor.withOpacity(0.2), child: Row( children: [ const Padding( padding: EdgeInsets.all(5), child: Icon(GoZAPPIcon.admin_recharge_swaps), ), Expanded( child: Column( children: [ const Text("Recharge"), Text( "${viewModel.adminModule!.RechargeHistoryMeta.TotalRechargeCount}", style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w700), ), ], ), ), ], )); var serviceCountWidget = ColoredContainer( containerColor: AppTheme.cyanColor.withOpacity(0.2), child: Row( children: [ const Padding( padding: EdgeInsets.all(5), child: Icon(GoZAPPIcon.service), ), Expanded( child: Column( children: [ const Text("Service"), Text( "${viewModel.adminModule!.ServiceHistoryMeta.TotalCount}", style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w700)), Text( "${viewModel.adminModule!.ServiceHistoryMeta.InCompletedCount} / ${viewModel.adminModule!.ServiceHistoryMeta.ServicedCount}", style: const TextStyle( fontSize: 16, fontWeight: FontWeight.w700), ), ], ), ), ], )); var assetCountWidget = ColoredContainer( containerColor: AppTheme.yellowColor.withOpacity(0.2), child: Row( children: [ const Padding( padding: EdgeInsets.all(5), child: Icon(GoZAPPIcon.asset), ), Expanded( child: Column( children: [ const Text("Asset"), Text( "${viewModel.adminModule!.AssetMeta.TotalAssetCount}", style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w700), ), ], ), ), ], )); var countCardsWidget = Wrap( alignment: WrapAlignment.center, runAlignment: WrapAlignment.center, crossAxisAlignment: WrapCrossAlignment.center, runSpacing: 20, spacing: 20, children: [ totalSwapCountCardWidget, freeSwapCountCardWidget, paidSwapCountWidget, rechargeCountWidget, serviceCountWidget, assetCountWidget ], ); var swapRechargeCountWidget = Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Text( "Swaps", style: TextStyle(fontSize: 18, fontWeight: FontWeight.w700), ), QuantityInput( readOnly: true, value: SwapRechargeCount, onChanged: (value) => setState(() => SwapRechargeCount = int.parse( value.replaceAll(',', '').replaceAll('.', '')))), ], ); var swapReferTextWidget = const Padding( padding: EdgeInsets.all(8.0), child: Text("Refer 1 member & get 3 Swaps free"), ); var swapReferAndPayButtonWidget = Row( children: [ Expanded( child: OutlinedButton( onPressed: () {}, child: const Text( "Refer", style: TextStyle( fontSize: 16, fontWeight: FontWeight.w500), )), ), const SizedBox( width: 10, ), Expanded( child: ElevatedButton( onPressed: () {}, child: const Text( "Pay", style: TextStyle( fontSize: 16, fontWeight: FontWeight.w500), )), ), ], ); var swapFormWidget = Padding( padding: const EdgeInsets.all(10), child: FormBuilder( key: _globalOEDashboardSwapKey, onChanged: () async { _globalOEDashboardSwapKey.currentState!.save(); await Future.delayed(const Duration(milliseconds: 500)) .then((value) { try { String returenBatteryID = _globalOEDashboardSwapKey .currentState?.value["ReturnBatteryID"]; if (returenBatteryID.isNotEmpty) { viewModel.checkAssetForReturnBattery( context, returenBatteryID); } String swapBatteryID = _globalOEDashboardSwapKey .currentState?.value["SwapBatteryID"]; if (swapBatteryID.isNotEmpty) { viewModel.checkAssetForSwapBattery( context, swapBatteryID); } } catch (e) { // print(e); } }); }, child: Column( children: [ //rider ID FormBuilderTextField( readOnly: true, onTap: (() async { await Navigator.push( context, MaterialPageRoute( builder: (context) => AiBarcodeScanner( onScan: (String value) { _globalOEDashboardSwapKey .currentState!.fields["RiderID"]! .didChange(value); }, ), )); }), name: "RiderID", inputFormatters: const [], validator: MultiValidator([ RequiredValidator( errorText: AppTranslations.of(context)! .text("key_field_requird")), ]), keyboardType: TextInputType.text, textInputAction: TextInputAction.done, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), borderSide: const BorderSide(color: Colors.red, width: 0.0), ), fillColor: Colors.white, filled: true, prefixIcon: const Icon( GoZAPPIcon.rider_id, color: Colors.black, size: 23.0, ), hintText: AppTranslations.of(context)! .text("key_field_RiderID"), ), ), const SizedBox( height: 20, ), //Return Battery FormBuilderTextField( readOnly: true, onTap: (() async { await Navigator.push( context, MaterialPageRoute( builder: (context) => AiBarcodeScanner( onScan: (String value) { _globalOEDashboardSwapKey .currentState!.fields["ReturnBatteryID"]! .didChange(value); }, ), )); }), name: "ReturnBatteryID", validator: MultiValidator([ RequiredValidator( errorText: AppTranslations.of(context)! .text("key_field_requird")), ]), keyboardType: TextInputType.text, textInputAction: TextInputAction.done, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), borderSide: const BorderSide(color: Colors.red, width: 0.0), ), fillColor: Colors.white, filled: true, prefixIcon: const Icon( GoZAPPIcon.returning_battery_id, color: Colors.black, size: 23.0, ), hintText: AppTranslations.of(context)! .text("key_field_ReturnBatteryID"), ), ), Visibility( visible: viewModel.swapReturnBatteryErrorText != "", child: Text( viewModel.swapReturnBatteryErrorText, style: TextStyle(color: AppTheme.redColor), ), ), const SizedBox( height: 20, ), //Return Battery FormBuilderTextField( readOnly: true, onTap: (() async { await Navigator.push( context, MaterialPageRoute( builder: (context) => AiBarcodeScanner( onScan: (String value) { _globalOEDashboardSwapKey .currentState!.fields["SwapBatteryID"]! .didChange(value); }, ), )); }), name: "SwapBatteryID", validator: MultiValidator([ RequiredValidator( errorText: AppTranslations.of(context)! .text("key_field_requird")), ]), keyboardType: TextInputType.text, textInputAction: TextInputAction.done, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), borderSide: const BorderSide(color: Colors.red, width: 0.0), ), fillColor: Colors.white, filled: true, prefixIcon: const Icon( GoZAPPIcon.swap_battery_id, color: Colors.black, size: 23.0, ), hintText: AppTranslations.of(context)! .text("key_field_SwapBatteryID"), ), ), Visibility( visible: viewModel.swapBatteryErrorText != "", child: Text( viewModel.swapBatteryErrorText, style: TextStyle(color: AppTheme.redColor), ), ), const SizedBox( height: 20, ), //Login Button SizedBox( width: double.infinity, child: ElevatedButton( style: ButtonStyle( shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), ), ), onPressed: () { if (_globalOEDashboardSwapKey .currentState?.value["SwapBatteryID"] != null && _globalOEDashboardSwapKey.currentState ?.value["ReturnBatteryID"] != null && _globalOEDashboardSwapKey .currentState?.value["RiderID"] != null) { viewModel.swap( context, data: _globalOEDashboardSwapKey .currentState?.value, ); } else { Toast.show( AppTranslations.of(context)! .text("key_field_requird"), duration: Toast.lengthLong, gravity: Toast.bottom); } }, child: Padding( padding: const EdgeInsets.all(10), child: Text( AppTranslations.of(context)! .text("key_btn_submit"), style: const TextStyle(fontSize: 16), ), )), ), ], ), ), ); var rechargeFormWidget = Padding( padding: const EdgeInsets.all(10), child: FormBuilder( key: _globalOEDashboardRechargeKey, onChanged: () { _globalOEDashboardRechargeKey.currentState!.save(); }, child: Column( children: [ //rider ID FormBuilderTextField( readOnly: true, onTap: (() async { await Navigator.push( context, MaterialPageRoute( builder: (context) => AiBarcodeScanner( onScan: (String value) { _globalOEDashboardRechargeKey .currentState!.fields["RechargeRiderID"]! .didChange(value); }, ), )); }), name: "RechargeRiderID", inputFormatters: const [], validator: MultiValidator([ RequiredValidator( errorText: AppTranslations.of(context)! .text("key_field_requird")), ]), keyboardType: TextInputType.text, textInputAction: TextInputAction.done, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), borderSide: const BorderSide(color: Colors.red, width: 0.0), ), fillColor: Colors.white, filled: true, prefixIcon: const Icon( GoZAPPIcon.rider_id, color: Colors.black, size: 23.0, ), hintText: AppTranslations.of(context)! .text("key_field_RiderID"), ), ), const SizedBox( height: 20, ), swapRechargeCountWidget, const SizedBox( height: 20, ), FormBuilderDropdown( items: const [ DropdownMenuItem( value: "1", child: Text("Cash"), ), DropdownMenuItem( value: "2", child: Text("UPI"), ), DropdownMenuItem( value: "3", child: Text("Card"), ), ], onTap: (() async {}), name: "PaymentType", validator: MultiValidator([ RequiredValidator( errorText: AppTranslations.of(context)! .text("key_field_requird")), ]), decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), borderSide: const BorderSide(color: Colors.red, width: 0.0), ), fillColor: Colors.white, filled: true, prefixIcon: const Icon( GoZAPPIcon.payment_type, color: Colors.black, size: 23.0, ), hintText: AppTranslations.of(context)! .text("key_field_PaymentType"), ), ), const SizedBox( height: 20, ), Visibility( visible: false, child: FormBuilderTextField(name: "SwapRechargeCount")), //Recharge Submit Button SizedBox( width: double.infinity, child: ElevatedButton( style: ButtonStyle( shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), ), ), onPressed: () { if (_globalOEDashboardRechargeKey.currentState! .fields["RechargeRiderID"] != null && _globalOEDashboardRechargeKey .currentState?.value["PaymentType"] != null) { viewModel.recharge(context, data: _globalOEDashboardRechargeKey .currentState?.value, SwapRechargeCount: SwapRechargeCount); } else { Toast.show( AppTranslations.of(context)! .text("key_field_requird"), duration: Toast.lengthLong, gravity: Toast.bottom); } }, child: Padding( padding: const EdgeInsets.all(10), child: Text( AppTranslations.of(context)! .text("key_btn_submit"), style: const TextStyle(fontSize: 16), ), )), ), ], ), ), ); var serviceFormWidget = Padding( padding: const EdgeInsets.all(10), child: FormBuilder( key: _globalOEDashboardServiceKey, onChanged: () { _globalOEDashboardServiceKey.currentState!.save(); }, child: Column( children: [ //rider ID FormBuilderTextField( readOnly: true, onTap: (() async { await Navigator.push( context, MaterialPageRoute( builder: (context) => AiBarcodeScanner( onScan: (String value) { _globalOEDashboardServiceKey .currentState!.fields["ServiceAssetID"]! .didChange(value); }, ), )); }), name: "ServiceAssetID", inputFormatters: const [], validator: MultiValidator([ RequiredValidator( errorText: AppTranslations.of(context)! .text("key_field_requird")), ]), keyboardType: TextInputType.text, textInputAction: TextInputAction.done, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), borderSide: const BorderSide(color: Colors.red, width: 0.0), ), fillColor: Colors.white, filled: true, prefixIcon: const Icon( GoZAPPIcon.asset_id, color: Colors.black, size: 23.0, ), hintText: AppTranslations.of(context)! .text("key_field_AssetID"), ), ), const SizedBox( height: 20, ), //Login Button SizedBox( width: double.infinity, child: ElevatedButton( style: ButtonStyle( shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), ), ), onPressed: () { if (_globalOEDashboardServiceKey .currentState?.value["ServiceAssetID"] != null) { viewModel.service( context, data: _globalOEDashboardServiceKey .currentState?.value, ); } else { Toast.show( AppTranslations.of(context)! .text("key_field_requird"), duration: Toast.lengthLong, gravity: Toast.bottom); } }, child: Padding( padding: const EdgeInsets.all(10), child: Text( AppTranslations.of(context)! .text("key_btn_submit"), style: const TextStyle(fontSize: 16), ), )), ), ], ), ), ); var assetsFormWidget = Padding( padding: const EdgeInsets.all(10), child: FormBuilder( key: _globalOEDashboardAssetKey, onChanged: () { _globalOEDashboardAssetKey.currentState!.save(); }, child: Column( children: [ //rider ID FormBuilderTextField( readOnly: true, onTap: (() async { await Navigator.push( context, MaterialPageRoute( builder: (context) => AiBarcodeScanner( onScan: (String value) { _globalOEDashboardAssetKey .currentState!.fields["AssetID"]! .didChange(value); }, ), )); }), name: "AssetID", inputFormatters: const [], validator: MultiValidator([ RequiredValidator( errorText: AppTranslations.of(context)! .text("key_field_requird")), ]), keyboardType: TextInputType.text, textInputAction: TextInputAction.done, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), borderSide: const BorderSide(color: Colors.red, width: 0.0), ), fillColor: Colors.white, filled: true, prefixIcon: const Icon( GoZAPPIcon.asset_id, color: Colors.black, size: 23.0, ), hintText: AppTranslations.of(context)! .text("key_field_AssetID"), ), ), const SizedBox( height: 20, ), FormBuilderTextField( name: "AssetName", inputFormatters: const [], validator: MultiValidator([ RequiredValidator( errorText: AppTranslations.of(context)! .text("key_field_requird")), ]), keyboardType: TextInputType.text, textInputAction: TextInputAction.done, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), borderSide: const BorderSide(color: Colors.red, width: 0.0), ), fillColor: Colors.white, filled: true, prefixIcon: const Icon( GoZAPPIcon.asset, color: Colors.black, size: 23.0, ), hintText: AppTranslations.of(context)! .text("key_field_AssetName"), ), ), const SizedBox( height: 20, ), FormBuilderDropdown( items: const [ DropdownMenuItem( value: "1", child: Text("Battery"), ), DropdownMenuItem( value: "2", child: Text("Vehicle"), ), ], onTap: (() async {}), name: "AssetCategoryID", validator: MultiValidator([ RequiredValidator( errorText: AppTranslations.of(context)! .text("key_field_requird")), ]), decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(20.0), borderSide: const BorderSide(color: Colors.red, width: 0.0), ), fillColor: Colors.white, filled: true, prefixIcon: const Icon( GoZAPPIcon.asset_category_id, color: Colors.black, size: 23.0, ), hintText: AppTranslations.of(context)! .text("key_field_AssetCategory"), ), ), const SizedBox( height: 20, ), //Login Button SizedBox( width: double.infinity, child: ElevatedButton( style: ButtonStyle( shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), ), ), onPressed: () { if (_globalOEDashboardAssetKey .currentState?.value["AssetID"] != null && _globalOEDashboardAssetKey .currentState?.value["AssetName"] != null && _globalOEDashboardAssetKey.currentState ?.value["AssetCategoryID"] != null) { viewModel.asset( context, data: _globalOEDashboardAssetKey .currentState?.value, ); } else { Toast.show( AppTranslations.of(context)! .text("key_field_requird"), duration: Toast.lengthLong, gravity: Toast.bottom); } }, child: Padding( padding: const EdgeInsets.all(10), child: Text( AppTranslations.of(context)! .text("key_btn_submit"), style: const TextStyle(fontSize: 16), ), )), ), ], ), ), ); var formTabWidget = DefaultTabController( length: 4, child: Column( children: [ ButtonsTabBar( backgroundColor: AppTheme.secondaryColor, unselectedBackgroundColor: AppTheme.primaryColor, labelStyle: TextStyle(color: AppTheme.whiteColor), tabs: [ Tab( child: Text( 'Swap', style: TextStyle(color: AppTheme.whiteColor), )), Tab( child: Text( 'Recharge', style: TextStyle(color: AppTheme.whiteColor), )), Tab( child: Text( 'Service', style: TextStyle(color: AppTheme.whiteColor), )), Tab( child: Text( 'Assets', style: TextStyle(color: AppTheme.whiteColor), )), ], ), Expanded( child: TabBarView( children: [ swapFormWidget, rechargeFormWidget, serviceFormWidget, assetsFormWidget, ], ), ), ], )); var reportTabWidget = DefaultTabController( length: 4, child: Column( children: [ ButtonsTabBar( backgroundColor: AppTheme.secondaryColor, unselectedBackgroundColor: AppTheme.primaryColor, labelStyle: TextStyle(color: AppTheme.whiteColor), tabs: [ Tab( child: Text( 'Swap', style: TextStyle(color: AppTheme.whiteColor), )), Tab( child: Text( 'Recharge', style: TextStyle(color: AppTheme.whiteColor), )), Tab( child: Text( 'Service', style: TextStyle(color: AppTheme.whiteColor), )), Tab( child: Text( 'Assets', style: TextStyle(color: AppTheme.whiteColor), )), ], ), Expanded( child: TabBarView( children: [ SwapReportWidget( SwapHistoryList: viewModel .adminModule!.SwapHistoryMeta.SwapHistoryList, ), RechargeReportWidget( rechargeHistoryModuleList: viewModel.adminModule! .RechargeHistoryMeta.RechargeHistoryList), ServiceReportWidget( serviceHistoryModuleList: viewModel.adminModule! .ServiceHistoryMeta.ServiceHistoryList), AssetReportWidget( assetModuleList: viewModel.adminModule!.AssetMeta.AssetList), ], ), ), ], ), ); final widgetOptions = [ countCardsWidget, formTabWidget, reportTabWidget ]; final widgetTitle = ["Dashboard", "Entry", "Report"]; return Scaffold( bottomNavigationBar: !ResponsiveWidget.isDesktop(context) ? BottomNavigationBar( items: const [ BottomNavigationBarItem( icon: Icon( Icons.dashboard, ), label: "Dashboard"), BottomNavigationBarItem( icon: Icon( Icons.edit_note, ), label: "Entry"), BottomNavigationBarItem( icon: Icon( Icons.summarize, ), label: "Report"), ], currentIndex: selectedIndex, fixedColor: AppTheme.primaryColor, onTap: onItemTapped, selectedLabelStyle: const TextStyle(color: Colors.red, fontSize: 20), ) : null, body: SafeArea( child: SizedBox( width: double.infinity, child: SingleChildScrollView( scrollDirection: Axis.vertical, child: Padding( padding: const EdgeInsets.all(15), child: ResponsiveWidget( mobileBody: Column( children: [ topBarWidget, Padding( padding: const EdgeInsets.all(10), child: Text( widgetTitle.elementAt(selectedIndex), style: TextStyle( fontSize: 24, color: AppTheme.primaryColor), ), ), SizedBox( height: ResponsiveWidget.fullHeight(context) * .7, child: widgetOptions.elementAt(selectedIndex)), ], ), desktopBody: Column(children: [ topBarWidget, Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( width: MediaQuery.of(context).size.width * .2, height: MediaQuery.of(context).size.height, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.all(10), child: Text( "Dashbaord", style: TextStyle( fontSize: 24, color: AppTheme.primaryColor), ), ), countCardsWidget, ], )), SizedBox( width: MediaQuery.of(context).size.width * .3, height: MediaQuery.of(context).size.height, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // //login form Padding( padding: const EdgeInsets.all(10), child: Text( "Entry", style: TextStyle( fontSize: 24, color: AppTheme.primaryColor), ), ), Expanded(child: formTabWidget), ], )), SizedBox( width: MediaQuery.of(context).size.width * .46, height: MediaQuery.of(context).size.height, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ //login form Padding( padding: const EdgeInsets.all(10), child: Text( "Report", style: TextStyle( fontSize: 24, color: AppTheme.primaryColor), ), ), Expanded(child: reportTabWidget), ], )), ], ) ]), ), ), ), )), ); } }, ), ); } }