diff --git a/assets/icons/icon-card.png b/assets/icons/icon-card.png new file mode 100644 index 0000000..c9e8481 Binary files /dev/null and b/assets/icons/icon-card.png differ diff --git a/assets/icons/icon-chat.png b/assets/icons/icon-chat.png new file mode 100644 index 0000000..fd1483d Binary files /dev/null and b/assets/icons/icon-chat.png differ diff --git a/assets/icons/icon-logout.png b/assets/icons/icon-logout.png new file mode 100644 index 0000000..21d4825 Binary files /dev/null and b/assets/icons/icon-logout.png differ diff --git a/assets/icons/icon-profile.png b/assets/icons/icon-profile.png new file mode 100644 index 0000000..18f549b Binary files /dev/null and b/assets/icons/icon-profile.png differ diff --git a/assets/icons/icon-setting.png b/assets/icons/icon-setting.png new file mode 100644 index 0000000..94b467e Binary files /dev/null and b/assets/icons/icon-setting.png differ diff --git a/assets/images/bg-profile.png b/assets/images/bg-profile.png new file mode 100644 index 0000000..5962707 Binary files /dev/null and b/assets/images/bg-profile.png differ diff --git a/assets/images/img-cat-outlined.png b/assets/images/img-cat-outlined.png new file mode 100644 index 0000000..fa04c98 Binary files /dev/null and b/assets/images/img-cat-outlined.png differ diff --git a/lib/application/assets/path_assets.dart b/lib/application/assets/path_assets.dart index c4ba310..33c635e 100644 --- a/lib/application/assets/path_assets.dart +++ b/lib/application/assets/path_assets.dart @@ -64,6 +64,11 @@ class PathAssets { static const String iconFund = 'assets/icons/icon-fund.png'; static const String iconHome = 'assets/icons/icon-home.png'; static const String iconShop = 'assets/icons/icon-shop.png'; + static const String iconCard = 'assets/icons/icon-card.png'; + static const String iconChat = 'assets/icons/icon-chat.png'; + static const String iconLogout = 'assets/icons/icon-logout.png'; + static const String iconProfile = 'assets/icons/icon-profile.png'; + static const String iconSetting = 'assets/icons/icon-setting.png'; static const String iconGadgetOutline = 'assets/icons/icon-gadget-outline.png'; @@ -94,6 +99,7 @@ class PathAssets { static const String imgMoneyIncome = 'assets/images/img-money-income.png'; static const String imgGrowing = 'assets/images/img-growing.png'; static const String imgCat = 'assets/images/img-cat.png'; + static const String imgCatOutlined = 'assets/images/img-cat-outlined.png'; static const String imgDeer = 'assets/images/img-deer.png'; static const String imgLion = 'assets/images/img-lion.png'; static const String imgGuideBank = 'assets/images/img-guide-bank.png'; @@ -108,6 +114,7 @@ class PathAssets { 'assets/images/img-expand-purchase.png'; static const String imgEmptyTransaction = 'assets/images/img-empty-transaction.png'; + static const String bgProfile = 'assets/images/bg-profile.png'; static const Map goalInvestIcon = { 'Education': iconToga, diff --git a/lib/features/profile/model/list_menu_model.dart b/lib/features/profile/model/list_menu_model.dart new file mode 100644 index 0000000..90320ab --- /dev/null +++ b/lib/features/profile/model/list_menu_model.dart @@ -0,0 +1,8 @@ +import 'package:flutter/material.dart'; + +class ListMenuModel { + final String title, pathAsset; + final Widget page; + ListMenuModel( + {required this.title, required this.pathAsset, required this.page}); +} diff --git a/lib/features/profile/view/profile_view.dart b/lib/features/profile/view/profile_view.dart index fac17ac..4dbf7ba 100644 --- a/lib/features/profile/view/profile_view.dart +++ b/lib/features/profile/view/profile_view.dart @@ -1,5 +1,9 @@ -import 'package:cims_apps/application/component/custom_app_bar/custom_app_bar.dart'; +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/route/route.dart'; import 'package:cims_apps/core/utils/size_config.dart'; +import 'package:cims_apps/features/profile/model/list_menu_model.dart'; import 'package:flutter/material.dart'; class ProfileView extends StatelessWidget { @@ -7,8 +11,108 @@ class ProfileView extends StatelessWidget { @override Widget build(BuildContext context) { + List listMenuGeneral = [ + ListMenuModel( + title: 'Personal Data', + pathAsset: PathAssets.iconProfile, + page: Container()), + ListMenuModel( + title: 'Change Password', + pathAsset: PathAssets.iconLock, + page: Container()), + ListMenuModel( + title: 'Add Card', pathAsset: PathAssets.iconCard, page: Container()), + ListMenuModel( + title: 'Settings', + pathAsset: PathAssets.iconSetting, + page: Container()), + ]; + + List listMenuPreferences = [ + ListMenuModel( + title: 'FAQs', pathAsset: PathAssets.iconChat, page: Container()), + ListMenuModel( + title: 'Log Out', + pathAsset: PathAssets.iconLogout, + page: Container()), + ]; + TextStyle textStyle = const TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + color: Colors.white, + ); + + Widget cardContent( + {required String title, required List listMenu}) { + return Container( + width: SizeConfig.width, + padding: const EdgeInsets.all(16.0), + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(12))), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(title), + ...listMenu.map((e) { + return Padding( + padding: const EdgeInsets.only(top: 8.0), + child: ListTile( + title: Text(e.title), + contentPadding: EdgeInsets.zero, + leading: ImageView( + image: e.pathAsset, width: SizeConfig.width * .08), + trailing: const Icon(Icons.arrow_forward_ios, + color: ColorPalette.slate400), + onTap: () => routePush(context, page: e.page), + ), + ); + }), + ], + ), + ); + } + return Scaffold( - appBar: CustomAppBar(height: SizeConfig.height * .08, title: 'Profile'), + appBar: null, + body: Stack( + children: [ + ImageView(image: PathAssets.bgProfile, width: SizeConfig.width), + Container( + width: SizeConfig.width, + padding: const EdgeInsets.only(top: 40.0, left: 16.0, right: 16.0), + child: SingleChildScrollView( + padding: const EdgeInsets.only(bottom: 60.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text('Profile', style: textStyle), + Padding( + padding: const EdgeInsets.only(top: 40.0, bottom: 8.0), + child: ImageView( + image: PathAssets.imgCatOutlined, + width: SizeConfig.width * .28, + ), + ), + Text('Muhamad Rosyidin', + style: textStyle.copyWith(fontSize: 24)), + Text('Investor Conservative', + style: textStyle.copyWith( + fontSize: 16, + fontWeight: FontWeight.normal, + color: ColorPalette.green400, + )), + SizedBox(height: SizeConfig.height * .02), + cardContent(title: 'General', listMenu: listMenuGeneral), + SizedBox(height: SizeConfig.height * .03), + cardContent( + title: 'Preference', listMenu: listMenuPreferences), + ], + ), + ), + ), + ], + ), ); } }