Untitled
unknown
plain_text
a year ago
12 kB
6
Indexable
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()
],
),
),
);
},
);
}
}
Editor is loading...
Leave a Comment