Untitled
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