fix: provider view model agreement redeem and product

This commit is contained in:
2024-02-22 14:43:40 +07:00
parent a3148d8210
commit 176261923d
16 changed files with 501 additions and 287 deletions

View File

@@ -11,9 +11,9 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
const CustomAppBar({
Key? key,
required this.height,
this.leading,
required this.title,
this.trailing,
this.leading,
}) : super(key: key);
@override

View File

@@ -0,0 +1,73 @@
import 'package:cims_apps/application/theme/color_palette.dart';
import 'package:flutter/material.dart';
class RadioAgreement extends StatelessWidget {
final void Function() onTap;
final bool isAgree;
final String desc;
const RadioAgreement({super.key, required this.isAgree, required this.desc, required this.onTap,});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
GestureDetector(
onTap: onTap,
child: AnimatedContainer(
margin: const EdgeInsets.only(top: 4),
duration: const Duration(milliseconds: 200),
height: 16,
width: 16,
padding: const EdgeInsets.all(1),
alignment: Alignment.center,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: isAgree
? ColorPalette.primary
: ColorPalette.slate200)),
child: AnimatedContainer(
duration: const Duration(milliseconds: 200),
child: Container(
decoration: BoxDecoration(
color:
isAgree ? ColorPalette.primary : ColorPalette.white,
shape: BoxShape.circle),
),
),
),
),
const SizedBox(
width: 12,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
desc,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
color: ColorPalette.slate400),
),
GestureDetector(
onTap: () {},
child: const Text(
'Read More',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
decoration: TextDecoration.underline,
color: ColorPalette.primary),
))
],
))
],
),
);
}
}

View File

@@ -36,8 +36,8 @@ class GoalInvestingView extends StatelessWidget {
routePush(
context,
page: OtherPlanView(
selectedPlan: (value) {
onListSelected(e.value.title);
selectedPlan: (val) {
onListSelected(val);
},
)
);

View File

@@ -54,7 +54,6 @@ class _InputInvestmentViewState extends State<InputInvestmentView> {
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w700,
),
),
Row(

View File

@@ -1,3 +1,5 @@
import 'dart:math';
import 'package:cims_apps/application/assets/path_assets.dart';
import 'package:cims_apps/application/component/button/button_view.dart';
import 'package:cims_apps/application/component/custom_app_bar/custom_app_bar.dart';
@@ -72,6 +74,8 @@ class _OtherPlanViewState extends State<OtherPlanView> {
disabled: !(selectedPlan.img != ''),
onPressed: () {
Navigator.pop(context);
print('haloo');
print(selectedPlan.name);
widget.selectedPlan(selectedPlan.name);
},
heightWrapContent: true,
@@ -91,6 +95,7 @@ class _OtherPlanViewState extends State<OtherPlanView> {
if(plan.name == 'Create Plan'){
showModalBottomSheet(
context: context,
isDismissible: false,
builder: (context) => modalCreatePlan(),
);
}
@@ -150,6 +155,9 @@ class _OtherPlanViewState extends State<OtherPlanView> {
GestureDetector(
onTap: () {
Navigator.pop(context);
setState(() {
selectedPlan = Plan('', '');
});
},
child: Icon(Icons.close_rounded),
)
@@ -161,12 +169,12 @@ class _OtherPlanViewState extends State<OtherPlanView> {
),
SizedBox(height: 24),
ButtonView(
name: 'Select',
name: 'Next',
marginVertical: 0,
disabled: !(createController.text != ''),
onPressed: () {
Navigator.of(context)..pop()..pop();
widget.selectedPlan(selectedPlan.name);
widget.selectedPlan(createController.text);
},
heightWrapContent: true,
width: SizeConfig.width,

View File

@@ -1,4 +1,5 @@
import 'package:cims_apps/application/component/button/button_view.dart';
import 'package:cims_apps/application/component/radio_agreement.dart';
import 'package:cims_apps/application/theme/color_palette.dart';
import 'package:cims_apps/core/route/route.dart';
import 'package:cims_apps/core/utils/number_formatter.dart';
@@ -6,22 +7,19 @@ import 'package:cims_apps/features/dashboard/dashboard_account/view/product/view
import 'package:cims_apps/features/dashboard/dashboard_account/view/product/view_model/product_view_model.dart';
import 'package:flutter/material.dart';
class TotalPaymentView extends StatefulWidget {
class TotalPaymentView extends StatelessWidget {
final int totalInvest;
final List<Product> listProduct;
final bool isAgree;
final void Function() onTapAgree;
const TotalPaymentView({
super.key,
required this.listProduct,
required this.totalInvest,
required this.isAgree,
required this.onTapAgree,
});
@override
State<TotalPaymentView> createState() => _TotalPaymentViewState();
}
class _TotalPaymentViewState extends State<TotalPaymentView> {
bool isAgreement = false;
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
@@ -49,7 +47,7 @@ class _TotalPaymentViewState extends State<TotalPaymentView> {
],
),
),
...widget.listProduct.asMap().entries.map((e) {
...listProduct.asMap().entries.map((e) {
return Container(
padding: const EdgeInsets.only(
left: 16, right: 24, bottom: 16, top: 16),
@@ -75,7 +73,7 @@ class _TotalPaymentViewState extends State<TotalPaymentView> {
flex: 7,
child: Text(
NumberFormatter.numberCurrency(
widget.totalInvest * e.value.totalPercent!,
totalInvest * e.value.totalPercent!,
'Rp ',
'id_ID'),
textAlign: TextAlign.end,
@@ -129,7 +127,7 @@ class _TotalPaymentViewState extends State<TotalPaymentView> {
),
Text(
NumberFormatter.numberCurrency(
widget.totalInvest, 'Rp ', 'id_ID'),
totalInvest, 'Rp ', 'id_ID'),
textAlign: TextAlign.end,
style: const TextStyle(
fontWeight: FontWeight.w700,
@@ -139,7 +137,14 @@ class _TotalPaymentViewState extends State<TotalPaymentView> {
],
),
),
buttonAgreement(),
RadioAgreement(
isAgree: isAgree,
desc: 'I agree to buy the mutual fund on this page and have read and agreed to all the contents of the Prospectus and summary information and understand the risks of my investment decision. Read More',
onTap: () {
print('gagaga');
onTapAgree();
},
),
Container(
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
child: Row(
@@ -154,7 +159,7 @@ class _TotalPaymentViewState extends State<TotalPaymentView> {
),
Text(
NumberFormatter.numberCurrency(
widget.totalInvest, 'Rp ', 'id_ID'),
totalInvest, 'Rp ', 'id_ID'),
textAlign: TextAlign.end,
style: const TextStyle(
fontWeight: FontWeight.w700,
@@ -165,16 +170,16 @@ class _TotalPaymentViewState extends State<TotalPaymentView> {
),
),
ButtonView(
disabled: !isAgreement,
disabled: !isAgree,
name: 'Subscribe Now',
onPressed: () {
routePush(context,
page: PaymentMethodView(
totalInvest: widget.totalInvest,
totalInvest: totalInvest,
));
},
disabledBgColor: ColorPalette.slate200.withOpacity(0.5),
textColor: isAgreement ? Colors.white : ColorPalette.slate400,
textColor: isAgree ? Colors.white : ColorPalette.slate400,
textWeight: FontWeight.w700,
textSize: 20,
backgroundColor: ColorPalette.primary,
@@ -185,71 +190,67 @@ class _TotalPaymentViewState extends State<TotalPaymentView> {
);
}
Widget buttonAgreement() {
bool isAgree = isAgreement;
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
GestureDetector(
onTap: () {
setState(() {
isAgreement = !isAgreement;
});
},
child: AnimatedContainer(
margin: const EdgeInsets.only(top: 4),
duration: const Duration(milliseconds: 200),
height: 16,
width: 16,
padding: const EdgeInsets.all(1),
alignment: Alignment.center,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: isAgree
? ColorPalette.primary
: ColorPalette.slate200)),
child: AnimatedContainer(
duration: const Duration(milliseconds: 200),
child: Container(
decoration: BoxDecoration(
color:
isAgree ? ColorPalette.primary : ColorPalette.white,
shape: BoxShape.circle),
),
),
),
),
const SizedBox(
width: 12,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'I agree to buy the mutual fund on this page and have read and agreed to all the contents of the Prospectus and summary information and understand the risks of my investment decision.',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
color: ColorPalette.slate400),
),
GestureDetector(
onTap: () {},
child: const Text(
'Read More',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
decoration: TextDecoration.underline,
color: ColorPalette.primary),
))
],
))
],
),
);
}
// Widget buttonAgreement() {
// return Padding(
// padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
// child: Row(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// GestureDetector(
// onTap: () {
// },
// child: AnimatedContainer(
// margin: const EdgeInsets.only(top: 4),
// duration: const Duration(milliseconds: 200),
// height: 16,
// width: 16,
// padding: const EdgeInsets.all(1),
// alignment: Alignment.center,
// decoration: BoxDecoration(
// shape: BoxShape.circle,
// border: Border.all(
// color: isAgree
// ? ColorPalette.primary
// : ColorPalette.slate200)),
// child: AnimatedContainer(
// duration: const Duration(milliseconds: 200),
// child: Container(
// decoration: BoxDecoration(
// color:
// isAgree ? ColorPalette.primary : ColorPalette.white,
// shape: BoxShape.circle),
// ),
// ),
// ),
// ),
// const SizedBox(
// width: 12,
// ),
// Expanded(
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// const Text(
// 'I agree to buy the mutual fund on this page and have read and agreed to all the contents of the Prospectus and summary information and understand the risks of my investment decision.',
// style: TextStyle(
// fontSize: 16,
// fontWeight: FontWeight.w600,
// color: ColorPalette.slate400),
// ),
// GestureDetector(
// onTap: () {},
// child: const Text(
// 'Read More',
// style: TextStyle(
// fontSize: 16,
// fontWeight: FontWeight.w600,
// decoration: TextDecoration.underline,
// color: ColorPalette.primary),
// ))
// ],
// ))
// ],
// ),
// );
// }
}