Untitled

 avatar
unknown
plain_text
4 months ago
13 kB
3
Indexable
import 'dart:async';
import 'dart:io';
import 'dart:math';

import 'package:Buildeffective/src/model/dashboard_property_list_response.dart';
import 'package:Buildeffective/src/model/download_pdf_model.dart';
import 'package:Buildeffective/src/model/property_info_response.dart';
import 'package:Buildeffective/src/model/result_response.dart';
import 'package:Buildeffective/src/repository/create_property_repository.dart';
import 'package:Buildeffective/src/screens/dashboard/dashboard_screen.dart';
import 'package:Buildeffective/src/screens/homeguide_screen/component/header_component.dart';
import 'package:Buildeffective/src/screens/homeguide_screen/component/space_info_component.dart';
import 'package:Buildeffective/src/screens/homeguide_screen/component/space_option_component.dart';
import 'package:Buildeffective/src/screens/homeguide_screen/store/home_guide_viewmodel.dart';
import 'package:Buildeffective/src/screens/homeguide_screen/store/property_attribute_store.dart';
import 'package:Buildeffective/src/screens/homeguide_screen/utils/download_service.dart';
import 'package:Buildeffective/src/screens/homeguide_screen/utils/notification_service.dart';
import 'package:Buildeffective/src/screens/homeguide_screen/utils/pdf_viewer.dart';
import 'package:Buildeffective/src/screens/space_feature_summary_new/view_model/space_summary_and_feature_view_model.dart';
import 'package:Buildeffective/src/screens/space_property_list/space_summary_viewmodel.dart';
import 'package:Buildeffective/src/screens/space_property_list/space_viewmodel.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_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';

PropertyAttributeStore propertyAttributeStore = PropertyAttributeStore();
HomeGuideViewModel homeGuideViewModel = HomeGuideViewModel();
SpaceSummaryAndFeatureViewModel spaceSummaryAndFeatureViewModel = SpaceSummaryAndFeatureViewModel();
SpaceViewModel spaceViewModel = SpaceViewModel();
SpaceSummaryViewModel spaceSummaryViewModel = SpaceSummaryViewModel();

class SpaceDashboardScreen extends StatefulWidget {
  static const String route = "home_guide_space";

  final bool? isTablet;
  final bool? isFromDynamicLink;

  final OwnProperty? ownProperty;
  final String? propertySlug;

  const SpaceDashboardScreen({Key? key, this.ownProperty, this.propertySlug, this.isTablet, this.isFromDynamicLink = false}) : super(key: key);

  @override
  State<SpaceDashboardScreen> createState() => _SpaceDashboardScreenState();
}

class _SpaceDashboardScreenState extends State<SpaceDashboardScreen> {
  Future<PropertyBuildingInfoResponse?>? future;

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

  void init({bool? onlyLoad}) async {
    log("widget.propertySlug" + " ======> " + "${widget.propertySlug}");

    if (onlyLoad.validate()) {
      homeGuideViewModel.getSpaceInfoListData(propertySlug: widget.propertySlug ?? widget.ownProperty!.slug.validate());
      future = getAllPropertyInfo(widget.propertySlug ?? widget.ownProperty!.slug.validate());
      return;
    }
    log("after upload image" + " ======> ");

    RegisterInGetIt<HomeGuideViewModel>(homeGuideViewModel, name: "homeGuideViewModel");
    RegisterInGetIt<SpaceSummaryAndFeatureViewModel>(spaceSummaryAndFeatureViewModel, name: "spaceSummaryAndFeatureViewModel");

    homeGuideViewModel.getAllData();
    homeGuideViewModel.getSpaceInfoListData(propertySlug: widget.propertySlug ?? widget.ownProperty!.slug.validate());
    future = getAllPropertyInfo(widget.propertySlug ?? widget.ownProperty!.slug.validate());
  }

  Future<PropertyBuildingInfoResponse?> getAllPropertyInfo(String slug) async {
    log("my slig" + " ======> " + "${slug}");

    ResponseResult<PropertyBuildingInfoResponse, String> res = await CreatePropertyRepository().getPropertyAllInfo('$slug');
    homeGuideViewModel.uploadedImage = "";
    homeGuideViewModel.isChantEnable = res.data!.myProperty!.isChatEnable.validate();
    if (res.data!.myProperty!.photos != null) {
      homeGuideViewModel.uploadedImage = res.data!.myProperty!.photos!.firstWhere((element) => element.isPrimary == true).originalUrl.validate();
    }
    return res.data;
  }

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

  @override
  void dispose() {
    if (GetIt.instance.isRegistered<SpaceViewModel>()) {
      GetIt.instance.unregister<SpaceViewModel>();
    }
    if (GetIt.instance.isRegistered<SpaceSummaryViewModel>(instanceName: "spaceSummaryViewModel")) {
      GetIt.instance.unregister<SpaceSummaryViewModel>(instanceName: "spaceSummaryViewModel");
    }

    homeGuideViewModel.uploadedImage = "";

    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: [
          // Main content
          Observer(
            builder: (context) {
              return FutureBuilder<PropertyBuildingInfoResponse?>(
                future: future,
                builder: (context, snap) {
                  if (snap.hasError) {
                    finish(context);
                  }
                  if (snap.hasData) {
                    MyProperty data = snap.data!.myProperty!;

                    if (data.photos == null) {
                      setStatusBarColor(Colors.transparent, statusBarIconBrightness: Brightness.light);
                    }

                    return Stack(
                      children: [
                        AnimatedScrollView(
                          listAnimationType: ListAnimationType.None,
                          onSwipeRefresh: () async {
                            init();
                            return await 2.seconds.delay;
                          },
                          padding: EdgeInsets.only(bottom: 20),
                          children: [
                            HeaderComponent(
                              ownProperty: data,
                              isTablet: widget.isTablet,
                            ),
                            8.height,
                            SpaceInfoComponent(ownProperty: data, isTablet: widget.isTablet),
                            16.height,
                            Divider(indent: 16, endIndent: 16, height: 0),
                            15.height,
                            SpaceOptionComponent(
                              isTablet: widget.isTablet.validate(),
                              onMessageLoad: () {
                                init(onlyLoad: true);
                              },
                              propertySlug: data.slug.validate(),
                              propertId: data.id.validate().toString(),
                              propertyName: data.name,
                            ),
                          ],
                        ),
                        Observer(builder: (context) {
                          return Positioned(
                            top: 0,
                            left: 0,
                            right: 0,
                            child: AppAppBar(
                              needBackButton: true,
                              backgroundColor: Color.fromRGBO(0, 0, 0, 0.1),
                              leadingColor: BEColors.white,
                              onLeadingPressed: () {
                                if (widget.isFromDynamicLink == true) {
                                  Navigator.of(context).pushReplacementNamed(DashBoardScreen.route);
                                } else {
                                  finish(context);
                                }
                              },
                              actions: [
                                PopupMenuButton(
                                  shape: ContinuousRectangleBorder(
                                    borderRadius: BorderRadius.circular(10),
                                  ),
                                  child: SvgPicture.asset(
                                    ResImages.ic_add_feature_dots_icon,
                                    color: BEColors.white,
                                  ),
                                  itemBuilder: (context) {
                                    return [
                                      PopupMenuItem(
                                        value: 'spaceQr',
                                        child: Row(
                                          children: [
                                            SvgPicture.asset(
                                              ResImages.ic_qr_icon_1,
                                            ),
                                            16.width,
                                            Text('Space QR', style: BETextStyles.BodyStyleWithDarkBlueColor),
                                            3.width,
                                            Text('(all spaces)',
                                                style: BETextStyles.InfoTextStyleWithDarkBlueColor.copyWith(
                                                  fontStyle: FontStyle.italic,
                                                )),
                                          ],
                                        ),
                                      ),
                                      if (homeGuideViewModel.uploadedImage!.isNotEmpty)
                                        PopupMenuItem(
                                          value: 'uploadPhoto',
                                          child: Text('Upload Photo', style: BETextStyles.BodyStyleWithDarkBlueColor),
                                        ),
                                    ];
                                  },
                                  onSelected: (String value) async {
                                    if (value == "uploadPhoto") {
                                      await homeGuideViewModel.pickImageAndUpload(context);
                                    }
                                    if (value == "spaceQr") {
                                      onDownloadAllSpacePDF(data);
                                    }
                                  },
                                ),
                              ],
                            ),
                          );
                        }),
                      ],
                    );
                  }

                  return snapWidgetHelper(snap, loadingWidget: BEAppLoader(color: BEColors.primaryColor).center());
                },
              );
            },
          ),
          Observer(
            builder: (context) {
              return homeGuideViewModel.downloadPDFApiState == ApiState.running
                  ? Container(
                      color: Colors.black.withOpacity(0.5),
                      child: Center(
                        child: CircularProgressIndicator(
                          color: BEColors.primaryColor,
                        ),
                      ),
                    )
                  : Offstage();
            },
          ),
        ],
      ),
    );
  }

  void onDownloadAllSpacePDF(MyProperty data) async {
    int randomNumber = Random.secure().nextInt(5);

    NotificationService.initialize();

    final downloadService = DownloadService();

    ResponseResult<DownloadPdfModel, String> res;

    NotificationService.showProgressNotification(
      id: randomNumber,
      title: 'Starting Downloading...',
      body: '',
      progress: 0,
      maxProgress: 100,
      // filePath: "testing",
    );

    res = await homeGuideViewModel.downloadAllSpacePdf(
      property_slug: data.slug.validate(),
      current_time: DateTime.now().toIso8601String(),
    );

    if (Platform.isAndroid) {
      downloadService.startAndroidDownload(
        res.data!.downloadPdfData!.url.validate(),
        randomNumber,
        homeGuideViewModel: homeGuideViewModel,
      );
    } else {
      downloadService.startIosDownload(
        context,
        res.data!.downloadPdfData!.url.validate(),
        randomNumber,
        homeGuideViewModel: homeGuideViewModel,
      );
    }

    await PdfViewer(url: res.data!.downloadPdfData!.url.validate()).launch(context, pageRouteAnimation: PageRouteAnimation.Slide);
  }
}
Editor is loading...
Leave a Comment