You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
uco-mobile-poc/lib/app/modules/add_money/views/add_money_view.dart

279 lines
12 KiB
Dart

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:uco_mobile_poc/app/modules/add_money/views/shared/currency_list_screen.dart';
import 'package:uco_mobile_poc/app/modules/add_money/views/shared/payment_method_view.dart';
import '../../../core/constants/app_assets.dart';
import '../../../core/constants/form_field_constants.dart';
import '../../../core/constants/translation_keys.dart';
import '../../../custom_widgets/Fields/input_field.dart';
import '../../../custom_widgets/custom_app_bar.dart';
import '../../../custom_widgets/custom_button.dart';
import '../../../res/app_colors.dart';
import '../../../res/app_theme.dart';
import '../controllers/add_money_controller.dart';
class AddMoneyView extends GetView<AddMoneyController> {
const AddMoneyView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
//
String className = runtimeType.toString().split('.').last;
return Scaffold(
appBar: DashBoardAppBar(
title: "Add Money",
onBackButtonPressed: () {
Get.back();
},
),
persistentFooterButtons: [
Padding(
padding: const EdgeInsets.only(left: 20, right: 30, bottom: 10),
child: CustomButton(
onPressed: () {
controller.navigateToNextScreen();
},
buttonText: TranslationKeys.makeTranslation(TranslationKeys.textContinue),
buttonColor: AppColors.colorButton,
buttonPadding: const EdgeInsets.only(top: 12, bottom: 12),
),
)
],
body: Padding(
padding: const EdgeInsets.only(left: 20, right: 20, top: 20),
child: SingleChildScrollView(
child: Obx(() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text("You send exactly"),
const SizedBox(height: 8),
controller.amountFeild = InputField(
refKey: FormFieldConstants.instance().getFormKey("${className}amountFeild"),
controller: FormFieldConstants.instance().getController("${className}amountFeild"),
hintText: "Enter amount",
radius: 10,
inputFontSize: 20.0,
inputColor: AppColors.black,
inputFontWeight: FontWeight.w600,
keyboardType: const TextInputType.numberWithOptions(decimal: true),
inputFormatters: InputType.maxValueFilter(InputType.INT_MAX_VALUE_, true, 2),
isTopMarginRequired: false,
showLabel: false,
textInputAction: TextInputAction.done,
onChanged: (value) {
Future.delayed(const Duration(milliseconds: 500), () => controller.getConversionAmount());
},
onSubmitted: (value) {
controller.getConversionAmount();
},
suffixIcon: GestureDetector(
onTap: () {
controller.selectFromAccountCurrency();
},
child: Container(
color: AppColors.transparent,
child: SizedBox(
width: 130,
height: 60,
child: Row(
children: [
// Image.asset(controller.getFlagWithCurrencyCode(controller.selectedFromAccountCurrency.value.pcrCurrcode), width: 22),
// const SizedBox(width: 6),
// Text(
// controller.selectedFromAccountCurrency.value.dmpProdshort,
// style: context.textTheme.bodyMedium!.copyWith(fontSize: 16, color: AppColors.colorPrimary, fontWeight: FontWeight.w600),
// ),
const SizedBox(width: 105),
Image.asset(AppAssets.drop_down_ic, width: 10, height: 10),
const SizedBox(width: 6),
],
),
),
),
),
),
const SizedBox(height: 17),
Text(
"Paying with",
style: context.textTheme.bodyMedium!.copyWith(fontSize: 14, fontWeight: FontWeight.w400, color: AppColors.colorTitle),
),
const SizedBox(height: 8),
InkWell(
onTap: () {
Get.to(() => const PaymentMethodView())!.then(
(value) {
controller.getConversionAmount();
},
);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: AppColors.colorGrey200,
),
padding: const EdgeInsets.only(left: 13, top: 17, bottom: 17, right: 15),
child: Row(
children: [
Text(
controller.paymnetController.paymentMethod.value.title.isNotEmpty ? TranslationKeys.makeTranslation(controller.paymnetController.paymentMethod.value.title) : "Select a payment method",
style: context.textTheme.bodyMedium!.copyWith(fontSize: 15, fontWeight: FontWeight.w500, color: AppColors.F0F0D),
),
const Spacer(),
Card(
elevation: 0.0,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(50), side: BorderSide(color: AppColors.CFCFCF)),
child: Padding(
padding: const EdgeInsets.only(
left: 15,
right: 15,
top: 5,
bottom: 5,
),
child: Center(
child: Text(
"Select",
style: context.textTheme.bodyLarge!.copyWith(fontSize: 11, fontWeight: FontWeight.w500),
),
),
),
),
],
),
),
),
const SizedBox(height: 17),
Text(
"Recipient Get",
style: context.textTheme.bodyMedium!.copyWith(fontSize: 14, fontWeight: FontWeight.w400, color: AppColors.colorTitle),
),
const SizedBox(height: 8),
Container(
height: 60,
decoration: BoxDecoration(
shape: BoxShape.rectangle,
borderRadius: const BorderRadius.all(Radius.circular(10)),
border: Border.all(color: AppColors.colorGrey500, width: 1.5),
),
child: Row(
// mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
flex: 4,
child: TextField(
style: AppThemeData.inputStyle.copyWith(height: 1, fontSize: 20.0, fontWeight: FontWeight.w600, color: AppColors.black),
controller: controller.recipientController,
decoration: const InputDecoration(border: InputBorder.none),
enabled: false,
),
),
GestureDetector(
onTap: () {
Get.to(() => CurrencyListScreen())!.then(
(value) {
controller.getConversionAmount();
},
);
},
child: Container(
color: Colors.transparent,
child: Row(
children: [
Image.asset(
controller.getFlagWithCurrencyCode(controller.selectRecepientAccount.value.pcrCurrcode),
width: 22,
errorBuilder: (context, error, stackTrace) => const SizedBox(),
),
const SizedBox(width: 6),
Text(controller.selectRecepientAccount.value.pcrCurrshort, style: context.textTheme.bodyMedium!.copyWith(fontSize: 16, color: AppColors.colorPrimary, fontWeight: FontWeight.w500)),
const SizedBox(width: 6),
Image.asset(AppAssets.drop_down_ic, width: 10, height: 10),
const SizedBox(width: 15),
],
),
),
),
],
),
),
const SizedBox(height: 15),
...(controller.checkForNull())
? []
: [
detailsTile(controller.evaluatedCurrencyModel.value.serviceCharges.toString(), "Our fee"),
detailsTile(controller.evaluatedCurrencyModel.value.sgtGntramtfc!.toString(), "Total amount well convert"),
//{"title": "344.598", "subtitle": ""},
detailsTile(
controller.evaluatedCurrencyModel.value.targetPerEratrateact.toString(),
"Guaranteed exchange rate (2h)",
subTitleStyle: Get.context?.textTheme.bodyMedium!.copyWith(fontSize: 14, fontWeight: FontWeight.w400, color: AppColors.colorPrimary, decoration: TextDecoration.underline),
),
const SizedBox(height: 35),
Text(
"Usually arrives in seconds. Because this is your first transfer, things may take a little longer.",
style: context.textTheme.bodyMedium!.copyWith(
fontSize: 15,
fontWeight: FontWeight.w400,
),
),
const SizedBox(height: 20),
],
],
);
}),
),
),
);
}
Widget detailsTile(String title, String subTitle, {TextStyle? subTitleStyle}) {
return Padding(
padding: const EdgeInsets.only(top: 20),
child: Row(
children: [
Container(
width: 13,
height: 13,
decoration: BoxDecoration(color: AppColors.colorTitle, borderRadius: BorderRadius.circular(20)),
),
const SizedBox(width: 6),
Text(
title,
style: Get.context?.textTheme.bodyMedium!.copyWith(
fontSize: 14,
fontWeight: FontWeight.w700,
),
),
const Spacer(),
Text(
subTitle,
style: subTitleStyle ??
Get.context?.textTheme.bodyMedium!.copyWith(
fontSize: 14,
fontWeight: FontWeight.w400,
),
),
],
),
);
}
}
showCurrencyBtm() {
Get.bottomSheet(
Container(
decoration: BoxDecoration(color: Colors.white, border: Border.all(color: AppColors.colorGrey800, width: 1), borderRadius: const BorderRadius.only(topLeft: Radius.circular(30), topRight: Radius.circular(30))),
margin: const EdgeInsets.only(left: 20, right: 20),
child: const Text("data"),
),
backgroundColor: Colors.transparent,
isScrollControlled: true,
shape: const RoundedRectangleBorder(borderRadius: BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(10))),
);
}