Untitled
import 'package:Buildeffective/src/model/dashboard_property_list_response.dart'; import 'package:Buildeffective/src/model/property_building_response.dart'; import 'package:Buildeffective/src/model/property_info_response.dart'; import 'package:Buildeffective/src/model/spaces_response.dart'; import 'package:Buildeffective/src/screens/product_aggregation_screen/product_aggregation_common_widgets/select_building_dropdown_widget.dart'; import 'package:Buildeffective/src/screens/product_aggregation_screen/product_aggregation_common_widgets/select_space_zone_widget.dart'; import 'package:Buildeffective/src/screens/product_aggregation_screen/product_aggregation_screens/component/category_product_screen.dart'; import 'package:Buildeffective/src/screens/product_aggregation_screen/product_aggregation_screens/component/product_space_widget.dart'; import 'package:Buildeffective/src/screens/product_aggregation_screen/product_aggregation_viewmodels/product_aggregation_viewmodel.dart'; import 'package:Buildeffective/src/screens/product_screen/product_viewmodels/product_screen_viewmodel.dart'; import 'package:Buildeffective/src/screens/space_property_list/space_viewmodel.dart'; import 'package:Buildeffective/src/screens/splash/splash_screen.dart'; import 'package:Buildeffective/src/ui_component/app_loader.dart'; import 'package:Buildeffective/src/ui_component/common_appbar.dart'; import 'package:Buildeffective/src/utils/comman_methods.dart'; import 'package:Buildeffective/src/utils/res_colors.dart'; import 'package:Buildeffective/src/utils/res_images.dart'; import 'package:Buildeffective/src/utils/text_style.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:get_it/get_it.dart'; import 'package:nb_utils/nb_utils.dart'; class ProductCategoryScreen extends StatefulWidget { final MyProperty currentPropertyData; final OwnProperty? ownProperty; const ProductCategoryScreen({Key? key, required this.currentPropertyData, this.ownProperty}) : super(key: key); @override State<ProductCategoryScreen> createState() => _ProductCategoryScreenState(); } class _ProductCategoryScreenState extends State<ProductCategoryScreen> with TickerProviderStateMixin { late SpaceViewModel spaceViewModel; late ProductAggregationViewModel productAggregationViewModel; late ProductScreenViewModel productScreenViewModel; late TabController _tabController; @override void initState() { super.initState(); init(); } void init() async { _tabController = TabController(length: 2, vsync: this); registerViewModels(); getData(); } @override void setState(fn) { if (mounted) super.setState(fn); } void getData({String? unitId}) async { if (spaceViewModel.spaceZoneListModel == null) { await spaceViewModel.getSpaceZoneList({"property_slug": widget.currentPropertyData.slug.validate()}); } spaceViewModel.getSpaceInfoListData(); productAggregationViewModel.showProductAggregationApiState = ApiState.running; String tempUnitId; if (spaceViewModel.spaceInfoList.validate().isEmpty && unitId.validate().isNotEmpty) { tempUnitId = unitId ?? widget.ownProperty!.firstUnitSlug.validate(); } else { PropertyBuildingDatum firstValue = spaceViewModel.spaceInfoList[0]; PropertyBuildingDatum? valueFromList = spaceViewModel.spaceInfoList.firstWhereOrNull((element) => element.buildingName == spaceViewModel.propertyType); var finalPropertyDatum = valueFromList ?? firstValue; tempUnitId = unitId ?? finalPropertyDatum.units!.first.slug.validate(); } String selectedSpaceZoneId = spaceViewModel.selectedSpaceZoneId.validate(); await Future.wait( [ productAggregationViewModel.showProductAggregationSpaceData(unitId: tempUnitId, spaceZoneId: selectedSpaceZoneId), productAggregationViewModel.showProductListFinishesListData(unitId: tempUnitId, spaceZoneId: selectedSpaceZoneId), productAggregationViewModel.showProductAggregationCategoryData(unitId: tempUnitId, spaceZoneId: selectedSpaceZoneId), ], ); productAggregationViewModel.showProductAggregationApiState = ApiState.success; spaceViewModel.isFullScreenLoader = false; } Future<void> registerViewModels() async { if (!GetIt.instance.isRegistered<SpaceViewModel>()) { spaceViewModel = SpaceViewModel(); RegisterInGetIt<SpaceViewModel>(spaceViewModel); } else { spaceViewModel = GetIt.instance<SpaceViewModel>(); } if (GetIt.instance.isRegistered<ProductAggregationViewModel>()) { productAggregationViewModel = GetIt.instance<ProductAggregationViewModel>(); } else { productAggregationViewModel = ProductAggregationViewModel(); RegisterInGetIt<ProductAggregationViewModel>(productAggregationViewModel); } if (GetIt.instance.isRegistered<ProductScreenViewModel>()) { productScreenViewModel = GetIt.instance<ProductScreenViewModel>(); } else { productScreenViewModel = ProductScreenViewModel(); RegisterInGetIt<ProductScreenViewModel>(productScreenViewModel); } } Widget buildBuildingWidget() { return SelectBuildingDropdownWidget( leftWidget: Text('Building', style: BETextStyles.LinkStyleWithWhiteColor), onBuildingSelect: (building) { getData(unitId: building.units!.first.slug.validate()); }, ); } Widget buildSpaceZoneWidget() { return SelectSpaceZoneWidget( onSpaceZoneSelect: (newSpaceZone) { getData(); }, productAggregationViewModel: productAggregationViewModel, handleLoader: true, ); } @override void dispose() { spaceViewModel.isFullScreenLoader = false; try { if (GetIt.instance.isRegistered<UnitSpacesFloorWise>(instanceName: "unit_space")) GetIt.instance.unregister<UnitSpacesFloorWise>(instanceName: "unit_space"); GetIt.instance.unregister<ProductAggregationViewModel>(); GetIt.instance.unregister<ProductScreenViewModel>(); } catch (e) {} super.dispose(); } // @override Widget build(BuildContext context) { return Observer( builder: (context) { bool loader = (spaceViewModel.isFullScreenLoader == true && (spaceViewModel.getSpaceListZoneApiState == ApiState.running || productAggregationViewModel.showProductAggregationApiState == ApiState.running || productAggregationViewModel.productHoldings == null)); return Scaffold( backgroundColor: loader ? BEColors.white : BEColors.darkBlue, appBar: AppAppBar( title: "Dashboard", needBackButton: true, fullName: "", titleWidget: productAggregationViewModel.isSearchVisible ? AppTextField( controller: productAggregationViewModel.searchCont, onChanged: (p0) async { productAggregationViewModel.getAreaSearchValue(p0); }, textFieldType: TextFieldType.NAME, onFieldSubmitted: (p0) { if (p0.validate().isEmpty && productAggregationViewModel.isSearchVisible) { productAggregationViewModel.searchCont.clear(); productAggregationViewModel.searchText = ""; } if (p0.isEmpty) { productAggregationViewModel.setSearchVisible(!productAggregationViewModel.isSearchVisible); } }, decoration: InputDecoration( border: InputBorder.none, hintText: "Type Here...", alignLabelWithHint: true, hintStyle: BETextStyles.TabStyleWithSecondGrayColor, enabledBorder: InputBorder.none, ), autoFocus: true, ) : Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text("Products", style: BETextStyles.H6StyleWithDarkBlueColor), 4.height, Text(widget.currentPropertyData.name.validate().capitalizeEachWord(), style: BETextStyles.InfoTextStylesWithSecondGrayColor), ], ), actions: [ IconButton( onPressed: () { if (productAggregationViewModel.isSearchVisible) { productAggregationViewModel.searchCont.clear(); productAggregationViewModel.searchText = ""; } productAggregationViewModel.setSearchVisible(!productAggregationViewModel.isSearchVisible); }, icon: Observer( builder: (context) { return SvgPicture.asset( productAggregationViewModel.isSearchVisible ? ResImages.ic_close : ResImages.ic_search_dashboard, color: Colors.black, ); }, ), ), ], ), body: AppLoader( isLoading: loader, child: Column( children: [ ColoredBox( color: BEColors.darkBlue, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ buildBuildingWidget(), buildSpaceZoneWidget(), ], ), ), Column( mainAxisSize: MainAxisSize.min, children: [ Theme( data: ThemeData(useMaterial3: true), child: ColoredBox( color: Colors.white, child: TabBar( indicatorWeight: 2, labelColor: BEColors.primaryColor, indicatorColor: BEColors.primaryColor, unselectedLabelColor: ResColors.spaceListingTabBarColor, controller: _tabController, dividerHeight: 2, dividerColor: Color(0XFFEBEDF0), indicatorSize: TabBarIndicatorSize.tab, tabAlignment: TabAlignment.fill, tabs: List<Widget>.from( ['By Spaces', 'By Categories'].map( (element) => Tab( child: Text( element, style: SplashScreen.isMobileDevice ? BETextStyles.LinkStyle : BETextStyles.BodyStyle, ), ), ), ), ), ), ), Observer( builder: (context) { return Ink( color: Colors.white, child: AppLoader( isLoading: productAggregationViewModel.showProductAggregationApiState == ApiState.running, child: TabBarView( controller: _tabController, children: [ ProductSpaceWidget(), CategoryProductScreen(), ], ), ), ).expand(); }, ), ], ).expand() ], ), ), ); }, ); } }
Leave a Comment