Untitled

 avatar
user_8529798
plain_text
14 days ago
6.5 kB
0
Indexable
import 'package:Buildeffective/src/model/spaces_response.dart';
import 'package:Buildeffective/src/screens/product_aggregation_screen/product_aggregation_common_widgets/expansion_widget_with_title_count.dart';
import 'package:Buildeffective/src/screens/product_aggregation_screen/product_aggregation_screens/product_aggregation_list_screen.dart';
import 'package:Buildeffective/src/screens/product_aggregation_screen/product_aggregation_viewmodels/product_aggregation_viewmodel.dart';
import 'package:Buildeffective/src/ui_component/sticky_header/widget.dart';
import 'package:Buildeffective/src/utils/comman_export.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get_it/get_it.dart';
import 'package:nb_utils/nb_utils.dart';

class ProductSpaceWidget extends StatefulWidget {
  const ProductSpaceWidget({Key? key}) : super(key: key);

  @override
  State<ProductSpaceWidget> createState() => _ProductSpaceWidgetState();
}

class _ProductSpaceWidgetState extends State<ProductSpaceWidget> {
  late ProductAggregationViewModel productAggregationViewModel;
  final ScrollController scrollController = ScrollController();

  @override
  void initState() {
    super.initState();
    init();
  }

  void init() async {
    productAggregationViewModel = GetIt.instance<ProductAggregationViewModel>();
  }

  @override
  void setState(fn) {
    if (mounted) super.setState(fn);
  }

  void onHeadingTap({required UnitSpace unitData}) {
    ProductAggregationListScreen(
      productListTitlePojo: ProductListTitlePojo(
        title: unitData.finalName.validate(),
        subTitle: "",
        slug: unitData.slug.validate(),
        isProductAggregationBySpace: true,
      ),
      isFromSpace: true,
    ).launch(context);
  }

  void onHeadingChildTap({required UnitSpace unitData, required UnitSpace unitChildData}) {
    ProductAggregationListScreen(
      productListTitlePojo: ProductListTitlePojo(
        title: unitChildData.aliasName.validate(),
        subTitle: unitData.aliasName.validate(),
        slug: unitChildData.slug!,
        isProductAggregationBySpace: true,
      ),
      isFromSpace: true,
    ).launch(context);
  }

  @override
  Widget build(BuildContext context) {
    if (productAggregationViewModel.getProductAggregationSpaceList.isEmpty)
      return NoDataWidget(
        title: "No Products available\n to add in this space",
        titleTextStyle: BETextStyles.BodyStyleWithDarkGrey3Color,
        imageWidget: SvgPicture.asset(ResImages.ic_empty_product_icon, color: BEColors.darkGrey, height: 58, width: 58),
      );
    return Observer(
      builder: (context) {
        String text = productAggregationViewModel.searchText.validate();
        if (productAggregationViewModel.getSearchResult(list: productAggregationViewModel.getProductAggregationSpaceList).isEmpty) {
          return NoDataWidget(
            title: "No Search Results Found",
            titleTextStyle: BETextStyles.BodyStyleWithDarkGrey3Color,
            imageWidget: SvgPicture.asset(ResImages.ic_empty_product_icon, color: BEColors.darkGrey, height: 58, width: 58),
          );
        }
        return ListView.separated(
          controller: scrollController,
          itemCount: productAggregationViewModel.getSearchResult(list: productAggregationViewModel.getProductAggregationSpaceList).length,
          itemBuilder: (context, index) {
            UnitSpace unitData = productAggregationViewModel.getSearchResult(list: productAggregationViewModel.getProductAggregationSpaceList)[index];
            return StickyHeaderBuilder(
              controller: scrollController,
              overlapHeaders: false,
              builder: (BuildContext context, double stuckAmount) {
                return ColoredBox(
                  color: Colors.white,
                  child: ExpansionWidgetWithTitleCount(
                    isSelected: false,
                    leftPadding: 0,
                    hideArrowButton: true,
                    hideArrowButtonSpace: false,
                    onTap: () {
                      onHeadingTap(unitData: unitData);
                    },
                    verticalPadding: 8,
                    titleTextStyle: BETextStyles.TitleStyle600With14DarkBlueColor,
                    title: unitData.finalName.validate(),
                    count: unitData.productsCount.validate() == 0 ? null : unitData.productsCount.validate().toString(),
                  ),
                );
              },
              content: unitData.childUnitSpaces.validate().isNotEmpty
                  ? Column(
                      children: [
                        Divider(height: 0),
                        ListView.separated(
                          itemCount: unitData.childUnitSpaces!.length,
                          shrinkWrap: true,
                          physics: NeverScrollableScrollPhysics(),
                          itemBuilder: (context, index) {
                            UnitSpace childUnitData = unitData.childUnitSpaces![index];

                            return ColoredBox(
                              color: Colors.white,
                              child: ExpansionWidgetWithTitleCount(
                                isSelected: false,
                                leftPadding: 26,
                                hideArrowButton: true,
                                hideArrowButtonSpace: false,
                                onTap: () {
                                  onHeadingChildTap(unitData: unitData, unitChildData: childUnitData);
                                },
                                verticalPadding: 10,
                                title: childUnitData.finalName.validate(),
                                count: childUnitData.productsCount.validate() == 0 ? null : childUnitData.productsCount.validate().toString(),
                              ),
                            );
                          },
                          separatorBuilder: (BuildContext context, int index) {
                            return Divider(height: 0);
                          },
                        )
                      ],
                    )
                  : Offstage(),
            );
          },
          separatorBuilder: (BuildContext context, int index) {
            return Divider(height: 0);
          },
        );
      },
    );
  }
}
Leave a Comment