import 'dart:convert'; import 'dart:io'; import 'package:tower_app/Screens/Home/home_screen.dart'; import 'package:tower_app/Screens/Menu/Canvasing/filingData_post.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:intl/intl.dart'; import 'package:progress_dialog_null_safe/progress_dialog_null_safe.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'dart:developer' as logDev; import '../../background.dart'; //List fileAttach = [""]; TextEditingController amountTextController = TextEditingController(); class FilingScreen extends StatefulWidget { const FilingScreen({Key? key}) : super(key: key); @override State createState() => _FilingScreen(); } class _FilingScreen extends State { String _fileTextKK = ""; String _fileTextKTP = ""; String _fileTextNPWP = ""; String base64KK = ""; String base64KTP = ""; String base64NPWP = ""; initState(){ WidgetsBinding.instance.addPostFrameCallback((_) { base64KK = ""; base64KTP = ""; base64NPWP = ""; }); super.initState(); } @override Widget build(BuildContext context) { var size = MediaQuery.sizeOf(context); return Scaffold( body: SingleChildScrollView( child: Column( children: [ Stack( children: [ WavyHeader(), Container( margin: EdgeInsets.only(top: MediaQuery.of(context).size.height/6 - 20), padding: EdgeInsets.fromLTRB(20, 5, 25, 5), child: Row( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( 'Filing\t\t', maxLines: 2, style: GoogleFonts.luckiestGuy( fontSize: 28, color: Color(0xFF4858A7), fontStyle: FontStyle.italic, ), ), Image.asset("assets/icons/menu/ic_filing_1.png", width: 40, height: 40, ), ], )), SafeArea( child: Container( width: MediaQuery.of(context).size.width, margin: EdgeInsets.only( top: MediaQuery.of(context).size.height / 5, left: 10, right: 10, bottom : 15, ), child: Column( children: [ Container( child: Card( elevation: 10, child: Container( decoration: BoxDecoration( color: Color(0XFFFAF7EE), borderRadius: BorderRadius.circular(10)), child: Column( children: [ Container( margin: EdgeInsets.only( left: 10, right: 10, top: 15, bottom: 10), child: Text('Filing', style: GoogleFonts.josefinSans(fontSize: 19, fontWeight: FontWeight.bold, decoration: TextDecoration.underline, decorationStyle: TextDecorationStyle.dashed),), ), Container( margin: EdgeInsets.only( left: 10, right: 10, top: 10, bottom: 10), child: Column( children: [ Align( alignment: Alignment.centerLeft, child: Text( 'Amount', style: GoogleFonts.inconsolata( fontSize: 16, fontWeight: FontWeight.bold), ) ), Container( margin: EdgeInsets.only(top: 7), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(5)), child: Padding( padding: EdgeInsets.only( left: 10, right: 10, top: 5, bottom: 5), child: TextFormField( keyboardType: TextInputType.number, maxLines: 1, controller: amountTextController, textInputAction: TextInputAction.next, decoration: InputDecoration( border: InputBorder.none, hintText: "ex. 1500500", )), ) ) ], ), ), Container( margin: EdgeInsets.only( left: 10, right: 10, top: 10), child: Column( children: [ Align( alignment: Alignment.centerLeft, child: Text( 'Kartu Keluarga', style: GoogleFonts.inconsolata( fontSize: 16, fontWeight: FontWeight.bold), ), ), Container( child: ElevatedButton( onPressed: () { _pickFilesKK(); }, /*style: ElevatedButton.styleFrom( backgroundColor: CupertinoColors .systemGrey2),*/ child: Container( width: double.infinity, child: Text("Choose File", style: TextStyle( color: Colors.white, fontSize: 16, fontWeight: FontWeight.w400)), ), ), ), Container( alignment: Alignment.centerLeft, margin: EdgeInsets.only( left: 15, right: 15, bottom: 10), child: Text(_fileTextKK, overflow: TextOverflow.ellipsis, /*maxLines: 7,*/ style: TextStyle( color: Colors.black54), ), ), ], ), ), Container( margin: EdgeInsets.only( left: 10, right: 10, top: 10), child: Column( children: [ Align( alignment: Alignment.centerLeft, child: Text( 'KTP', style: GoogleFonts.inconsolata( fontSize: 16, fontWeight: FontWeight.bold), ), ), Container( child: ElevatedButton( onPressed: () { _pickFilesKTP(); }, /*style: ElevatedButton.styleFrom( backgroundColor: CupertinoColors .systemGrey2),*/ child: Container( width: double.infinity, child: Text("Choose File", style: TextStyle( color: Colors.white, fontSize: 16, fontWeight: FontWeight.w400)), ), ), ), Container( alignment: Alignment.centerLeft, margin: EdgeInsets.only( left: 15, right: 15, bottom: 10), child: Text(_fileTextKTP, overflow: TextOverflow.ellipsis, /*maxLines: 7,*/ style: TextStyle( color: Colors.black54), ), ), ], ), ), Container( margin: EdgeInsets.only( left: 10, right: 10, top: 10), child: Column( children: [ Align( alignment: Alignment.centerLeft, child: Text( 'NPWP', style: GoogleFonts.inconsolata( fontSize: 16, fontWeight: FontWeight.bold), ), ), Container( child: ElevatedButton( onPressed: () { _pickFilesNPWP(); }, /*style: ElevatedButton.styleFrom( backgroundColor: CupertinoColors .systemGrey2),*/ child: Container( width: double.infinity, child: Text("Choose File", style: TextStyle( color: Colors.white, fontSize: 16, fontWeight: FontWeight.w400)), ), ), ), Container( alignment: Alignment.centerLeft, margin: EdgeInsets.only( left: 15, right: 15, bottom: 10), child: Text(_fileTextNPWP, overflow: TextOverflow.ellipsis, /*maxLines: 7,*/ style: TextStyle( color: Colors.black54), ), ), ], ), ), InkWell( child: Container( margin: EdgeInsets.only(left: 10, right: 10, bottom: 15), padding: EdgeInsets.fromLTRB( 10, 10, 10, 10), width: double.infinity, decoration: BoxDecoration( borderRadius: BorderRadius.circular(5), gradient: LinearGradient(colors: [ Color(0xFFFF9945), Color(0xFFFc6076) ])), child: Text('Submit', textAlign: TextAlign.center, style: TextStyle( color: Colors.white, fontSize: 17, fontWeight: FontWeight.w500)), ), onTap: () async { ProgressDialog loading = ProgressDialog(context); loading = ProgressDialog(context, type: ProgressDialogType.normal, isDismissible: false, showLogs: true); loading.style( message: 'Please Wait .....', borderRadius: 3, backgroundColor: Colors.white, progressWidget: CircularProgressIndicator(), elevation: 10.0, padding: EdgeInsets.all(10), insetAnimCurve: Curves.easeInOut, progress: 0.0, maxProgress: 100.0, progressTextStyle: TextStyle( color: Colors.black, fontSize: 10.0, fontWeight: FontWeight.w400), messageTextStyle: TextStyle( color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600)); if (!validateFormFiling(context)){ return; } else if (validateFormFiling(context)){ await loading.show(); final SharedPreferences prefs = await SharedPreferences.getInstance(); String? idDetail = prefs.getString('idDetail'); logDev.log(idDetail!, name: "APAKAH ADA ID?"); int? user_id = prefs.getInt('user_id'); FilingData_Post.connectToAPI(idDetail!, amountTextController.text.toString(), base64KK, base64KTP, base64NPWP, user_id!).then((valueResult) async { Map object = json.decode(valueResult); if (object.containsKey("result").toString() == "true") { String result = object['result'].toString(); String status = object['result']['status'].toString(); if (status == "success") { await loading.hide(); Widget okButton = TextButton( child: Text("OK"), onPressed: () { amountTextController.clear(); Navigator.of(context, rootNavigator: true).pop(); Navigator.pushReplacement(context, MaterialPageRoute( builder: (context) => HomeView())); }, ); // set up the AlertDialog AlertDialog alert = AlertDialog( title: Text("Canvasing"), content: Text("Data Submitted!"), actions: [ okButton, ], ); // show the dialog showDialog( context: context, barrierDismissible: false, builder: (BuildContext context) { return alert; }, ); } } else { await loading.hide(); alertDialogFailedResponse(context); } }); } }, ) ], ), ), ), ), ], ), ), ), ], ), ], )), ); } //Pick Files KK void _pickFilesKK() async { FilePickerResult? result = await FilePicker.platform.pickFiles(allowMultiple: false, type: FileType.custom, allowedExtensions: ["jpg"]); if (_fileTextKK != ""){ _fileTextKK = ""; } if (result != null) { List files = result.paths.map((path) => File(path!)).toList(); for (int i = 0; i< files.length; i++){ String fileName = files[i].path.split('/').last; _fileTextKK = _fileTextKK + "\n" + fileName; List fileInBytes = files[i].readAsBytesSync(); base64KK = base64Encode(fileInBytes); //logDev.log(toBase64, name: "Base64 nya kah?"); //fileAttach.add(toBase64); } //fileAttach.removeAt(0); /*logDev.log(fileAttach.toString(), name: "File Attach Base64");*/ //logDev.log(fileAttach.length.toString(), name: "Length File Attach"); logDev.log(files.toString(), name: "Files (KK) Picked"); setState(() { base64KK; _fileTextKK; //_totalFile = "Total File : " + files.length.toString(); }); } else { // User canceled the picker } } //Pick Files KTP void _pickFilesKTP() async { FilePickerResult? result = await FilePicker.platform.pickFiles(allowMultiple: false, type: FileType.custom, allowedExtensions: ["jpg"]); if (_fileTextKTP != ""){ _fileTextKTP = ""; } if (result != null) { List files = result.paths.map((path) => File(path!)).toList(); for (int i = 0; i< files.length; i++){ String fileName = files[i].path.split('/').last; _fileTextKTP = _fileTextKTP + "\n" + fileName; List fileInBytes = files[i].readAsBytesSync(); base64KTP = base64Encode(fileInBytes); //fileAttach.add(toBase64); } // fileAttach.removeAt(0); /*logDev.log(fileAttach.toString(), name: "File Attach Base64");*/ //logDev.log(fileAttach.length.toString(), name: "Length File Attach"); logDev.log(files.toString(), name: "Files Picked"); setState(() { base64KTP; _fileTextKTP; //_totalFile = "Total File : " + files.length.toString(); }); } else { // User canceled the picker } } //Pick Files NPWP void _pickFilesNPWP() async { FilePickerResult? result = await FilePicker.platform.pickFiles(allowMultiple: false, type: FileType.custom, allowedExtensions: ["jpg"]); if (_fileTextNPWP != ""){ _fileTextNPWP = ""; } if (result != null) { List files = result.paths.map((path) => File(path!)).toList(); for (int i = 0; i< files.length; i++){ String fileName = files[i].path.split('/').last; _fileTextNPWP = _fileTextNPWP + "\n" + fileName; List fileInBytes = files[i].readAsBytesSync(); base64NPWP = base64Encode(fileInBytes); //fileAttach.add(toBase64); } //fileAttach.removeAt(0); /*logDev.log(fileAttach.toString(), name: "File Attach Base64");*/ //logDev.log(fileAttach.length.toString(), name: "Length File Attach"); logDev.log(files.toString(), name: "Files Picked"); setState(() { base64NPWP; _fileTextNPWP; //_totalFile = "Total File : " + files.length.toString(); }); } else { // User canceled the picker } } bool validateFormFiling(BuildContext context) { bool result = true; if (amountTextController.text.toString().isEmpty) { Fluttertoast.showToast( msg: "Amount Required!", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, timeInSecForIosWeb: 1, textColor: Colors.white, fontSize: 16.0); result = false; } else if (_fileTextKK.isEmpty) { Fluttertoast.showToast( msg: "Karti Keluarga Required!", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, timeInSecForIosWeb: 1, textColor: Colors.white, fontSize: 16.0); result = false; } else if (_fileTextKTP.isEmpty) { Fluttertoast.showToast( msg: "KTP Required!", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, timeInSecForIosWeb: 1, textColor: Colors.white, fontSize: 16.0); result = false; } else if (_fileTextNPWP.isEmpty) { Fluttertoast.showToast( msg: "NPWP Required!", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.CENTER, timeInSecForIosWeb: 1, textColor: Colors.white, fontSize: 16.0); result = false; } return result; } } alertDialogFailedRetrievedData(BuildContext context){ Widget okButton = TextButton( child: Text("Refresh"), onPressed: () { Navigator.of(context, rootNavigator: true).pop(); Navigator.pushReplacement(context, MaterialPageRoute( builder: (context) => FilingScreen())); }, ); Widget noButton = TextButton( child: Text("Back"), onPressed: () { Navigator.of(context, rootNavigator: true).pop(); Navigator.pop(context); }, ); // set up the AlertDialog AlertDialog alert = AlertDialog( title: Text("Canvasing"), content: Text("Failed to Retrieve Data"), actions: [ noButton, okButton, ], ); // show the dialog showDialog( context: context, barrierDismissible: false, builder: (BuildContext context) { return alert; }, ); } alertDialogFailedResponse(BuildContext context){ Widget okButton = TextButton( child: Text("Refresh"), onPressed: () { Navigator.of(context, rootNavigator: true).pop(); Navigator.pushReplacement(context, MaterialPageRoute( builder: (context) => FilingScreen())); }, ); Widget noButton = TextButton( child: Text("Back"), onPressed: () { Navigator.of(context, rootNavigator: true).pop(); Navigator.pop(context); }, ); // set up the AlertDialog AlertDialog alert = AlertDialog( title: Text("Canvasing"), content: Text("Server Response Error"), actions: [ noButton, okButton, ], ); // show the dialog showDialog( context: context, barrierDismissible: false, builder: (BuildContext context) { return alert; }, ); }