Untitled
unknown
plain_text
a year ago
13 kB
6
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