import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/main.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/document.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/view_models/service_view_model.dart'; import 'package:mc_common_app/views/advertisement/components/picked_images_container_widget.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:provider/provider.dart'; class ProviderLicensePage extends StatefulWidget { const ProviderLicensePage({super.key}); @override State createState() => _ProviderLicensePageState(); } class _ProviderLicensePageState extends State { late ServiceVM branchVM; bool showAttachment = false; String? attachedFile; @override void initState() { super.initState(); scheduleMicrotask(() { // branchVM = Provider.of(context, listen: false); context.read().getServiceProviderDocument(AppState().getUser.data!.userInfo!.providerId ?? 0); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: CustomAppBar( title: LocaleKeys.defineLicences.tr(), isRemoveBackButton: false, ), body: Consumer(builder: (_, model, __) { return Column( children: [ Expanded( child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(0.0), child: Column( children: [ showWidget(model), ], ), ), ), ), Padding( padding: const EdgeInsets.all(12.0), child: ShowFillButton( title: LocaleKeys.continu.tr(), maxWidth: double.infinity, onPressed: () { if (AppState().getUser.data!.userInfo!.roleId == 5) { if (validation(model)) { updateDocument(model); } else { Utils.showToast(LocaleKeys.allDocumentMandatoryDealershipProvider.tr()); } } else { updateDocument(model); } Future.delayed(const Duration(seconds: 1), () { Navigator.of(context).pop(); }); }, ), ), ], ); }), ); } validation(ServiceVM model) { bool valid = true; for (var element in model.document!.data!) { if (element.documentUrl == null) { valid = false; } } return valid; } updateDocument(ServiceVM model) async { Utils.showLoading(context); GenericRespModel res = await model.updateDocument(model.document!.data); Utils.hideLoading(context); if (res.messageStatus == 1) { Utils.showToast(LocaleKeys.documentsUploadedSuccessfully.tr()); Navigator.of(context).pop(); } else { Utils.showToast(res.message ?? ""); } } Widget showWidget(ServiceVM model) { if (model.state == ViewState.idle) { return model.document!.data!.isEmpty ? Text(LocaleKeys.somethingWrong.tr()) : ListView.separated( itemBuilder: (context, index) { DocumentData? document = model.document?.data![index]; return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ 10.height, (document!.documentName! ?? "").toText(fontSize: 16, letterSpacing: -0.56, fontWeight: MyFonts.SemiBold), Padding( padding: const EdgeInsets.only(left: 20, right: 20, top: 4, bottom: 8), child: LocaleKeys.enter_licence_detail.tr().toText(fontSize: 14, color: MyColors.lightTextColor, textAlign: TextAlign.center), ), TxtField( hint: LocaleKeys.description.tr(), maxLines: 3, isBackgroundEnabled: true, ), 10.height, if (isNeedToShow(model: model, document: document)) ...[ PickedFilesContainer( // isReview: document.status == 3 ? true : false, pickedFiles: isLocalOrNetworkFiles(model: model, document: document), onCrossPressedPrimary: chkIsLocalOrNetwork(document: document) ? model.removeNetworkImag : document.documentId == 1 ? model.commerceRemove : document.documentId == 2 ? model.commercialRemove : model.vatRemove, isPdf: model.document!.data![index].fileExt == "pdf", isFromNetwork: document.isLocalFile! ? false : true, onAddFilePressed: () { model.pickPdfReceiptFile(context, document.documentId!, index); }, ), if (document.comment != null && document.comment.isNotEmpty && document.status == 4) ...[buildStatusContainer(document: document)] ] else ...[ 10.height, InkWell( onTap: () async { model.pickPdfReceiptFile(context, document.documentId!, index) ?? ""; }, child: Container( width: double.infinity, height: 45, decoration: BoxDecoration( color: Colors.transparent, border: Border.all(color: MyColors.greyACColor, width: 2), borderRadius: const BorderRadius.all(Radius.circular(0)), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ const Icon( Icons.attach_file, size: 18, color: MyColors.darkPrimaryColor, ), 8.width, Text( LocaleKeys.attachFile.tr(), style: const TextStyle( color: MyColors.darkPrimaryColor, ), ), const Icon( Icons.attach_file, size: 18, color: Colors.transparent, ), ], ), ), ), ], ], ); }, separatorBuilder: (context, index) { return 20.height; }, itemCount: model.document!.data!.length, physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, padding: EdgeInsets.symmetric(horizontal: 20), ); } else { return Column( children: [ 20.height, const Center( child: CircularProgressIndicator(), ), ], ); } } List isLocalOrNetworkFiles({required ServiceVM model, required DocumentData document}) { bool isNetworkImage = false; if (!document.isLocalFile!) { isNetworkImage = document.documentUrl != null && document.documentUrl.isNotEmpty ? true : false; } if (isNetworkImage) { return [ImageModel(id: document.id, isFromNetwork: isNetworkImage, filePath: document.documentUrl)]; } else if (document.documentId == 1) { return model.commerceCertificates; } else if (document.documentId == 2) { return model.commercialCertificates; } else { return model.vatCertificates; } } bool isNeedToShow({required ServiceVM model, required DocumentData document}) { bool allow = false; bool isNetworkImage = document.documentUrl != null && document.documentUrl.isNotEmpty ? true : false; if (isNetworkImage) { allow = true; } else { if (document.documentId == 1 && model.commerceCertificates.isNotEmpty) { allow = true; } if (document.documentId == 2 && model.commercialCertificates.isNotEmpty) { allow = true; } if (document.documentId == 3 && model.vatCertificates.isNotEmpty) { allow = true; } } return allow; } dynamic checkOnCrossPress({required ServiceVM model, required DocumentData document}) async { bool isNetworkImage = document.documentUrl != null && document.documentUrl.isNotEmpty ? true : false; if (isNetworkImage) { return document.documentUrl; } else { if (document.documentId == 1) { model.commerceRemove; } if (document.documentId == 2) { model.commercialRemove; } if (document.documentId == 3) { model.vatRemove; } } } bool chkIsLocalOrNetwork({required DocumentData document}) { bool isNetworkImage = false; if (!document.isLocalFile!) { isNetworkImage = document.documentUrl != null && document.documentUrl.isNotEmpty ? true : false; } return isNetworkImage; } Widget buildStatusContainer({required DocumentData document}) { return Center( child: document.comment.toString().toText( color: MyColors.adCancelledStatusColor, fontSize: 14, // isItalic: true, ), ).toContainer( marginAll: 10, paddingAll: 10, borderRadius: 8, width: double.infinity, backgroundColor: MyColors.adCancelledStatusColor.withOpacity(0.16), ); } }