import 'dart:convert'; import 'dart:io'; import 'package:car_provider_app/api/client/profile_api_client.dart'; import 'package:car_provider_app/classes/app_state.dart'; import 'package:car_provider_app/classes/utils.dart'; import 'package:car_provider_app/extensions/string_extensions.dart'; import 'package:car_provider_app/models/profile/document.dart'; import 'package:car_provider_app/utils/utils.dart'; import 'package:car_provider_app/widgets/button/show_fill_button.dart'; import 'package:car_provider_app/widgets/txt_field.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:car_provider_app/extensions/int_extensions.dart'; import 'package:sizer/sizer.dart'; import '../../classes/colors.dart'; import '../../generated/locale_keys.g.dart'; import '../../widgets/app_bar.dart'; class DefineLicensePage extends StatefulWidget { @override State createState() => _DefineLicensePageState(); } class _DefineLicensePageState extends State { Document? document; @override void initState() { // TODO: implement initState super.initState(); getDocuments(); } getDocuments() async { document = await ProfileApiClent().getServiceProviderDocument(AppState().getUser.data!.userInfo!.providerId ?? 0); setState(() {}); } @override Widget build(BuildContext context) { return Scaffold( appBar: appBar( context, title: "", ), body: Container( width: double.infinity, height: double.infinity, child: Column( children: [ Expanded( child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(20.0), child: Column( children: [ LocaleKeys.defineLicences.tr().toText20(isBold: true), 12.height, LocaleKeys.defineLicenese.tr().toText14(color: MyColors.lightTextColor), 20.height, showWidget(), ], ), ), ), ), Padding( padding: const EdgeInsets.all(12.0), child: ShowFillButton( title: LocaleKeys.update.tr(), maxWidth: double.infinity, onPressed: () { if (AppState().getUser.data!.userInfo!.roleId == 5) { if (validation()) { updateDocument(); } else { Utils.showToast("All document's are mandatory for Dealership Provider"); } } else { updateDocument(); } }, ), ), ], ), ), ); } validation() { bool valid = true; document!.data!.forEach((element) { if (element.documentUrl == null) { valid = false; } }); return valid; } updateDocument() { Utils.showLoading(context); ProfileApiClent().serviceProviderDocumentsUpdate(document!.data).then((value) { Utils.hideLoading(context); if (value.messageStatus == 1) { Utils.showToast("Documents uploaded successfully"); } else { Utils.showToast(value.message ?? ""); } }); } Widget showWidget() { if (document != null) { return document!.data!.length == 0 ? Text(LocaleKeys.somethingWrong.tr()) : ListView.separated( itemBuilder: (context, index) { return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( document?.data![index].documentName ?? "", style: TextStyle( fontSize: 16, ), ), Padding( padding: const EdgeInsets.only(left: 20, right: 20, top: 4, bottom: 8), child: "Please enter the detail for commercial records and attach the license images".toText14(color: MyColors.lightTextColor, textAlign: TextAlign.center), ), TxtField( hint: LocaleKeys.description.tr(), maxLines: 3, ), if (((document?.data![index].documentUrl ?? "").toString().isNotEmpty)) Column( children: [ 8.height, (document?.data![index].documentUrl ?? "").toString().toText14( color: MyColors.lightTextColor, ), ], ), 8.height, InkWell( onTap: () { selectFile(index); }, child: Container( width: double.infinity, height: 45, decoration: BoxDecoration( color: Colors.transparent, border: Border.all(color: MyColors.darkPrimaryColor, width: 2), borderRadius: BorderRadius.all(Radius.circular(8)), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Icon( Icons.attach_file, size: 18, color: MyColors.darkPrimaryColor, ), 8.width, Text( LocaleKeys.attachFile.tr(), style: TextStyle( color: MyColors.darkPrimaryColor, ), ), Icon( Icons.attach_file, size: 18, color: Colors.transparent, ), ], ), ), ), ], ); }, separatorBuilder: (context, index) { return 20.height; }, itemCount: document!.data!.length, physics: NeverScrollableScrollPhysics(), shrinkWrap: true, ); } else { return Center( child: CircularProgressIndicator(), ); } } selectFile(int index) async { FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['png', 'pdf', 'jpeg']); if (result != null) { File file = File(result.files.single.path ?? ""); int sizeInBytes = file.lengthSync(); // double sizeInMb = sizeInBytes / (1024 * 1024); if (sizeInBytes > 1000) { Utils.showToast("File is larger then 1KB"); } else { document!.data![index].document = convertFileToBase64(file); document!.data![index].fileExt = checkFileExt(file.path); setState(() { document!.data![index].documentUrl = result.files.single.path ?? ""; }); } } else { // User canceled the picker } } }