Compare commits
14 Commits
23d189c288
...
5cb76fca7f
Author | SHA1 | Date | |
---|---|---|---|
5cb76fca7f | |||
e86e67b9c9 | |||
a6248520ef | |||
eb1eb83d52 | |||
7706fe4387 | |||
9da1675250 | |||
298d7f46d2 | |||
368f326123 | |||
a574f30424 | |||
3c1f7e210a | |||
b3a68b4436 | |||
ce2bf8a777 | |||
7e9c109fa2 | |||
8537045d74 |
BIN
assets/icons/icon-cake.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
assets/icons/icon-ceklis-outline.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
assets/icons/icon-create-plan.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
assets/icons/icon-house.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/icons/icon-toga.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
assets/images/frame-signature.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
assets/images/img-finish.png
Normal file
After Width: | Height: | Size: 105 KiB |
|
@ -33,6 +33,12 @@ class PathAssets {
|
||||||
static const String iconMoneyReceive = 'assets/icons/icon-money-receive.png';
|
static const String iconMoneyReceive = 'assets/icons/icon-money-receive.png';
|
||||||
static const String iconCoins = 'assets/icons/icon-coins.png';
|
static const String iconCoins = 'assets/icons/icon-coins.png';
|
||||||
static const String iconQuestion = 'assets/icons/icon-question.png';
|
static const String iconQuestion = 'assets/icons/icon-question.png';
|
||||||
|
static const String iconCake = 'assets/icons/icon-cake.png';
|
||||||
|
static const String iconHouse = 'assets/icons/icon-house.png';
|
||||||
|
static const String iconToga = 'assets/icons/icon-toga.png';
|
||||||
|
static const String iconCreatePlan = 'assets/icons/icon-create-plan.png';
|
||||||
|
static const String iconChecklistOutlined =
|
||||||
|
'assets/icons/icon-ceklis-outline.png';
|
||||||
|
|
||||||
/// IMAGE
|
/// IMAGE
|
||||||
static const String imgSplashLogo = 'assets/images/splash-logo.png';
|
static const String imgSplashLogo = 'assets/images/splash-logo.png';
|
||||||
|
@ -66,4 +72,6 @@ class PathAssets {
|
||||||
static const String imgGuideBank = 'assets/images/img-guide-bank.png';
|
static const String imgGuideBank = 'assets/images/img-guide-bank.png';
|
||||||
static const String imgGuide1 = 'assets/images/img-guide1.png';
|
static const String imgGuide1 = 'assets/images/img-guide1.png';
|
||||||
static const String imgGuide2 = 'assets/images/img-guide2.png';
|
static const String imgGuide2 = 'assets/images/img-guide2.png';
|
||||||
|
static const String frameSignature = 'assets/images/frame-signature.png';
|
||||||
|
static const String imgFinish = 'assets/images/img-finish.png';
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,10 @@ import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
import 'package:cims_apps/core/utils/size_config.dart';
|
import 'package:cims_apps/core/utils/size_config.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class ButtonBack extends StatelessWidget {
|
class BackButtonView extends StatelessWidget {
|
||||||
final EdgeInsets? margin;
|
final EdgeInsets? margin;
|
||||||
final void Function()? onPress;
|
final void Function()? onPress;
|
||||||
const ButtonBack({super.key, this.margin, this.onPress});
|
const BackButtonView({super.key, this.margin, this.onPress});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
@ -16,7 +16,7 @@ class ButtonBack extends StatelessWidget {
|
||||||
style: IconButton.styleFrom(
|
style: IconButton.styleFrom(
|
||||||
backgroundColor: Colors.white,
|
backgroundColor: Colors.white,
|
||||||
shape: const CircleBorder(
|
shape: const CircleBorder(
|
||||||
side: BorderSide(color: ColorPalette.slate200)
|
side: BorderSide(color: ColorPalette.slate200)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
onPressed: onPress ?? () => Navigator.pop(context),
|
onPressed: onPress ?? () => Navigator.pop(context),
|
42
lib/application/component/custom_app_bar/custom_app_bar.dart
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
import 'package:cims_apps/application/component/button/back_button_view.dart';
|
||||||
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||||
|
final Widget? leading;
|
||||||
|
final String title;
|
||||||
|
final List<Widget>? trailing;
|
||||||
|
final double height;
|
||||||
|
|
||||||
|
const CustomAppBar({
|
||||||
|
Key? key,
|
||||||
|
required this.height,
|
||||||
|
this.leading,
|
||||||
|
required this.title,
|
||||||
|
this.trailing,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 24),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border(bottom: BorderSide(color: ColorPalette.slate200))
|
||||||
|
),
|
||||||
|
child: AppBar(
|
||||||
|
toolbarHeight: 70,
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
surfaceTintColor: Colors.white,
|
||||||
|
automaticallyImplyLeading: false,
|
||||||
|
leadingWidth: 40,
|
||||||
|
leading: leading ?? BackButtonView(),
|
||||||
|
title: Text(title),
|
||||||
|
centerTitle: true,
|
||||||
|
actions: trailing ?? [],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Size get preferredSize => Size.fromHeight(height);
|
||||||
|
}
|
59
lib/application/component/goal_investing_view.dart
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
import 'package:cims_apps/application/assets/path_assets.dart';
|
||||||
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
|
import 'package:cims_apps/core/utils/size_config.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class GoalInvest {
|
||||||
|
String icon;
|
||||||
|
String title;
|
||||||
|
|
||||||
|
GoalInvest(this.icon, this.title);
|
||||||
|
}
|
||||||
|
|
||||||
|
class GoalInvestingView extends StatelessWidget {
|
||||||
|
const GoalInvestingView({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
List<GoalInvest> listGoalInvest = [
|
||||||
|
GoalInvest(PathAssets.iconToga, 'Education'),
|
||||||
|
GoalInvest(PathAssets.iconCake, 'Marriage'),
|
||||||
|
GoalInvest(PathAssets.iconHouse, 'Old age days'),
|
||||||
|
GoalInvest(PathAssets.iconCreatePlan, 'Create Plan'),
|
||||||
|
];
|
||||||
|
|
||||||
|
return Column(
|
||||||
|
children:
|
||||||
|
listGoalInvest.asMap().entries.map((e) {
|
||||||
|
return Padding(
|
||||||
|
padding: EdgeInsets.only(top: e.key != 0 ? 16 : 0),
|
||||||
|
child: ListTile(
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
side: BorderSide(color: ColorPalette.slate200),
|
||||||
|
borderRadius: BorderRadius.circular(14)
|
||||||
|
),
|
||||||
|
leading: Container(
|
||||||
|
padding: EdgeInsets.all(4),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: ColorPalette.blue200.withOpacity(0.5),
|
||||||
|
borderRadius: BorderRadius.circular(8)
|
||||||
|
),
|
||||||
|
child: Image.asset(
|
||||||
|
e.value.icon,
|
||||||
|
width: SizeConfig.width * 0.07
|
||||||
|
)
|
||||||
|
),
|
||||||
|
contentPadding: EdgeInsets.symmetric(horizontal: 16, vertical: 4),
|
||||||
|
title: Text(e.value.title,
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
fontSize: 16
|
||||||
|
),
|
||||||
|
),
|
||||||
|
trailing: Icon(Icons.chevron_right_rounded),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}).toList()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
70
lib/application/component/list_tile/list_tile_view.dart
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
import 'package:cims_apps/application/assets/path_assets.dart';
|
||||||
|
import 'package:cims_apps/application/component/image/image_view.dart';
|
||||||
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
|
import 'package:cims_apps/core/utils/size_config.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class ListTileView extends StatelessWidget {
|
||||||
|
final String title;
|
||||||
|
final VoidCallback? onPressed;
|
||||||
|
final Widget? prefixIcon, suffixIcon;
|
||||||
|
final Color? colorTitle;
|
||||||
|
const ListTileView(
|
||||||
|
{Key? key,
|
||||||
|
required this.title,
|
||||||
|
this.onPressed,
|
||||||
|
this.prefixIcon,
|
||||||
|
this.suffixIcon,
|
||||||
|
this.colorTitle})
|
||||||
|
: super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
width: SizeConfig.width,
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 16.0, horizontal: 8.0),
|
||||||
|
margin: const EdgeInsets.symmetric(vertical: 16.0),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: ColorPalette.blue50,
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
border: Border.all(
|
||||||
|
color: ColorPalette.greyLights,
|
||||||
|
width: 1,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
prefixIcon ??
|
||||||
|
const ImageView(
|
||||||
|
image: PathAssets.iconChecklistOutlined,
|
||||||
|
width: 38,
|
||||||
|
height: 38,
|
||||||
|
),
|
||||||
|
const SizedBox(
|
||||||
|
width: 16,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
title,
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
color: colorTitle ?? ColorPalette.slate500,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
suffixIcon != null
|
||||||
|
? IconButton(
|
||||||
|
onPressed: onPressed,
|
||||||
|
icon: const Icon(
|
||||||
|
Icons.arrow_forward_ios,
|
||||||
|
color: ColorPalette.primary,
|
||||||
|
size: 20,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: const SizedBox(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
109
lib/application/component/numeric_pad/numeric_pad.dart
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
|
import 'package:cims_apps/core/utils/size_config.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class NumericPad extends StatelessWidget {
|
||||||
|
final Function(String) onNumberSelected;
|
||||||
|
final bool isPin;
|
||||||
|
const NumericPad({super.key, required this.onNumberSelected, this.isPin = false});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
numberWidget('1'),
|
||||||
|
dividerGradient(false, Alignment.bottomCenter, Alignment.topCenter),
|
||||||
|
numberWidget('2'),
|
||||||
|
dividerGradient(false, Alignment.bottomCenter, Alignment.topCenter),
|
||||||
|
numberWidget('3')
|
||||||
|
],
|
||||||
|
),
|
||||||
|
dividerGradient(true, Alignment.centerLeft, Alignment.centerRight),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
numberWidget('4'),
|
||||||
|
dividerGradient(false, Alignment.center, Alignment.center, fullColor: true),
|
||||||
|
numberWidget('5'),
|
||||||
|
dividerGradient(false, Alignment.center, Alignment.center, fullColor: true),
|
||||||
|
numberWidget('6')
|
||||||
|
],
|
||||||
|
),
|
||||||
|
dividerGradient(true, Alignment.centerLeft, Alignment.centerRight),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
isPin ? spaceWidget() : numberWidget('0'),
|
||||||
|
dividerGradient(false, Alignment.topCenter, Alignment.bottomCenter),
|
||||||
|
numberWidget(isPin ? '0' : '000'),
|
||||||
|
dividerGradient(false, Alignment.topCenter, Alignment.bottomCenter),
|
||||||
|
removeWidget()
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget dividerGradient(bool isHorizontal, AlignmentGeometry gradientFrom, AlignmentGeometry gradientTo, {bool fullColor = false}) {
|
||||||
|
return Container(
|
||||||
|
width: isHorizontal ? SizeConfig.width : 1,
|
||||||
|
height: isHorizontal ? 1 : SizeConfig.height * 0.11,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
gradient: LinearGradient(
|
||||||
|
colors: [
|
||||||
|
if(isHorizontal) ...[
|
||||||
|
ColorPalette.slate200.withOpacity(0)
|
||||||
|
],
|
||||||
|
ColorPalette.slate200,
|
||||||
|
fullColor ? ColorPalette.slate200 : ColorPalette.slate200.withOpacity(0)
|
||||||
|
],
|
||||||
|
begin: gradientFrom,
|
||||||
|
end: gradientTo
|
||||||
|
)
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget spaceWidget() {
|
||||||
|
return Expanded(
|
||||||
|
child: SizedBox()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget numberWidget(String number) {
|
||||||
|
return Expanded(
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
onNumberSelected(number);
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: SizeConfig.height * .028),
|
||||||
|
child: Text(
|
||||||
|
number,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 28,
|
||||||
|
fontWeight: FontWeight.bold
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget removeWidget() {
|
||||||
|
return Expanded(
|
||||||
|
child: Icon(
|
||||||
|
Icons.highlight_remove,
|
||||||
|
size: 28,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:cims_apps/application/assets/path_assets.dart';
|
import 'package:cims_apps/application/assets/path_assets.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_back.dart';
|
import 'package:cims_apps/application/component/button/back_button_view.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_view.dart';
|
import 'package:cims_apps/application/component/button/button_view.dart';
|
||||||
import 'package:cims_apps/application/component/image/image_view.dart';
|
import 'package:cims_apps/application/component/image/image_view.dart';
|
||||||
import 'package:cims_apps/application/component/text_form/text_form_view.dart';
|
import 'package:cims_apps/application/component/text_form/text_form_view.dart';
|
||||||
|
@ -61,7 +61,7 @@ class _LoginViewState extends State<LoginView> {
|
||||||
title: Row(
|
title: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
ButtonBack(),
|
BackButtonView(),
|
||||||
const Text('Sign In'),
|
const Text('Sign In'),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: SizeConfig.width * 0.1,
|
width: SizeConfig.width * 0.1,
|
||||||
|
@ -90,7 +90,7 @@ class _LoginViewState extends State<LoginView> {
|
||||||
currentPage++;
|
currentPage++;
|
||||||
pageController.jumpToPage(1);
|
pageController.jumpToPage(1);
|
||||||
} else {
|
} else {
|
||||||
routePush(context, page: RiskProfileView());
|
routePush(context, page: BottomNavigationView());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import 'package:cims_apps/application/assets/path_assets.dart';
|
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/button/button_view.dart';
|
||||||
import 'package:cims_apps/application/component/image/image_view.dart';
|
import 'package:cims_apps/application/component/image/image_view.dart';
|
||||||
|
import 'package:cims_apps/application/component/numeric_pad/numeric_pad.dart';
|
||||||
import 'package:cims_apps/application/component/text_form/text_form_view.dart';
|
import 'package:cims_apps/application/component/text_form/text_form_view.dart';
|
||||||
import 'package:cims_apps/application/component/text_title/text_title.dart';
|
import 'package:cims_apps/application/component/text_title/text_title.dart';
|
||||||
import 'package:cims_apps/application/theme/color_palette.dart';
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
|
@ -35,6 +36,7 @@ class PhoneNumberView extends StatelessWidget {
|
||||||
inputFormatters: [
|
inputFormatters: [
|
||||||
FilteringTextInputFormatter.deny(RegExp(r'^0'))
|
FilteringTextInputFormatter.deny(RegExp(r'^0'))
|
||||||
],
|
],
|
||||||
|
contentPadding: EdgeInsets.all(1),
|
||||||
prefixIcon: Container(
|
prefixIcon: Container(
|
||||||
width: SizeConfig.width * .23,
|
width: SizeConfig.width * .23,
|
||||||
padding:
|
padding:
|
||||||
|
@ -108,7 +110,7 @@ class PhoneNumberView extends StatelessWidget {
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
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/image/image_view.dart';
|
||||||
|
import 'package:cims_apps/application/component/text_caption/text_caption.dart';
|
||||||
|
import 'package:cims_apps/core/route/route.dart';
|
||||||
|
import 'package:cims_apps/features/bottom_navigation_view.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class RegistrationSuccessView extends StatelessWidget {
|
||||||
|
const RegistrationSuccessView({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
body: Container(
|
||||||
|
padding: const EdgeInsets.all(24.0),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
const ImageView(image: PathAssets.imgFinish),
|
||||||
|
const TextCaption(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
textAlignSubtitle: TextAlign.center,
|
||||||
|
title: 'Registration Successful!',
|
||||||
|
subtitle:
|
||||||
|
'Please wait for the data verification process so that you can start investing.',
|
||||||
|
),
|
||||||
|
const Spacer(),
|
||||||
|
ButtonView(
|
||||||
|
name: 'Next',
|
||||||
|
marginVertical: 0.0,
|
||||||
|
onPressed: () {
|
||||||
|
routePush(context, page: const BottomNavigationView());
|
||||||
|
},
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,112 @@
|
||||||
|
import 'package:cims_apps/application/component/button/back_button_view.dart';
|
||||||
|
import 'package:cims_apps/application/component/button/button_view.dart';
|
||||||
|
import 'package:cims_apps/application/component/list_tile/list_tile_view.dart';
|
||||||
|
import 'package:cims_apps/application/component/text_caption/text_caption.dart';
|
||||||
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
|
import 'package:cims_apps/core/route/route.dart';
|
||||||
|
import 'package:cims_apps/core/utils/size_config.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/view/submission_data/submission_parent.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class ConfirmBankAccount extends StatelessWidget {
|
||||||
|
const ConfirmBankAccount({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
List listData = [
|
||||||
|
{'title': 'Bank Name', 'subtitle': 'Bank Mandiri'},
|
||||||
|
{'title': 'Account Number', 'subtitle': '123002212084'},
|
||||||
|
{'title': 'Account Owner Name', 'subtitle': 'Muhamad Rosyidin'},
|
||||||
|
{'title': 'Name on ID card', 'subtitle': 'Muhamad Rosyidin'},
|
||||||
|
];
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
toolbarHeight: 70,
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
surfaceTintColor: Colors.white,
|
||||||
|
automaticallyImplyLeading: false,
|
||||||
|
title: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
const BackButtonView(),
|
||||||
|
const Text('Registration'),
|
||||||
|
SizedBox(
|
||||||
|
width: SizeConfig.width * 0.1,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
shape: const RoundedRectangleBorder(
|
||||||
|
side: BorderSide(color: ColorPalette.slate200)),
|
||||||
|
),
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
padding: const EdgeInsets.all(16.0),
|
||||||
|
child: SizedBox(
|
||||||
|
height: SizeConfig.height * .85,
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
const TextCaption(title: 'Bank account confirmation'),
|
||||||
|
SizedBox(
|
||||||
|
height: SizeConfig.height * .6,
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
...listData.map((e) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 16.0),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
e['title'],
|
||||||
|
style: const TextStyle(
|
||||||
|
color: ColorPalette.slate400, fontSize: 16),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
e['subtitle'],
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
color: ColorPalette.slate800,
|
||||||
|
fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
const ListTileView(
|
||||||
|
title:
|
||||||
|
'Make sure your data is correct as it will affect the disbursement process',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
ButtonView(
|
||||||
|
name: 'Recheck',
|
||||||
|
isOutlined: true,
|
||||||
|
width: SizeConfig.width * .42,
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
ButtonView(
|
||||||
|
name: 'Confirm',
|
||||||
|
width: SizeConfig.width * .42,
|
||||||
|
onPressed: () {
|
||||||
|
routePush(context, page: const SubmissionParent());
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:cims_apps/application/assets/path_assets.dart';
|
import 'package:cims_apps/application/assets/path_assets.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_back.dart';
|
import 'package:cims_apps/application/component/button/back_button_view.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_view.dart';
|
import 'package:cims_apps/application/component/button/button_view.dart';
|
||||||
import 'package:cims_apps/application/component/image/image_view.dart';
|
import 'package:cims_apps/application/component/image/image_view.dart';
|
||||||
import 'package:cims_apps/application/component/text_caption/text_caption.dart';
|
import 'package:cims_apps/application/component/text_caption/text_caption.dart';
|
||||||
|
@ -93,7 +93,7 @@ class GuideScreen extends StatelessWidget {
|
||||||
title: Row(
|
title: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
const ButtonBack(),
|
const BackButtonView(),
|
||||||
const Text('Guide'),
|
const Text('Guide'),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: SizeConfig.width * 0.1,
|
width: SizeConfig.width * 0.1,
|
||||||
|
|
|
@ -6,7 +6,9 @@ import 'package:cims_apps/application/component/text_form/text_form_view.dart';
|
||||||
import 'package:cims_apps/application/theme/color_palette.dart';
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
import 'package:cims_apps/core/route/route.dart';
|
import 'package:cims_apps/core/route/route.dart';
|
||||||
import 'package:cims_apps/features/auth/registration/view/submission_data/data_bank/guide_screen.dart';
|
import 'package:cims_apps/features/auth/registration/view/submission_data/data_bank/guide_screen.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/viewmodel/submission_data_viewmodel.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class SubmitBankAccount extends StatelessWidget {
|
class SubmitBankAccount extends StatelessWidget {
|
||||||
const SubmitBankAccount({Key? key}) : super(key: key);
|
const SubmitBankAccount({Key? key}) : super(key: key);
|
||||||
|
@ -20,37 +22,48 @@ class SubmitBankAccount extends StatelessWidget {
|
||||||
ItemSelectForm('key4', 'BANK MANDIRI'),
|
ItemSelectForm('key4', 'BANK MANDIRI'),
|
||||||
ItemSelectForm('key5', 'CIMB NIAGA'),
|
ItemSelectForm('key5', 'CIMB NIAGA'),
|
||||||
];
|
];
|
||||||
return SingleChildScrollView(
|
return MultiProvider(
|
||||||
child: Column(
|
providers: [
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
ChangeNotifierProvider(
|
||||||
children: [
|
create: (context) => SubmissionDataViewModel(),
|
||||||
const TextCaption(title: 'Input your bank account data'),
|
|
||||||
SelectFormView(
|
|
||||||
name: 'Bank Name',
|
|
||||||
listItem: listForm,
|
|
||||||
onSelect: (value) {},
|
|
||||||
),
|
|
||||||
TextFormView(
|
|
||||||
name: 'Account Number',
|
|
||||||
trailingTitleWidget: SizedBox(
|
|
||||||
width: 24,
|
|
||||||
child: GestureDetector(
|
|
||||||
onTap: () {
|
|
||||||
routePush(context, page: GuideScreen());
|
|
||||||
},
|
|
||||||
child: const ImageView(image: PathAssets.iconQuestion),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
TextFormView(name: 'Account Owner Name'),
|
|
||||||
const Text(
|
|
||||||
"Make sure the account you use is in your name, not someone else's",
|
|
||||||
style: TextStyle(
|
|
||||||
color: ColorPalette.slate400,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
builder: (context, child) {
|
||||||
);
|
return SizedBox(
|
||||||
|
child: Consumer<SubmissionDataViewModel>(
|
||||||
|
builder: (context, provider, child) {
|
||||||
|
return Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
const TextCaption(title: 'Input your bank account data'),
|
||||||
|
SelectFormView(
|
||||||
|
name: 'Bank Name',
|
||||||
|
listItem: listForm,
|
||||||
|
onSelect: (value) {},
|
||||||
|
),
|
||||||
|
TextFormView(
|
||||||
|
name: 'Account Number',
|
||||||
|
trailingTitleWidget: SizedBox(
|
||||||
|
width: 24,
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
routePush(context, page: const GuideScreen());
|
||||||
|
},
|
||||||
|
child: const ImageView(image: PathAssets.iconQuestion),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TextFormView(name: 'Account Owner Name'),
|
||||||
|
const Text(
|
||||||
|
"Make sure the account you use is in your name, not someone else's",
|
||||||
|
style: TextStyle(
|
||||||
|
color: ColorPalette.slate400,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:cims_apps/application/assets/path_assets.dart';
|
import 'package:cims_apps/application/assets/path_assets.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_back.dart';
|
import 'package:cims_apps/application/component/button/back_button_view.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_view.dart';
|
import 'package:cims_apps/application/component/button/button_view.dart';
|
||||||
import 'package:cims_apps/application/component/image/image_view.dart';
|
import 'package:cims_apps/application/component/image/image_view.dart';
|
||||||
import 'package:cims_apps/application/theme/color_palette.dart';
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
|
@ -37,7 +37,7 @@ class _QuestionViewState extends State<QuestionView> {
|
||||||
title: Row(
|
title: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
ButtonBack(),
|
BackButtonView(),
|
||||||
const Text('Risk Profile', textAlign: TextAlign.center),
|
const Text('Risk Profile', textAlign: TextAlign.center),
|
||||||
SizedBox(width: SizeConfig.width * 0.1)
|
SizedBox(width: SizeConfig.width * 0.1)
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,19 +1,17 @@
|
||||||
import 'package:cims_apps/application/assets/path_assets.dart';
|
import 'package:cims_apps/application/component/button/back_button_view.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_back.dart';
|
|
||||||
import 'package:cims_apps/application/component/button/button_view.dart';
|
import 'package:cims_apps/application/component/button/button_view.dart';
|
||||||
import 'package:cims_apps/application/component/image/image_view.dart';
|
|
||||||
import 'package:cims_apps/application/theme/color_palette.dart';
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
import 'package:cims_apps/core/route/route.dart';
|
import 'package:cims_apps/core/route/route.dart';
|
||||||
import 'package:cims_apps/core/utils/size_config.dart';
|
import 'package:cims_apps/core/utils/size_config.dart';
|
||||||
import 'package:cims_apps/features/auth/registration/view/registration_password_view.dart';
|
|
||||||
import 'package:cims_apps/features/auth/registration/view/submission_data/risk_profile/risk_profile_view_model/risk_profile_view_model.dart';
|
import 'package:cims_apps/features/auth/registration/view/submission_data/risk_profile/risk_profile_view_model/risk_profile_view_model.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/view/submission_data/terms_and_condition/terms_and_condition_view.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
|
|
||||||
class ResultsView extends StatelessWidget {
|
class ResultsView extends StatelessWidget {
|
||||||
final String totalScore;
|
final String totalScore;
|
||||||
final RiskProfileResult typeResult;
|
final RiskProfileResult typeResult;
|
||||||
const ResultsView({super.key, required this.typeResult, required this.totalScore});
|
const ResultsView(
|
||||||
|
{super.key, required this.typeResult, required this.totalScore});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
@ -26,19 +24,16 @@ class ResultsView extends StatelessWidget {
|
||||||
title: Row(
|
title: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
ButtonBack(),
|
const BackButtonView(),
|
||||||
const Text('Risk Profile', textAlign: TextAlign.center),
|
const Text('Risk Profile', textAlign: TextAlign.center),
|
||||||
SizedBox(
|
SizedBox(width: SizeConfig.width * 0.1)
|
||||||
width: SizeConfig.width * 0.1
|
|
||||||
)
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
shape: const RoundedRectangleBorder(
|
shape: const RoundedRectangleBorder(
|
||||||
side: BorderSide(color: ColorPalette.slate200)
|
side: BorderSide(color: ColorPalette.slate200)),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
padding: EdgeInsets.all(24),
|
padding: const EdgeInsets.all(24),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
|
@ -46,39 +41,41 @@ class ResultsView extends StatelessWidget {
|
||||||
borderRadius: BorderRadius.circular(8),
|
borderRadius: BorderRadius.circular(8),
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: typeResult.color,
|
color: typeResult.color,
|
||||||
image: DecorationImage(image: AssetImage(typeResult.img), alignment: Alignment.centerRight)
|
image: DecorationImage(
|
||||||
),
|
image: AssetImage(typeResult.img),
|
||||||
|
alignment: Alignment.centerRight)),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Container(
|
||||||
padding: EdgeInsets.all(24),
|
padding: const EdgeInsets.all(24),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
typeResult.type,
|
typeResult.type,
|
||||||
style: TextStyle(
|
style: const TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 24,
|
fontSize: 24,
|
||||||
color: ColorPalette.white
|
color: ColorPalette.white),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
SizedBox(height: 16,),
|
const SizedBox(
|
||||||
Text('Total Score :',
|
height: 16,
|
||||||
|
),
|
||||||
|
const Text(
|
||||||
|
'Total Score :',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
color: ColorPalette.white
|
color: ColorPalette.white),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
Text(totalScore,
|
Text(
|
||||||
style: TextStyle(
|
totalScore,
|
||||||
|
style: const TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 28,
|
fontSize: 28,
|
||||||
color: ColorPalette.white
|
color: ColorPalette.white),
|
||||||
),
|
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -87,35 +84,30 @@ class ResultsView extends StatelessWidget {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(
|
const SizedBox(
|
||||||
height: 24,
|
height: 24,
|
||||||
),
|
),
|
||||||
Text(
|
Text(typeResult.desc,
|
||||||
typeResult.desc,
|
style: const TextStyle(
|
||||||
style: TextStyle(
|
color: ColorPalette.slate500, fontSize: 16)),
|
||||||
color: ColorPalette.slate500,
|
const SizedBox(
|
||||||
fontSize: 16
|
|
||||||
)
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
height: 24,
|
height: 24,
|
||||||
),
|
),
|
||||||
Text(
|
const Text(
|
||||||
'Suitable Product',
|
'Suitable Product',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: ColorPalette.slate800,
|
color: ColorPalette.slate800,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 16
|
fontSize: 16),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
SizedBox(
|
const SizedBox(
|
||||||
height: 16,
|
height: 16,
|
||||||
),
|
),
|
||||||
Wrap(
|
Wrap(
|
||||||
runSpacing: 16,
|
runSpacing: 16,
|
||||||
children: typeResult.suitableProduct.map((e) {
|
children: typeResult.suitableProduct.map((e) {
|
||||||
return Container(
|
return Container(
|
||||||
padding: EdgeInsets.all(16),
|
padding: const EdgeInsets.all(16),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(6),
|
borderRadius: BorderRadius.circular(6),
|
||||||
border: Border.all(color: ColorPalette.slate200),
|
border: Border.all(color: ColorPalette.slate200),
|
||||||
|
@ -123,24 +115,24 @@ class ResultsView extends StatelessWidget {
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Container(
|
||||||
padding: EdgeInsets.all(8),
|
padding: const EdgeInsets.all(8),
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
shape: BoxShape.circle,
|
shape: BoxShape.circle,
|
||||||
color: typeResult.color.withOpacity(0.1)
|
color: typeResult.color.withOpacity(0.1)),
|
||||||
),
|
child: Image.asset(e['icon'],
|
||||||
child: Image.asset(e['icon'], width: SizeConfig.width * 0.07, color: typeResult.color)
|
width: SizeConfig.width * 0.07,
|
||||||
),
|
color: typeResult.color)),
|
||||||
SizedBox(
|
const SizedBox(
|
||||||
width: 12,
|
width: 12,
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(e['desc'],
|
child: Text(
|
||||||
style: TextStyle(
|
e['desc'],
|
||||||
fontSize: 16,
|
style: const TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontSize: 16,
|
||||||
color: ColorPalette.slate800
|
fontWeight: FontWeight.bold,
|
||||||
),
|
color: ColorPalette.slate800),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
@ -148,13 +140,12 @@ class ResultsView extends StatelessWidget {
|
||||||
);
|
);
|
||||||
}).toList(),
|
}).toList(),
|
||||||
),
|
),
|
||||||
SizedBox(
|
const SizedBox(
|
||||||
height: 32,
|
height: 32,
|
||||||
),
|
),
|
||||||
ButtonView(
|
ButtonView(
|
||||||
name: 'Re-test',
|
name: 'Re-test',
|
||||||
onPressed: () {
|
onPressed: () {},
|
||||||
},
|
|
||||||
marginVertical: 0,
|
marginVertical: 0,
|
||||||
backgroundColor: ColorPalette.white,
|
backgroundColor: ColorPalette.white,
|
||||||
textColor: ColorPalette.primary,
|
textColor: ColorPalette.primary,
|
||||||
|
@ -162,21 +153,21 @@ class ResultsView extends StatelessWidget {
|
||||||
isOutlined: true,
|
isOutlined: true,
|
||||||
textSize: 16,
|
textSize: 16,
|
||||||
heightWrapContent: true,
|
heightWrapContent: true,
|
||||||
contentPadding: EdgeInsets.all(16),
|
contentPadding: const EdgeInsets.all(16),
|
||||||
width: SizeConfig.width,
|
width: SizeConfig.width,
|
||||||
),
|
),
|
||||||
SizedBox(
|
const SizedBox(
|
||||||
height: 16,
|
height: 16,
|
||||||
),
|
),
|
||||||
ButtonView(
|
ButtonView(
|
||||||
name: 'Confirm',
|
name: 'Confirm',
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
routePush(context, page: DialogSuccess());
|
routePush(context, page: const TermsAndConditionView());
|
||||||
},
|
},
|
||||||
marginVertical: 0,
|
marginVertical: 0,
|
||||||
textSize: 16,
|
textSize: 16,
|
||||||
heightWrapContent: true,
|
heightWrapContent: true,
|
||||||
contentPadding: EdgeInsets.all(16),
|
contentPadding: const EdgeInsets.all(16),
|
||||||
width: SizeConfig.width,
|
width: SizeConfig.width,
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import 'package:cims_apps/application/assets/path_assets.dart';
|
import 'package:cims_apps/application/assets/path_assets.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_back.dart';
|
|
||||||
import 'package:cims_apps/application/component/button/button_view.dart';
|
import 'package:cims_apps/application/component/button/button_view.dart';
|
||||||
import 'package:cims_apps/application/component/image/image_view.dart';
|
import 'package:cims_apps/application/component/image/image_view.dart';
|
||||||
import 'package:cims_apps/application/theme/color_palette.dart';
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
|
@ -13,93 +12,75 @@ class RiskProfileView extends StatelessWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Container(
|
||||||
appBar: AppBar(
|
width: SizeConfig.width,
|
||||||
toolbarHeight: 70,
|
height: SizeConfig.height,
|
||||||
backgroundColor: Colors.white,
|
padding: EdgeInsets.all(24),
|
||||||
surfaceTintColor: Colors.white,
|
child: Column(
|
||||||
automaticallyImplyLeading: false,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
title: Row(
|
children: [
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
Column(
|
||||||
children: [
|
children: [
|
||||||
ButtonBack(),
|
ImageView(image: PathAssets.imgDataReport),
|
||||||
const Text('Risk Profile', textAlign: TextAlign.center),
|
SizedBox(
|
||||||
SizedBox(width: SizeConfig.width * 0.1)
|
height: 24,
|
||||||
],
|
),
|
||||||
),
|
Text(
|
||||||
shape: const RoundedRectangleBorder(
|
'Know Your Risk Profile',
|
||||||
side: BorderSide(color: ColorPalette.slate200)),
|
textAlign: TextAlign.center,
|
||||||
),
|
style: TextStyle(
|
||||||
body: Container(
|
color: ColorPalette.slate800,
|
||||||
width: SizeConfig.width,
|
fontWeight: FontWeight.bold,
|
||||||
height: SizeConfig.height,
|
fontSize: 24),
|
||||||
padding: EdgeInsets.all(24),
|
),
|
||||||
child: Column(
|
SizedBox(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
height: 12,
|
||||||
children: [
|
),
|
||||||
Column(
|
Text(
|
||||||
children: [
|
'We will provide recommendations that match your profile and risk tolerance level.',
|
||||||
ImageView(image: PathAssets.imgDataReport),
|
textAlign: TextAlign.center,
|
||||||
SizedBox(
|
style: TextStyle(
|
||||||
height: 24,
|
fontSize: 16,
|
||||||
),
|
fontWeight: FontWeight.w600,
|
||||||
Text(
|
color: ColorPalette.slate500),
|
||||||
'Know Your Risk Profile',
|
),
|
||||||
textAlign: TextAlign.center,
|
],
|
||||||
style: TextStyle(
|
),
|
||||||
color: ColorPalette.slate800,
|
Column(
|
||||||
fontWeight: FontWeight.bold,
|
children: [
|
||||||
fontSize: 24),
|
Row(
|
||||||
),
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
SizedBox(
|
children: [
|
||||||
height: 12,
|
ImageView(
|
||||||
),
|
image: PathAssets.iconShield,
|
||||||
Text(
|
width: 20,
|
||||||
'We will provide recommendations that match your profile and risk tolerance level.',
|
height: 22,
|
||||||
textAlign: TextAlign.center,
|
),
|
||||||
style: TextStyle(
|
SizedBox(
|
||||||
fontSize: 16,
|
width: 8,
|
||||||
fontWeight: FontWeight.w600,
|
),
|
||||||
color: ColorPalette.slate500),
|
Text(
|
||||||
),
|
'Your data is secure and encrypted',
|
||||||
],
|
style: TextStyle(
|
||||||
),
|
fontWeight: FontWeight.w600,
|
||||||
Column(
|
color: ColorPalette.primary,
|
||||||
children: [
|
fontSize: 16),
|
||||||
Row(
|
)
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
],
|
||||||
children: [
|
),
|
||||||
ImageView(
|
SizedBox(
|
||||||
image: PathAssets.iconShield,
|
height: 24,
|
||||||
width: 20,
|
),
|
||||||
height: 22,
|
ButtonView(
|
||||||
),
|
name: "Let's Start",
|
||||||
SizedBox(
|
onPressed: () {
|
||||||
width: 8,
|
routePush(context, page: QuestionView());
|
||||||
),
|
},
|
||||||
Text(
|
marginVertical: 0,
|
||||||
'Your data is secure and encrypted',
|
)
|
||||||
style: TextStyle(
|
],
|
||||||
fontWeight: FontWeight.w600,
|
)
|
||||||
color: ColorPalette.primary,
|
],
|
||||||
fontSize: 16),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
height: 24,
|
|
||||||
),
|
|
||||||
ButtonView(
|
|
||||||
name: "Let's Start",
|
|
||||||
onPressed: () {
|
|
||||||
routePush(context, page: QuestionView());
|
|
||||||
},
|
|
||||||
marginVertical: 0,
|
|
||||||
)
|
|
||||||
],
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,18 @@
|
||||||
|
import 'package:cims_apps/application/component/button/back_button_view.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_view.dart';
|
import 'package:cims_apps/application/component/button/button_view.dart';
|
||||||
import 'package:cims_apps/application/theme/color_palette.dart';
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
import 'package:cims_apps/core/route/route.dart';
|
import 'package:cims_apps/core/route/route.dart';
|
||||||
import 'package:cims_apps/core/utils/size_config.dart';
|
import 'package:cims_apps/core/utils/size_config.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/view/submission_data/data_bank/confirm_bank_account.dart';
|
||||||
import 'package:cims_apps/features/auth/registration/view/submission_data/data_bank/submit_bank_account.dart';
|
import 'package:cims_apps/features/auth/registration/view/submission_data/data_bank/submit_bank_account.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/view/submission_data/risk_profile/risk_profile_view.dart';
|
||||||
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_data_id_card.dart';
|
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_data_id_card.dart';
|
||||||
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_photo_ktp.dart';
|
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_photo_ktp.dart';
|
||||||
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_email.dart';
|
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_email.dart';
|
||||||
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_personal_data.dart';
|
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_personal_data.dart';
|
||||||
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_photo_selfie.dart';
|
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_photo_selfie.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_signature/initial_signature.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/view/submission_data/submit_signature/submit_signature.dart';
|
||||||
import 'package:cims_apps/features/auth/registration/viewmodel/submission_data_viewmodel.dart';
|
import 'package:cims_apps/features/auth/registration/viewmodel/submission_data_viewmodel.dart';
|
||||||
import 'package:cims_apps/features/bottom_navigation_view.dart';
|
import 'package:cims_apps/features/bottom_navigation_view.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
@ -24,7 +29,7 @@ class SubmissionParent extends StatefulWidget {
|
||||||
class _SubmissionParentState extends State<SubmissionParent> {
|
class _SubmissionParentState extends State<SubmissionParent> {
|
||||||
Widget _stepItem({bool isCurrentStep = false, bool isDone = false}) {
|
Widget _stepItem({bool isCurrentStep = false, bool isDone = false}) {
|
||||||
return Container(
|
return Container(
|
||||||
margin: const EdgeInsets.only(right: 4.0, left: 4.0),
|
margin: const EdgeInsets.only(right: 0.0, left: 4.0),
|
||||||
height: 6,
|
height: 6,
|
||||||
width: SizeConfig.width * .08,
|
width: SizeConfig.width * .08,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
|
@ -51,17 +56,26 @@ class _SubmissionParentState extends State<SubmissionParent> {
|
||||||
case 6:
|
case 6:
|
||||||
return const SubmitBankAccount();
|
return const SubmitBankAccount();
|
||||||
case 7:
|
case 7:
|
||||||
return Container(
|
return const InitialSignature();
|
||||||
child: Text("Step 7"),
|
|
||||||
);
|
|
||||||
case 8:
|
case 8:
|
||||||
return Container(
|
return const RiskProfileView();
|
||||||
child: Text("Step 8"),
|
|
||||||
);
|
|
||||||
case 9:
|
case 9:
|
||||||
return Container(
|
return const Text("Step 9");
|
||||||
child: Text("Step 9"),
|
}
|
||||||
);
|
}
|
||||||
|
|
||||||
|
_contentPush(int index) {
|
||||||
|
switch (index) {
|
||||||
|
case 6:
|
||||||
|
routePush(context, page: const ConfirmBankAccount());
|
||||||
|
case 7:
|
||||||
|
routePush(context, page: const SubmitSignature());
|
||||||
|
// case 8:
|
||||||
|
// return const RiskProfileView();
|
||||||
|
// case 9:
|
||||||
|
// return Container(
|
||||||
|
// child: Text("Step 9"),
|
||||||
|
// );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,15 +91,30 @@ class _SubmissionParentState extends State<SubmissionParent> {
|
||||||
routeType: RouteType.pushReplace);
|
routeType: RouteType.pushReplace);
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
child: Scaffold(
|
child: Consumer<SubmissionDataViewModel>(
|
||||||
appBar: AppBar(
|
builder: (context, provider, child) {
|
||||||
title: const Text('Registration'),
|
return Scaffold(
|
||||||
),
|
appBar: AppBar(
|
||||||
body: Stack(
|
toolbarHeight: 70,
|
||||||
children: [
|
backgroundColor: Colors.white,
|
||||||
Consumer<SubmissionDataViewModel>(
|
surfaceTintColor: Colors.white,
|
||||||
builder: (context, provider, child) {
|
automaticallyImplyLeading: false,
|
||||||
return Column(
|
title: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
const BackButtonView(),
|
||||||
|
const Text('Registration'),
|
||||||
|
SizedBox(
|
||||||
|
width: SizeConfig.width * 0.1,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
shape: const RoundedRectangleBorder(
|
||||||
|
side: BorderSide(color: ColorPalette.slate200)),
|
||||||
|
),
|
||||||
|
body: Stack(
|
||||||
|
children: [
|
||||||
|
Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
|
@ -111,7 +140,8 @@ class _SubmissionParentState extends State<SubmissionParent> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
provider.getCurrentStep == 3 ||
|
provider.getCurrentStep == 3 ||
|
||||||
provider.getCurrentStep == 4
|
provider.getCurrentStep == 4 ||
|
||||||
|
provider.getCurrentStep == 8
|
||||||
? const SizedBox()
|
? const SizedBox()
|
||||||
: Align(
|
: Align(
|
||||||
alignment: Alignment.bottomCenter,
|
alignment: Alignment.bottomCenter,
|
||||||
|
@ -119,16 +149,17 @@ class _SubmissionParentState extends State<SubmissionParent> {
|
||||||
name: 'Next',
|
name: 'Next',
|
||||||
marginVertical: 16.0,
|
marginVertical: 16.0,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
_contentPush(provider.getCurrentStep);
|
||||||
provider.nextSubmission(context);
|
provider.nextSubmission(context);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
);
|
),
|
||||||
}),
|
],
|
||||||
],
|
),
|
||||||
),
|
);
|
||||||
),
|
}),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
import 'package:cims_apps/application/assets/path_assets.dart';
|
||||||
|
import 'package:cims_apps/application/component/image/image_view.dart';
|
||||||
|
import 'package:cims_apps/application/component/list_tile/list_tile_view.dart';
|
||||||
|
import 'package:cims_apps/application/component/text_caption/text_caption.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/viewmodel/submission_data_viewmodel.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class InitialSignature extends StatelessWidget {
|
||||||
|
const InitialSignature({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return MultiProvider(
|
||||||
|
providers: [
|
||||||
|
ChangeNotifierProvider(
|
||||||
|
create: (context) => SubmissionDataViewModel(),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
builder: (context, child) {
|
||||||
|
return const Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
TextCaption(title: 'Draw your digital sign'),
|
||||||
|
ImageView(image: PathAssets.frameSignature),
|
||||||
|
ListTileView(
|
||||||
|
title:
|
||||||
|
'Make sure the sign you draw is match with your ID Card'),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
import 'dart:ui' as ui;
|
||||||
|
|
||||||
|
import 'package:cims_apps/application/component/button/back_button_view.dart';
|
||||||
|
import 'package:cims_apps/application/component/button/button_view.dart';
|
||||||
|
import 'package:cims_apps/application/component/list_tile/list_tile_view.dart';
|
||||||
|
import 'package:cims_apps/application/component/text_caption/text_caption.dart';
|
||||||
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
|
import 'package:cims_apps/core/route/route.dart';
|
||||||
|
import 'package:cims_apps/core/utils/size_config.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/view/submission_data/submission_parent.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/viewmodel/submission_data_viewmodel.dart';
|
||||||
|
import 'package:dotted_border/dotted_border.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:syncfusion_flutter_signaturepad/signaturepad.dart';
|
||||||
|
|
||||||
|
class SubmitSignature extends StatelessWidget {
|
||||||
|
const SubmitSignature({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
GlobalKey<SfSignaturePadState> signaturePadKey = GlobalKey();
|
||||||
|
return ChangeNotifierProvider(
|
||||||
|
create: (context) => SubmissionDataViewModel(),
|
||||||
|
builder: (context, child) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
toolbarHeight: 70,
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
surfaceTintColor: Colors.white,
|
||||||
|
automaticallyImplyLeading: false,
|
||||||
|
title: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
const BackButtonView(),
|
||||||
|
const Text('Registration'),
|
||||||
|
SizedBox(
|
||||||
|
width: SizeConfig.width * 0.1,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
shape: const RoundedRectangleBorder(
|
||||||
|
side: BorderSide(color: ColorPalette.slate200)),
|
||||||
|
),
|
||||||
|
body: Container(
|
||||||
|
padding: const EdgeInsets.all(16.0),
|
||||||
|
child: Consumer<SubmissionDataViewModel>(
|
||||||
|
builder: (context, provider, child) {
|
||||||
|
return Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
const TextCaption(title: 'Draw your digital sign'),
|
||||||
|
SizedBox(
|
||||||
|
height: SizeConfig.height * .28,
|
||||||
|
child: DottedBorder(
|
||||||
|
color: ColorPalette.primary,
|
||||||
|
borderType: BorderType.RRect,
|
||||||
|
radius: const Radius.circular(8),
|
||||||
|
padding: const EdgeInsets.all(6),
|
||||||
|
strokeWidth: 2.0,
|
||||||
|
dashPattern: const [14, 0, 0, 8],
|
||||||
|
child: SfSignaturePad(
|
||||||
|
key: signaturePadKey,
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const ListTileView(
|
||||||
|
title:
|
||||||
|
'Make sure the sign you draw is match with your ID Card'),
|
||||||
|
const Spacer(),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
ButtonView(
|
||||||
|
name: 'Delete',
|
||||||
|
isOutlined: true,
|
||||||
|
width: SizeConfig.width * .42,
|
||||||
|
onPressed: () {
|
||||||
|
signaturePadKey.currentState?.clear();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
ButtonView(
|
||||||
|
name: 'Next',
|
||||||
|
width: SizeConfig.width * .42,
|
||||||
|
onPressed: () async {
|
||||||
|
// ui.Image image = await _signaturePadKey.currentState!.toImage();
|
||||||
|
routePush(context, page: const SubmissionParent());
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,103 @@
|
||||||
|
import 'package:cims_apps/application/component/custom_app_bar/custom_app_bar.dart';
|
||||||
|
import 'package:cims_apps/application/component/button/button_view.dart';
|
||||||
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
|
import 'package:cims_apps/core/route/route.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/view/submission_data/submission_parent.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/viewmodel/submission_data_viewmodel.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class TermsAndConditionView extends StatelessWidget {
|
||||||
|
const TermsAndConditionView({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
List<String> listRules = [
|
||||||
|
'I have never committed nor been involved in any breach or violations of laws, especially that in financial terms such as corruption, manipulation, money laundering or terrorism',
|
||||||
|
'I have received comprehensive description from mutual marketing officers and fully understood Mutual Fund’s characteristics and therefore is ready for any risks occurring from investing in mutual fund',
|
||||||
|
'I have read and understood the content of prospectus, monthly report of mutual fun performance, products and other information related to the Mutual Fund that I am about to purchase',
|
||||||
|
'I fully understand that the Mutual Fund is the investment product of PT Gemilang Indonesia Manajemen Investasi and not the product of any selling agent',
|
||||||
|
'I fully understand that Investment Product is not included in Government Warranty or Deposit Warranty Institution and therefore such product is not guaranteed by government',
|
||||||
|
'I agree to relieve PT Gemilang Indonesia Manajemen Investasi any claims, cost and expenses related to or occurred due to PT Gemilang Indonesia Manajemen Investasi’s actions with regards to its instructions of my mutual fun unit transactions',
|
||||||
|
'I fully understand, consider and I am fully responsible for all the investment decision I have made without any influence of PT Gemilang Indonesia Manajemen Investasi or its employees, and;',
|
||||||
|
'I declare that all data I have presented are true',
|
||||||
|
'I am willing to comply with the provisions set forth in laws in the financial services sectors',
|
||||||
|
'PT Gemilang Indonesia Manajemen Investasi may refuse and close business relationship, refuse to transac with prospective customers and/or customers under UJK regulation No. 12/POJK. 01/2017 on the Implementation of Anti Money Laundering and Terrorism Funding Prevention Program in Financial Service Sector',
|
||||||
|
'I am willing to provide my data and information from PT Gemilang Indonesia Manajemen Investasi to groups'
|
||||||
|
];
|
||||||
|
|
||||||
|
return ChangeNotifierProvider(
|
||||||
|
create: (context) => SubmissionDataViewModel(),
|
||||||
|
builder: (context, child) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar:
|
||||||
|
const CustomAppBar(height: 70, title: 'Terms And Condition'),
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
padding: const EdgeInsets.all(24),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
const Text(
|
||||||
|
'In relevance with the data that i have submitted and in relation to the purchase of Mutual Fund Products, I hereby declare that:',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
color: ColorPalette.slate800),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 12),
|
||||||
|
...listRules.asMap().entries.map((e) {
|
||||||
|
return Padding(
|
||||||
|
padding: EdgeInsets.only(top: e.key != 0 ? 12 : 0),
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text('${e.key + 1}',
|
||||||
|
style: const TextStyle(
|
||||||
|
color: ColorPalette.slate500)),
|
||||||
|
const SizedBox(width: 12),
|
||||||
|
Expanded(
|
||||||
|
child: Text(e.value,
|
||||||
|
style: const TextStyle(
|
||||||
|
color: ColorPalette.slate500)))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
})
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
bottomNavigationBar: Consumer<SubmissionDataViewModel>(
|
||||||
|
builder: (context, provider, child) {
|
||||||
|
return Container(
|
||||||
|
height: 84,
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 24),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: ButtonView(
|
||||||
|
name: 'Decline',
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
marginVertical: 16,
|
||||||
|
backgroundColor: ColorPalette.white,
|
||||||
|
textColor: ColorPalette.primary,
|
||||||
|
isOutlined: true,
|
||||||
|
borderColor: ColorPalette.primary,
|
||||||
|
)),
|
||||||
|
const SizedBox(width: 16),
|
||||||
|
Expanded(
|
||||||
|
child: ButtonView(
|
||||||
|
name: 'Accept',
|
||||||
|
onPressed: () {
|
||||||
|
provider.nextSubmission(context);
|
||||||
|
routePush(context,
|
||||||
|
page: const SubmissionParent());
|
||||||
|
},
|
||||||
|
marginVertical: 16))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -34,6 +34,7 @@ class SubmissionDataViewModel extends ChangeNotifier {
|
||||||
} else {
|
} else {
|
||||||
//ToDo : Go To next step after completing the submission
|
//ToDo : Go To next step after completing the submission
|
||||||
}
|
}
|
||||||
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import 'package:cims_apps/application/theme/color_palette.dart';
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
import 'package:cims_apps/features/dashboard/dashboard_account/view/homepage/homepage_view.dart';
|
import 'package:cims_apps/features/dashboard/dashboard_account/view/homepage/homepage_view.dart';
|
||||||
|
import 'package:cims_apps/features/dashboard/dashboard_account/view/plan/plan_view.dart';
|
||||||
import 'package:cims_apps/features/dashboard/dashboard_account/view/portfolio/portfolio_view.dart';
|
import 'package:cims_apps/features/dashboard/dashboard_account/view/portfolio/portfolio_view.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
@ -18,9 +19,7 @@ class _BottomNavigationViewState extends State<BottomNavigationView> {
|
||||||
///TODO: masukan pagenya dilistWidget ini
|
///TODO: masukan pagenya dilistWidget ini
|
||||||
List<Widget> listWidget = [
|
List<Widget> listWidget = [
|
||||||
HomeView(),
|
HomeView(),
|
||||||
Container(
|
PlanView(),
|
||||||
color: Colors.redAccent,
|
|
||||||
),
|
|
||||||
Container(),
|
Container(),
|
||||||
PortofolioView(),
|
PortofolioView(),
|
||||||
Container(),
|
Container(),
|
||||||
|
@ -32,8 +31,8 @@ class _BottomNavigationViewState extends State<BottomNavigationView> {
|
||||||
label: 'Home',
|
label: 'Home',
|
||||||
),
|
),
|
||||||
BottomNavigationBarItem(
|
BottomNavigationBarItem(
|
||||||
icon: Icon(Icons.search),
|
icon: Icon(Icons.file_open),
|
||||||
label: 'Search',
|
label: 'Plan',
|
||||||
),
|
),
|
||||||
BottomNavigationBarItem(
|
BottomNavigationBarItem(
|
||||||
icon: Icon(Icons.compare_arrows),
|
icon: Icon(Icons.compare_arrows),
|
||||||
|
@ -51,20 +50,24 @@ class _BottomNavigationViewState extends State<BottomNavigationView> {
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: listWidget[_selectedIndex],
|
body: listWidget[_selectedIndex],
|
||||||
bottomNavigationBar: BottomNavigationBar(
|
bottomNavigationBar: Padding(
|
||||||
onTap: (value) {
|
padding: const EdgeInsets.symmetric(vertical: 12),
|
||||||
setState(() {
|
child: BottomNavigationBar(
|
||||||
_selectedIndex = value;
|
elevation: 0,
|
||||||
});
|
onTap: (value) {
|
||||||
},
|
setState(() {
|
||||||
currentIndex: _selectedIndex,
|
_selectedIndex = value;
|
||||||
items: listNavigation,
|
});
|
||||||
type: BottomNavigationBarType.fixed,
|
},
|
||||||
showUnselectedLabels: true,
|
currentIndex: _selectedIndex,
|
||||||
selectedItemColor: ColorPalette.primary,
|
items: listNavigation,
|
||||||
unselectedItemColor: Colors.black,
|
type: BottomNavigationBarType.fixed,
|
||||||
selectedLabelStyle: const TextStyle(color: ColorPalette.primary),
|
showUnselectedLabels: true,
|
||||||
unselectedLabelStyle: const TextStyle(color: Colors.black),
|
selectedItemColor: ColorPalette.primary,
|
||||||
|
unselectedItemColor: Colors.black,
|
||||||
|
selectedLabelStyle: const TextStyle(color: ColorPalette.primary),
|
||||||
|
unselectedLabelStyle: const TextStyle(color: Colors.black),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import 'package:cims_apps/application/assets/path_assets.dart';
|
import 'package:cims_apps/application/assets/path_assets.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_back.dart';
|
import 'package:cims_apps/application/component/button/back_button_view.dart';
|
||||||
import 'package:cims_apps/application/component/image/image_view.dart';
|
import 'package:cims_apps/application/component/image/image_view.dart';
|
||||||
import 'package:cims_apps/application/component/text_title/text_title.dart';
|
import 'package:cims_apps/application/component/text_title/text_title.dart';
|
||||||
import 'package:cims_apps/application/theme/color_palette.dart';
|
import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
|
@ -53,7 +53,7 @@ class _InvestTypeViewState extends State<InvestTypeView> {
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
const ButtonBack(),
|
const BackButtonView(),
|
||||||
TextTitle(title: widget.title, color: Colors.white),
|
TextTitle(title: widget.title, color: Colors.white),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: SizeConfig.width * 0.1,
|
width: SizeConfig.width * 0.1,
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
import 'package:cims_apps/application/component/custom_app_bar/custom_app_bar.dart';
|
||||||
|
import 'package:cims_apps/application/component/goal_investing_view.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class PlanView extends StatelessWidget {
|
||||||
|
const PlanView({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: CustomAppBar(height: 70, title: 'Investment Plan'),
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
padding: EdgeInsets.all(24),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
GoalInvestingView()
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:cims_apps/application/assets/path_assets.dart';
|
import 'package:cims_apps/application/assets/path_assets.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_back.dart';
|
import 'package:cims_apps/application/component/button/back_button_view.dart';
|
||||||
import 'package:cims_apps/application/component/button/button_view.dart';
|
import 'package:cims_apps/application/component/button/button_view.dart';
|
||||||
import 'package:cims_apps/application/component/image/image_view.dart';
|
import 'package:cims_apps/application/component/image/image_view.dart';
|
||||||
import 'package:cims_apps/application/component/text_form/text_form_view.dart';
|
import 'package:cims_apps/application/component/text_form/text_form_view.dart';
|
||||||
|
@ -112,7 +112,7 @@ class _ProductViewState extends State<ProductView> {
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
ButtonBack(),
|
BackButtonView(),
|
||||||
Wrap(
|
Wrap(
|
||||||
spacing: 12,
|
spacing: 12,
|
||||||
children: [
|
children: [
|
||||||
|
|
|
@ -5,8 +5,8 @@ import 'package:cims_apps/application/theme/color_palette.dart';
|
||||||
import 'package:cims_apps/core/route/route.dart';
|
import 'package:cims_apps/core/route/route.dart';
|
||||||
import 'package:cims_apps/core/utils/size_config.dart';
|
import 'package:cims_apps/core/utils/size_config.dart';
|
||||||
import 'package:cims_apps/features/auth/login/view/login_view.dart';
|
import 'package:cims_apps/features/auth/login/view/login_view.dart';
|
||||||
|
import 'package:cims_apps/features/auth/registration/view/initial_registration_step.dart';
|
||||||
import 'package:cims_apps/features/auth/registration/view/registration_view.dart';
|
import 'package:cims_apps/features/auth/registration/view/registration_view.dart';
|
||||||
import 'package:cims_apps/features/bottom_navigation_view.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class DashboardPublicView extends StatelessWidget {
|
class DashboardPublicView extends StatelessWidget {
|
||||||
|
@ -39,9 +39,11 @@ class DashboardPublicView extends StatelessWidget {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: Container(
|
body: Container(
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.only(
|
||||||
vertical: 32.0,
|
top: 32.0,
|
||||||
horizontal: 24.0,
|
bottom: 8.0,
|
||||||
|
left: 24.0,
|
||||||
|
right: 24.0,
|
||||||
),
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
@ -93,7 +95,9 @@ class DashboardPublicView extends StatelessWidget {
|
||||||
image: PathAssets.iconGoogle,
|
image: PathAssets.iconGoogle,
|
||||||
width: 26,
|
width: 26,
|
||||||
),
|
),
|
||||||
onPressed: () {},
|
onPressed: () {
|
||||||
|
routePush(context, page: const InitialRegistrationStep());
|
||||||
|
},
|
||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
|
|
@ -153,6 +153,14 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.6"
|
version: "1.0.6"
|
||||||
|
dotted_border:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: dotted_border
|
||||||
|
sha256: "108837e11848ca776c53b30bc870086f84b62ed6e01c503ed976e8f8c7df9c04"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
equatable:
|
equatable:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -49,6 +49,7 @@ dependencies:
|
||||||
path_provider: ^2.1.2
|
path_provider: ^2.1.2
|
||||||
path: ^1.8.3
|
path: ^1.8.3
|
||||||
syncfusion_flutter_signaturepad: ^24.2.4
|
syncfusion_flutter_signaturepad: ^24.2.4
|
||||||
|
dotted_border: ^2.1.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|