Untitled
unknown
dart
4 years ago
31 kB
13
Indexable
import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_absolute_path/flutter_absolute_path.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:image_cropper/image_cropper.dart';
import 'package:mobile/app/Dto/add_supplier_dto.dart';
import 'package:mobile/app/Dto/upload_supplier_document_dto.dart';
import 'package:mobile/app/global_widgets/circular_block_button_widget.dart';
import 'package:mobile/app/global_widgets/text_field_widget.dart';
import 'package:mobile/app/models/new/myfatoorah_bank.dart';
import 'package:mobile/app/modules/auth/controllers/auth_controller.dart';
import 'package:mobile/app/modules/auth/controllers/payment_info_controller.dart';
import 'package:mobile/app/providers/api_provider.dart';
import 'package:mobile/app/routes/app_pages.dart';
import 'package:mobile/common/ui.dart';
import 'package:file_picker/file_picker.dart';
import 'package:multi_image_picker2/multi_image_picker2.dart';
// import 'package:filesystem_picker/filesystem_picker.dart';
class PaymentInfoAdd extends GetView<PaymentInfoController> {
var controller = Get.put(PaymentInfoController());
GetStorage box = GetStorage();
final GlobalKey<FormState> _loginForm = new GlobalKey<FormState>();
final AuthController authController = Get.find();
@override
Widget build(BuildContext context) {
return Obx(
() => Scaffold(
backgroundColor: Ui.parseColor('#F5F5F5'),
extendBodyBehindAppBar: false,
body: SafeArea(
child: ListView(
primary: true,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'Payment Details'.tr,
style: Get.theme.textTheme.headline2
.copyWith(fontWeight: FontWeight.bold),
),
],
).paddingSymmetric(horizontal: 16, vertical: 40),
Form(
key: _loginForm,
autovalidateMode: AutovalidateMode.onUserInteraction,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(15),
),
color: Get.theme.primaryColor,
boxShadow: [
BoxShadow(
color: Get.theme.focusColor.withOpacity(0.2),
blurRadius: 10,
offset: Offset(0, 5)),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Visibility(
visible: controller.supplierCode != null ||
controller.errorSupplierFileUploadReg.value == true,
child: Container(
margin: EdgeInsets.all(15.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Icon(
Icons.warning_amber_rounded,
color: Colors.red,
),
SizedBox(
width: 10.0,
),
Expanded(
child: Text(
"Please complete bank infromation details".tr,
style: Get.textTheme.headline4
.copyWith(fontWeight: FontWeight.bold),
),
),
],
),
),
),
Visibility(
visible: controller.supplierCode == null,
child: Column(
children: [
Text(
'Bank Details'.tr,
// textAlign: TextAlign.left,
style: Get.textTheme.headline4
.copyWith(fontWeight: FontWeight.bold),
).paddingOnly(top: 20, left: 20, right: 20),
SizedBox(height: 15),
Text(
'Bank Name'.tr,
// textAlign: TextAlign.left,
style: Get.textTheme.bodyText2
.copyWith(fontWeight: FontWeight.bold),
).paddingOnly(top: 10, left: 50, right: 50),
DropdownButton<String>(
// itemHeight: 100,
isExpanded: true,
isDense: false,
items: controller.myFatoorahBanks
.map((MyFatoorahBank value) {
return DropdownMenuItem<String>(
value: value.Value.toString(),
child: Text(
value.Text,
maxLines: 3,
style: Get.textTheme.bodyText2,
overflow: TextOverflow.visible,
),
onTap: () {
controller.bankNameFromList.value =
value.Text.substring(
(value.Text.indexOf('-') + 1) ?? 0);
},
);
}).toList(),
onChanged: (val) {
controller.bankID = int.parse(val);
},
hint: new Text(
controller.bankNameFromList.value == ''
? 'Select Bank'.tr
: controller.bankNameFromList.value,
maxLines: 3,
overflow: TextOverflow.visible,
style: Get.theme.textTheme.bodyText1,
),
).paddingOnly(top: 10, left: 50, right: 50),
TextFieldWidget(
labelText: 'Account Number'.tr,
hintText: "Please Enter Account Number".tr,
iconData: Icons.pin,
isFirst: true,
isLast: false,
controller: controller.accountNumber,
validator: (value) => controller.validateEmpty(
value, controller.accountNumber, 8),
keyboardType: TextInputType.text,
),
TextFieldWidget(
labelText: 'IBAN Number'.tr,
hintText: "Please Enter IBAN Number".tr,
iconData: Icons.money,
isFirst: true,
isLast: false,
controller: controller.iBANNumber,
validator: (value) => controller.validateEmpty(
value, controller.iBANNumber, 24),
keyboardType: TextInputType.text,
),
],
),
).paddingOnly(top: 10, left: 10, right: 10),
Text(
'National ID'.tr,
// textAlign: TextAlign.left,
style: Get.textTheme.headline4
.copyWith(fontWeight: FontWeight.bold),
).paddingOnly(top: 10, left: 20, right: 20, bottom: 10),
Obx(() => controller.nationalIDFile.value.path.trim() !=
''
? Card(
elevation: 2,
child: ListTile(
title: Text(
controller.nationalIDFile.value.path
.substring(controller
.nationalIDFile.value.path
.lastIndexOf('/') +
1),
style: TextStyle(color: Get.theme.focusColor),
),
trailing: IconButton(
onPressed: () {
controller.nationalIDFile.value = File('');
},
icon: Icon(Icons.delete),
),
),
)
: Container()),
Visibility(
visible:
controller.nationalIDFile.value.path.trim() == '',
child: CircularBlockButtonWidget(
color: Get.theme.focusColor,
text: Text(
"Select".tr,
style: Get.textTheme.bodyText2.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold),
),
onPressed: () async {
showDialog(
context: context,
builder: (BuildContext context) => CupertinoAlertDialog(
title: Text("National ID".tr),
content: Text('Choose photo/file for your national ID'.tr),
actions: [
CupertinoDialogAction(
isDefaultAction: true,
child: Text('Select from photos'.tr),
onPressed: () async{
Navigator.pop(context);
List<Asset> profilePic1 = <Asset>[].obs;
await MultiImagePicker.pickImages(
maxImages: 1,
enableCamera: true,
selectedAssets: profilePic1,
cupertinoOptions: CupertinoOptions(
takePhotoIcon: "chat",
),
materialOptions: MaterialOptions(
actionBarColor: "#339A58",
statusBarColor: "#339A58",
allViewTitle: "All Photos",
useDetailsView: false,
selectCircleStrokeColor: "#339A58",
),
).then((value) async {
final filePath = await FlutterAbsolutePath.getAbsolutePath(value[0].identifier);
File tempFile = File(filePath);
if (tempFile.existsSync()) {
File cropped = await ImageCropper.cropImage(
sourcePath: tempFile.path,
compressQuality: 100,
compressFormat: ImageCompressFormat.jpg,
androidUiSettings: AndroidUiSettings(
toolbarColor: Get.theme.primaryColor,
toolbarTitle: "Crop Image",
statusBarColor: Colors.black,
backgroundColor: Colors.white10,
activeControlsWidgetColor: Get.theme.focusColor));
controller.nationalIDFile.value = cropped;
}
});
},
),
CupertinoDialogAction(
isDefaultAction: true,
child: Text('Select from files'.tr),
onPressed: () async {
Navigator.of(context).pop();
print('National ID File');
FilePickerResult result = await FilePicker.platform.pickFiles();
if (result != null) {
controller.nationalIDFile.value = File(result.files.single.path);
} else {
// User canceled the picker
}
},
),
CupertinoDialogAction(
isDefaultAction: true,
child: Text('Cancel'.tr),
onPressed: () async {
Navigator.of(context).pop();
},
)
],
),
);
},
).paddingSymmetric(horizontal: 50, vertical: 10),
),
Text(
'Licence'.tr,
// textAlign: TextAlign.left,
style: Get.textTheme.bodyText2
.copyWith(fontWeight: FontWeight.bold),
).paddingOnly(top: 10, left: 20, right: 20, bottom: 10),
// Container(
// width: Get.width * 0.7,
// height: Get.width * 0.5,
// color: Colors.grey[100],
// child: Center(
// child: Icon(
// Icons.photo,
// size: 70,
// )),
// ).paddingSymmetric(horizontal: 50, vertical: 10),
Obx(() => controller.licenceFile.value?.path != ''
? Card(
elevation: 2,
child: ListTile(
title: Text(
controller.licenceFile.value.path.substring(
controller.licenceFile.value.path
.lastIndexOf('/') +
1),
style: TextStyle(color: Get.theme.focusColor),
),
trailing: IconButton(
onPressed: () {
controller.licenceFile.value = File('');
},
icon: Icon(Icons.delete),
),
),
)
: Container()),
Visibility(
visible: controller.licenceFile.value.path.trim() == '',
child: CircularBlockButtonWidget(
color: Get.theme.focusColor,
text: Text(
"Select".tr,
style: Get.textTheme.bodyText2.copyWith(
color: Colors.white,
fontWeight: FontWeight.bold),
),
onPressed: () async {
showDialog(
context: context,
builder: (BuildContext context) => CupertinoAlertDialog(
title: Text("License".tr),
content: Text('Choose photo/file for your license'.tr),
actions: [
CupertinoDialogAction(
isDefaultAction: true,
child: Text('Select from photos'.tr),
onPressed: () async{
Navigator.pop(context);
List<Asset> profilePic1 = <Asset>[].obs;
await MultiImagePicker.pickImages(
maxImages: 1,
enableCamera: true,
selectedAssets: profilePic1,
cupertinoOptions: CupertinoOptions(
takePhotoIcon: "chat",
),
materialOptions: MaterialOptions(
actionBarColor: "#339A58",
statusBarColor: "#339A58",
allViewTitle: "All Photos",
useDetailsView: false,
selectCircleStrokeColor: "#339A58",
),
).then((value) async {
final filePath = await FlutterAbsolutePath.getAbsolutePath(value[0].identifier);
File tempFile = File(filePath);
if (tempFile.existsSync()) {
File cropped = await ImageCropper.cropImage(
sourcePath: tempFile.path,
compressQuality: 100,
compressFormat: ImageCompressFormat.jpg,
androidUiSettings: AndroidUiSettings(
toolbarColor: Get.theme.primaryColor,
toolbarTitle: "Crop Image",
statusBarColor: Colors.black,
backgroundColor: Colors.white10,
activeControlsWidgetColor: Get.theme.focusColor));
controller.licenceFile.value = cropped;
}
});
},
),
CupertinoDialogAction(
isDefaultAction: true,
child: Text('Select from files'.tr),
onPressed: () async {
Navigator.of(context).pop();
print('Licence File Selection');
FilePickerResult result =
await FilePicker.platform.pickFiles(
type: FileType.custom,
allowedExtensions: [
'jpg',
'pdf',
'png',
'jpeg',
],
);
if (result != null) {
controller.licenceFile.value =
File(result.files.single.path);
} else {
// User canceled the picker
}
},
),
CupertinoDialogAction(
isDefaultAction: true,
child: Text('Cancel'.tr),
onPressed: () async {
Navigator.of(context).pop();
},
)
],
),
);
},
).paddingOnly(left: 50, right: 50, top: 10, bottom: 30),
),
],
),
).paddingSymmetric(horizontal: 20)),
CircularBlockButtonWidget(
color: Get.theme.focusColor,
text: Text(
'Save'.tr,
style: Get.textTheme.bodyText2
.copyWith(color: Colors.white, fontWeight: FontWeight.bold),
// TextStyle(
// color: Colors.white,
// fontWeight: FontWeight.bold,
// fontSize: Get.textTheme.headline4.fontSize),
),
onPressed: () async {
if (controller.bankID == -1) {
Get.showSnackbar(Ui.ErrorSnackBar(
title: "Failed".tr,
message: "please select the bank".tr,
));
return;
}
if (controller.supplierCode == null) {
print("1");
if (_loginForm.currentState.validate()) {
if (controller.nationalIDFile.value.path.trim() == '') {
Get.showSnackbar(Ui.ErrorSnackBar(
title: "Failed".tr,
message: "enterNationalFile".tr,
));
return;
}
if (controller.licenceFile.value.path.trim() == '') {
Get.showSnackbar(Ui.ErrorSnackBar(
title: "Failed".tr,
message: "enterLicenseFile".tr,
));
return;
}
List<UploadSupplierDocument> docsList =
<UploadSupplierDocument>[];
UploadSupplierDocument nationalData =
UploadSupplierDocument(
filePath: controller.nationalIDFile.value.path,
fileType: 4,
fileName: controller.nationalIDFile.value.path
.substring(controller.licenceFile.value.path
.lastIndexOf('/') +
1));
UploadSupplierDocument licenceData = UploadSupplierDocument(
filePath: controller.licenceFile.value.path,
fileType: 1,
fileName: controller.licenceFile.value.path.substring(
controller.licenceFile.value.path.lastIndexOf('/') +
1));
docsList.add(nationalData);
docsList.add(licenceData);
AddSupplierDto addSupplierDto = AddSupplierDto(
supplierName: controller.currentUser.appUser.value.name,
email: controller.currentUser.appUser.value.email,
mobile: controller.currentUser.appUser.value.phoneNumber,
commissionValue: 0,
commissionPercentage: 10,
depositTerms: "Daily",
bankId: controller.bankID,
bankAccountHolderName: controller.bankNameFromList.value,
bankAccount:
controller.accountNumber.value.text.toString(),
iban: controller.iBANNumber.value.text.toString(),
isActive: true,
);
Get.dialog(
Center(
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(
Get.theme.accentColor,
),
),
),
barrierDismissible: true,
);
await ApiProvider(httpClient: Dio()).addSupplierFromReg(
addSupplierDto,
docsList,
controller.currentUser.appUser.value.id,
controller);
}
} else {
print("sf");
if (controller.nationalIDFile.value.path.trim() == '') {
Get.showSnackbar(Ui.ErrorSnackBar(
title: "Failed".tr,
message: "enterNationalFile".tr,
));
return;
}
if (controller.licenceFile.value.path.trim() == '') {
Get.showSnackbar(Ui.ErrorSnackBar(
title: "Failed".tr,
message: "enterLicenseFile".tr,
));
return;
}
List<UploadSupplierDocument> docsList =
<UploadSupplierDocument>[];
UploadSupplierDocument nationalData = UploadSupplierDocument(
filePath: controller.nationalIDFile.value.path,
fileType: 4,
fileName: controller.nationalIDFile.value.path.substring(
controller.licenceFile.value.path.lastIndexOf('/') +
1));
UploadSupplierDocument licenceData = UploadSupplierDocument(
filePath: controller.licenceFile.value.path,
fileType: 1,
fileName: controller.licenceFile.value.path.substring(
controller.licenceFile.value.path.lastIndexOf('/') +
1));
docsList.add(nationalData);
docsList.add(licenceData);
Get.dialog(
Center(
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(
Get.theme.accentColor,
),
),
),
barrierDismissible: true,
);
await ApiProvider(httpClient: Dio())
.uploadSupllierDocsFromReg(
docsList,
controller.supplierCode,
controller.currentUser.appUser.value.id,
controller);
}
},
).paddingSymmetric(horizontal: 50, vertical: 20),
Visibility(
visible: controller.supplierCode == null,
child: CircularBlockButtonWidget(
color: Colors.grey,
text: Text(
'Skip'.tr,
style: Get.textTheme.bodyText2.copyWith(
color: Colors.white, fontWeight: FontWeight.bold),
),
onPressed: () async {
Get.offAllNamed(Routes.PHONE_VERIFICATION);
},
).paddingSymmetric(horizontal: 50, vertical: 5),
),
SizedBox(
height: 15.0,
)
],
)),
),
);
}
}
class payment_textFormFeild extends StatelessWidget {
const payment_textFormFeild(
{Key key,
@required this.controllerText,
this.hintTxt,
this.validator,
this.labelTxt})
: super(key: key);
final TextEditingController controllerText;
final String hintTxt;
final String labelTxt;
final Function validator;
@override
Widget build(BuildContext context) {
return TextFormField(
validator: validator,
controller: controllerText,
cursorColor: Colors.black87,
style: TextStyle(
color: Colors.black87,
),
decoration: InputDecoration(
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Get.theme.hintColor),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Get.theme.hintColor.withOpacity(0.3)),
),
hintText: hintTxt.tr,
label: Text(labelTxt.tr),
labelStyle: Get.textTheme.subtitle2,
hintStyle: TextStyle(
color: Get.theme.hintColor,
),
),
).paddingSymmetric(horizontal: 20, vertical: 25);
}
}
Editor is loading...