diff --git a/README.md b/README.md index a6113067..4188f052 100644 Binary files a/README.md and b/README.md differ diff --git a/android/app/src/main/res/drawable-v21/background.png b/android/app/src/main/res/drawable-v21/background.png index 3107d37f..dca88f68 100644 Binary files a/android/app/src/main/res/drawable-v21/background.png and b/android/app/src/main/res/drawable-v21/background.png differ diff --git a/android/app/src/main/res/drawable/background.png b/android/app/src/main/res/drawable/background.png index 3107d37f..dca88f68 100644 Binary files a/android/app/src/main/res/drawable/background.png and b/android/app/src/main/res/drawable/background.png differ diff --git a/assets/image/bank/bank_investment.png b/assets/image/bank/bank_investment.png new file mode 100644 index 00000000..6ac36ea3 Binary files /dev/null and b/assets/image/bank/bank_investment.png differ diff --git a/assets/image/bank/bank_kakao.png b/assets/image/bank/bank_kakao.png new file mode 100644 index 00000000..2e9228b2 Binary files /dev/null and b/assets/image/bank/bank_kakao.png differ diff --git a/assets/image/bank/bank_shinhan.png b/assets/image/bank/bank_shinhan.png new file mode 100644 index 00000000..7a302522 Binary files /dev/null and b/assets/image/bank/bank_shinhan.png differ diff --git a/assets/image/bank/bank_toss.png b/assets/image/bank/bank_toss.png new file mode 100644 index 00000000..cd22f8dc Binary files /dev/null and b/assets/image/bank/bank_toss.png differ diff --git a/assets/image/benefit/benefit_01.png b/assets/image/benefit/benefit_01.png new file mode 100644 index 00000000..9dfc7c6d Binary files /dev/null and b/assets/image/benefit/benefit_01.png differ diff --git a/assets/image/benefit/benefit_02.png b/assets/image/benefit/benefit_02.png new file mode 100644 index 00000000..141d3c62 Binary files /dev/null and b/assets/image/benefit/benefit_02.png differ diff --git a/assets/image/benefit/benefit_03.png b/assets/image/benefit/benefit_03.png new file mode 100644 index 00000000..14353b1e Binary files /dev/null and b/assets/image/benefit/benefit_03.png differ diff --git a/assets/image/benefit/benefit_04.png b/assets/image/benefit/benefit_04.png new file mode 100644 index 00000000..1054dbaa Binary files /dev/null and b/assets/image/benefit/benefit_04.png differ diff --git a/assets/image/benefit/benefit_05.png b/assets/image/benefit/benefit_05.png new file mode 100644 index 00000000..eb86b608 Binary files /dev/null and b/assets/image/benefit/benefit_05.png differ diff --git a/assets/image/icon/map_point.png b/assets/image/icon/map_point.png new file mode 100644 index 00000000..71a68f3e Binary files /dev/null and b/assets/image/icon/map_point.png differ diff --git a/assets/image/icon/notification.png b/assets/image/icon/notification.png new file mode 100644 index 00000000..e03cebb2 Binary files /dev/null and b/assets/image/icon/notification.png differ diff --git a/assets/image/icon/plus.png b/assets/image/icon/plus.png new file mode 100644 index 00000000..1f7cbd45 Binary files /dev/null and b/assets/image/icon/plus.png differ diff --git a/assets/image/icon/setting.png b/assets/image/icon/setting.png new file mode 100644 index 00000000..da965362 Binary files /dev/null and b/assets/image/icon/setting.png differ diff --git a/assets/image/icon/stock_calendar.png b/assets/image/icon/stock_calendar.png new file mode 100644 index 00000000..c7eab8a2 Binary files /dev/null and b/assets/image/icon/stock_calendar.png differ diff --git a/assets/image/icon/stock_search.png b/assets/image/icon/stock_search.png new file mode 100644 index 00000000..d4d04997 Binary files /dev/null and b/assets/image/icon/stock_search.png differ diff --git a/assets/image/icon/stock_settings.png b/assets/image/icon/stock_settings.png new file mode 100644 index 00000000..10019558 Binary files /dev/null and b/assets/image/icon/stock_settings.png differ diff --git a/assets/image/icon/toss.png b/assets/image/icon/toss.png new file mode 100644 index 00000000..61645a4a Binary files /dev/null and b/assets/image/icon/toss.png differ diff --git a/assets/image/splash/android12splash.png b/assets/image/splash/android12splash.png new file mode 100644 index 00000000..218f95ce Binary files /dev/null and b/assets/image/splash/android12splash.png differ diff --git a/assets/image/splash/splash.png b/assets/image/splash/splash.png new file mode 100644 index 00000000..09c719cd Binary files /dev/null and b/assets/image/splash/splash.png differ diff --git a/flutter_native_splash.yaml b/flutter_native_splash.yaml index 15c7dc30..893a45e7 100644 --- a/flutter_native_splash.yaml +++ b/flutter_native_splash.yaml @@ -10,7 +10,7 @@ flutter_native_splash: # of your splash screen to a solid color. Use background_image to set the background of your # splash screen to a png image. This is useful for gradients. The image will be stretch to the # size of the app. Only one parameter can be used, color and background_image cannot both be set. - color: "#ffffff" + color: "#0a0a0e" #background_image: "assets/background.png" # Optional parameters are listed below. To enable a parameter, uncomment the line by removing @@ -18,7 +18,7 @@ flutter_native_splash: # The image parameter allows you to specify an image used in the splash screen. It must be a # png file and should be sized for 4x pixel density. - #image: assets/splash.png + image: assets/image/splash/splash.png # The branding property allows you to specify an image used as branding in the splash screen. # It must be a png file. It is supported for Android, iOS and the Web. For Android 12, @@ -50,10 +50,10 @@ flutter_native_splash: # 640 pixels in diameter. # App icon without an icon background: This should be 1152×1152 pixels, and fit within a circle # 768 pixels in diameter. - #image: assets/android12splash.png + image: assets/image/splash/android12splash.png # Splash screen background color. - #color: "#42a5f5" + color: "#0a0a0e" # App icon background color. #icon_background_color: "#111111" diff --git a/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png b/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png index 3107d37f..dca88f68 100644 Binary files a/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png and b/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png index 71e9c817..f1f33c86 100644 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png index 71e9c817..aa6f275f 100644 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png index 71e9c817..71d43bb3 100644 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard index 55c0caed..d88ac8ad 100644 --- a/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -38,7 +38,7 @@ - + diff --git a/lib/app.dart b/lib/app.dart index 56e34a07..6aebbe0b 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -9,7 +9,7 @@ class App extends StatefulWidget { static final GlobalKey navigatorKey = GlobalKey(); ///light, dark 테마가 준비되었고, 시스템 테마를 따라가게 하려면 해당 필드를 제거 하시면 됩니다. - static const defaultTheme = CustomTheme.light; + static const defaultTheme = CustomTheme.dark; static bool isForeground = true; const App({super.key}); diff --git a/lib/common/common.dart b/lib/common/common.dart index ed0350d8..dc24c6e2 100644 --- a/lib/common/common.dart +++ b/lib/common/common.dart @@ -23,6 +23,8 @@ export 'widget/w_empty_expanded.dart'; export 'widget/w_height_and_width.dart'; export 'widget/w_line.dart'; export 'widget/w_tap.dart'; +export 'theme/color/abs_theme_colors.dart'; +export 'theme/shadows/abs_theme_shadows.dart'; const defaultFontStyle = GoogleFonts.ptSerif; diff --git a/lib/common/constants.dart b/lib/common/constants.dart index f175db21..740a4faf 100644 --- a/lib/common/constants.dart +++ b/lib/common/constants.dart @@ -1,4 +1 @@ -export 'theme/color/abs_theme_colors.dart'; -export 'theme/shadows/abs_theme_shadows.dart'; - const basePath = 'assets/image'; diff --git a/lib/common/theme/color/abs_theme_colors.dart b/lib/common/theme/color/abs_theme_colors.dart index de9a3017..029a2270 100644 --- a/lib/common/theme/color/abs_theme_colors.dart +++ b/lib/common/theme/color/abs_theme_colors.dart @@ -45,4 +45,8 @@ abstract class AbstractThemeColors { Color get snackbarBgColor => AppColors.mediumBlue; Color get blueButtonBackground => AppColors.darkBlue; + + Color get appBarBackGround => const Color.fromARGB(255, 16, 16, 18); + + Color get buttonBackground => const Color.fromARGB(255, 24, 24, 24); } diff --git a/lib/common/theme/custom_theme_app.dart b/lib/common/theme/custom_theme_app.dart index b42ad780..689158a5 100644 --- a/lib/common/theme/custom_theme_app.dart +++ b/lib/common/theme/custom_theme_app.dart @@ -1,6 +1,6 @@ +import 'package:fast_app_base/app.dart'; import 'package:flutter/material.dart'; -import '../../app.dart'; import '../data/preference/prefs.dart'; import 'custom_theme.dart'; import 'custom_theme_holder.dart'; @@ -42,4 +42,4 @@ class _CustomThemeAppState extends State { return CustomTheme.light; } } -} +} \ No newline at end of file diff --git a/lib/common/widget/w_big_button.dart b/lib/common/widget/w_big_button.dart new file mode 100644 index 00000000..215b9981 --- /dev/null +++ b/lib/common/widget/w_big_button.dart @@ -0,0 +1,27 @@ +import 'package:fast_app_base/common/common.dart'; +import 'package:fast_app_base/common/widget/w_arrow.dart'; +import 'package:flutter/material.dart'; + +class BigButton extends StatelessWidget { + final String text; + final VoidCallback onTap; + + const BigButton(this.text,{super.key, required this.onTap}); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 15), + decoration: BoxDecoration( + color: context.appColors.buttonBackground, + borderRadius: BorderRadius.circular(20)), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children:[ + text.text.white.size(20).bold.make(), + Arrow(), + ], + ), + ); + } +} diff --git a/lib/common/widget/w_empty_expanded.dart b/lib/common/widget/w_empty_expanded.dart index 167d387c..5bba55df 100644 --- a/lib/common/widget/w_empty_expanded.dart +++ b/lib/common/widget/w_empty_expanded.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +const emptyExpanded = EmptyExpanded(); + class EmptyExpanded extends StatelessWidget { final int flex; diff --git a/lib/common/widget/w_height_and_width.dart b/lib/common/widget/w_height_and_width.dart index 6d29a55b..93123d5a 100644 --- a/lib/common/widget/w_height_and_width.dart +++ b/lib/common/widget/w_height_and_width.dart @@ -1,5 +1,11 @@ import 'package:flutter/material.dart'; +const width10 = Width(10); +const width5 = Width(5); + +const height10 = Height(10); +const height5 = Height(5); + class Height extends StatelessWidget { final double height; diff --git a/lib/main.dart b/lib/main.dart index f04f6d80..fc5d0df9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,11 +1,14 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'app.dart'; import 'common/data/preference/app_preferences.dart'; void main() async { - WidgetsFlutterBinding.ensureInitialized(); + final bindings = WidgetsFlutterBinding.ensureInitialized(); + // 네이티브 스플래쉬 화면 보존 + FlutterNativeSplash.preserve(widgetsBinding: bindings); await EasyLocalization.ensureInitialized(); await AppPreferences.init(); diff --git a/lib/screen/main/s_main.dart b/lib/screen/main/s_main.dart index fecafbc4..71338ad8 100644 --- a/lib/screen/main/s_main.dart +++ b/lib/screen/main/s_main.dart @@ -1,7 +1,9 @@ +import 'package:fast_app_base/common/cli_common.dart'; import 'package:fast_app_base/screen/main/tab/tab_item.dart'; import 'package:fast_app_base/screen/main/tab/tab_navigator.dart'; import 'package:flutter/material.dart'; - +import 'package:after_layout/after_layout.dart'; +import 'package:flutter_native_splash/flutter_native_splash.dart'; import '../../common/common.dart'; import 'w_menu_drawer.dart'; @@ -12,9 +14,15 @@ class MainScreen extends StatefulWidget { State createState() => MainScreenState(); } -class MainScreenState extends State with SingleTickerProviderStateMixin { +class MainScreenState extends State with SingleTickerProviderStateMixin, AfterLayoutMixin { TabItem _currentTab = TabItem.home; - final tabs = [TabItem.home, TabItem.favorite]; + final tabs = [TabItem.home, + TabItem.benefit, + TabItem.ttosspay, + TabItem.stock, + TabItem.all + ]; + final List> navigatorKeys = []; int get _currentIndex => tabs.indexOf(_currentTab); @@ -25,6 +33,14 @@ class MainScreenState extends State with SingleTickerProviderStateMi static double get bottomNavigationBarBorderRadius => 30.0; + // preserve한 splash를 제거 + @override + FutureOr afterFirstLayout(BuildContext context) { + delay((){ + FlutterNativeSplash.remove(); + }, 1500.ms); + } + @override void initState() { super.initState(); @@ -40,7 +56,6 @@ class MainScreenState extends State with SingleTickerProviderStateMi extendBody: extendBody, //bottomNavigationBar 아래 영역 까지 그림 drawer: const MenuDrawer(), body: Container( - color: context.appColors.seedColor.getMaterialColorValues[200], padding: EdgeInsets.only(bottom: extendBody ? 60 - bottomNavigationBarBorderRadius : 0), child: SafeArea( bottom: !extendBody, @@ -59,12 +74,12 @@ class MainScreenState extends State with SingleTickerProviderStateMi index: _currentIndex, children: tabs .mapIndexed((tab, index) => Offstage( - offstage: _currentTab != tab, - child: TabNavigator( - navigatorKey: navigatorKeys[index], - tabItem: tab, - ), - )) + offstage: _currentTab != tab, + child: TabNavigator( + navigatorKey: navigatorKeys[index], + tabItem: tab, + ), + )) .toList()); void _handleBackPressed(bool didPop) { @@ -110,10 +125,10 @@ class MainScreenState extends State with SingleTickerProviderStateMi return tabs .mapIndexed( (tab, index) => tab.toNavigationBarItem( - context, - isActivated: _currentIndex == index, - ), - ) + context, + isActivated: _currentIndex == index, + ), + ) .toList(); } diff --git a/lib/screen/main/tab/all/f_all.dart b/lib/screen/main/tab/all/f_all.dart new file mode 100644 index 00000000..9560439c --- /dev/null +++ b/lib/screen/main/tab/all/f_all.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class AllFragment extends StatefulWidget { + const AllFragment({super.key}); + + @override + State createState() => _AllFragmentState(); +} + +class _AllFragmentState extends State { + @override + Widget build(BuildContext context) { + return const Placeholder(); + } +} diff --git a/lib/screen/main/tab/benefit/f_benefit.dart b/lib/screen/main/tab/benefit/f_benefit.dart new file mode 100644 index 00000000..823dc581 --- /dev/null +++ b/lib/screen/main/tab/benefit/f_benefit.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class BenefitFragment extends StatefulWidget { + const BenefitFragment({super.key}); + + @override + State createState() => _BenefitFragmentState(); +} + +class _BenefitFragmentState extends State { + @override + Widget build(BuildContext context) { + return const Placeholder(); + } +} diff --git a/lib/screen/main/tab/favorite/f_favorite.dart b/lib/screen/main/tab/favorite/f_favorite.dart deleted file mode 100644 index 43f9ca1c..00000000 --- a/lib/screen/main/tab/favorite/f_favorite.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:fast_app_base/common/common.dart'; -import 'package:flutter/material.dart'; - -import '../../../../common/widget/round_button_theme.dart'; -import '../../../../common/widget/w_round_button.dart'; - -class FavoriteFragment extends StatelessWidget { - final bool isShowBackButton; - - const FavoriteFragment({ - Key? key, - this.isShowBackButton = true, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return Material( - child: SafeArea( - bottom: false, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (isShowBackButton) const BackButton(), - Expanded( - child: Container( - color: Colors.green.withOpacity(0.2), - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Row(), - RoundButton( - text: '즐겨찾기 화면 띄우기', - onTap: () => Nav.push(const FavoriteFragment(isShowBackButton: true), - context: context), - theme: RoundButtonTheme.blue, - ), - ]), - ), - ) - ], - ), - ), - ); - } -} diff --git a/lib/screen/main/tab/home/bank_account_dummy.dart b/lib/screen/main/tab/home/bank_account_dummy.dart new file mode 100644 index 00000000..65422524 --- /dev/null +++ b/lib/screen/main/tab/home/bank_account_dummy.dart @@ -0,0 +1,21 @@ +import 'package:fast_app_base/screen/main/tab/home/bank_dummy.dart'; +import 'package:fast_app_base/screen/main/tab/home/vo/vo_bank_account.dart'; + +final bankAccountShinhan1 = BankAccount(bankShinhan, 300000, accountTypeName: "신한 주거래 우대통장(저축예금)"); +final bankAccountShinhan2 = BankAccount(bankShinhan, 300000000, accountTypeName: "저축예금"); +final bankAccountShinhan3 = BankAccount(bankShinhan, 30000000000, accountTypeName: "저축예금"); +final bankAccountToss = BankAccount(bankTtoss, 50000); +final bankAccountKakao = BankAccount(bankKakao, 70000000, accountTypeName: "입출금 통장"); + + +main(){ + print('계좌: ${bankAccounts[0].accountTypeName}'); +} + +final bankAccounts = [ + bankAccountShinhan1, + bankAccountShinhan2, + bankAccountShinhan3, + bankAccountToss, + bankAccountKakao +]; diff --git a/lib/screen/main/tab/home/bank_dummy.dart b/lib/screen/main/tab/home/bank_dummy.dart new file mode 100644 index 00000000..c21d784e --- /dev/null +++ b/lib/screen/main/tab/home/bank_dummy.dart @@ -0,0 +1,6 @@ +import 'package:fast_app_base/common/constants.dart'; +import 'package:fast_app_base/screen/main/tab/home/vo/vo_bank.dart'; + +final bankShinhan = Bank("신한은행", '$basePath/bank/bank_shinhan.png'); +final bankKakao = Bank("카카오뱅크", '$basePath/bank/bank_kakao.png'); +final bankTtoss = Bank("토스뱅크", '$basePath/bank/bank_toss.png'); diff --git a/lib/screen/main/tab/home/f_home.dart b/lib/screen/main/tab/home/f_home.dart index 6b42957d..a032fc5c 100644 --- a/lib/screen/main/tab/home/f_home.dart +++ b/lib/screen/main/tab/home/f_home.dart @@ -1,7 +1,9 @@ import 'package:fast_app_base/common/common.dart'; import 'package:fast_app_base/common/widget/round_button_theme.dart'; +import 'package:fast_app_base/common/widget/w_big_button.dart'; import 'package:fast_app_base/common/widget/w_round_button.dart'; import 'package:fast_app_base/screen/dialog/d_message.dart'; +import 'package:fast_app_base/screen/main/tab/home/w_ttoss_app_bar.dart'; import 'package:flutter/material.dart'; import '../../../dialog/d_color_bottom.dart'; @@ -15,44 +17,23 @@ class HomeFragment extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - color: context.appColors.seedColor.getMaterialColorValues[100], - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, + color: Colors.black, + child: Stack( children: [ - Row( - children: [ - IconButton( - onPressed: () => openDrawer(context), - icon: const Icon(Icons.menu), - ) - ], + SingleChildScrollView( + padding: const EdgeInsets.only(top: 60), + child: Column( + children: [ + BigButton( + "토스 뱅크", + onTap: () { + context.showSnackbar("토스뱅크를 눌렀어요."); + } + ), + ], + ).pSymmetric(h: 20), ), - const EmptyExpanded(), - RoundButton( - text: 'Snackbar 보이기', - onTap: () => showSnackbar(context), - theme: RoundButtonTheme.blue, - ), - const Height(20), - RoundButton( - text: 'Confirm 다이얼로그', - onTap: () => showConfirmDialog(context), - theme: RoundButtonTheme.whiteWithBlueBorder, - ), - const Height(20), - RoundButton( - text: 'Message 다이얼로그', - onTap: showMessageDialog, - theme: RoundButtonTheme.whiteWithBlueBorder, - ), - const Height(20), - RoundButton( - text: '메뉴 보기', - onTap: () => openDrawer(context), - theme: RoundButtonTheme.blink, - ), - const EmptyExpanded() + const TtossAppBar(), ], ), ); @@ -64,7 +45,13 @@ class HomeFragment extends StatelessWidget { onTap: () { context.showErrorSnackbar('error'); }, - child: '에러 보여주기 버튼'.text.white.size(13).make().centered().pSymmetric(h: 10, v: 5), + child: '에러 보여주기 버튼' + .text + .white + .size(13) + .make() + .centered() + .pSymmetric(h: 10, v: 5), )); } diff --git a/lib/screen/main/tab/home/vo/vo_bank.dart b/lib/screen/main/tab/home/vo/vo_bank.dart new file mode 100644 index 00000000..c061ee10 --- /dev/null +++ b/lib/screen/main/tab/home/vo/vo_bank.dart @@ -0,0 +1,6 @@ +class Bank{ + final String name; + final String logoImagePath; + + Bank(this.name, this.logoImagePath); +} \ No newline at end of file diff --git a/lib/screen/main/tab/home/vo/vo_bank_account.dart b/lib/screen/main/tab/home/vo/vo_bank_account.dart new file mode 100644 index 00000000..ccffffcd --- /dev/null +++ b/lib/screen/main/tab/home/vo/vo_bank_account.dart @@ -0,0 +1,16 @@ +import 'package:fast_app_base/screen/main/tab/home/vo/vo_bank.dart'; + +class BankAccount { + final Bank bank; + // 잔액은 계속 바뀜으로 final 붙이지 않음 + int balance; + // 참조하는 요소이므로 nullable + final String? accountTypeName; + + BankAccount( + this.bank, + this.balance, { + // 선언 선택 가능한 파라미터 + this.accountTypeName, + }); +} diff --git a/lib/screen/main/tab/home/w_ttoss_app_bar.dart b/lib/screen/main/tab/home/w_ttoss_app_bar.dart new file mode 100644 index 00000000..60be4e8e --- /dev/null +++ b/lib/screen/main/tab/home/w_ttoss_app_bar.dart @@ -0,0 +1,64 @@ +import 'package:fast_app_base/common/common.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class TtossAppBar extends StatefulWidget { + const TtossAppBar({super.key}); + + @override + State createState() => _TtossAppBarState(); +} + +class _TtossAppBarState extends State { + + bool _showRedDot = false; + + @override + Widget build(BuildContext context) { + return Container( + height: 60, + color: context.appColors.appBarBackGround, + child: Row( + children: [ + width10, + Image.asset( + '$basePath/icon/toss.png', + height: 38, + ), + emptyExpanded, + width10, + Image.asset( + '$basePath/icon/map_point.png', + height: 38, + ), + width10, + Tap( + onTap: (){ + setState(() => _showRedDot = !_showRedDot); + }, + child: Stack( + children: [ + Image.asset( + '$basePath/icon/notification.png', + height: 38, + ), + if(_showRedDot) + // 스택의 모양을 유지하면서 점을 배치 + Positioned.fill( + child: Align( + alignment: Alignment.topRight, + child: Container( + width: 6, + height: 6, + decoration: + BoxDecoration(shape: BoxShape.circle, color: Colors.red), + ), + )) + ], + ), + ) + ], + ), + ); + } +} diff --git a/lib/screen/main/tab/stock/f_stock.dart b/lib/screen/main/tab/stock/f_stock.dart new file mode 100644 index 00000000..9438e297 --- /dev/null +++ b/lib/screen/main/tab/stock/f_stock.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class StockFragment extends StatefulWidget { + const StockFragment({super.key}); + + @override + State createState() => _StockFragmentState(); +} + +class _StockFragmentState extends State { + @override + Widget build(BuildContext context) { + return const Placeholder(); + } +} diff --git a/lib/screen/main/tab/tab_item.dart b/lib/screen/main/tab/tab_item.dart index 7966e338..6ff27f3e 100644 --- a/lib/screen/main/tab/tab_item.dart +++ b/lib/screen/main/tab/tab_item.dart @@ -1,11 +1,17 @@ import 'package:fast_app_base/common/common.dart'; -import 'package:fast_app_base/screen/main/tab/favorite/f_favorite.dart'; +import 'package:fast_app_base/screen/main/tab/all/f_all.dart'; +import 'package:fast_app_base/screen/main/tab/benefit/f_benefit.dart'; import 'package:fast_app_base/screen/main/tab/home/f_home.dart'; +import 'package:fast_app_base/screen/main/tab/stock/f_stock.dart'; +import 'package:fast_app_base/screen/main/tab/ttosspay/f_ttosspay.dart'; import 'package:flutter/material.dart'; enum TabItem { home(Icons.home, '홈', HomeFragment()), - favorite(Icons.star, '즐겨찾기', FavoriteFragment(isShowBackButton: false)); + benefit(Icons.star, '혜택', BenefitFragment()), + ttosspay(Icons.payment, '토스페이', TtosspayFragment()), + stock(Icons.candlestick_chart, '주식', StockFragment()), + all(Icons.menu, '전체', AllFragment()); final IconData activeIcon; final IconData inActiveIcon; @@ -21,7 +27,7 @@ enum TabItem { key: ValueKey(tabName), isActivated ? activeIcon : inActiveIcon, color: - isActivated ? context.appColors.iconButton : context.appColors.iconButtonInactivate, + isActivated ? context.appColors.iconButton : context.appColors.iconButtonInactivate, ), label: tabName); } diff --git a/lib/screen/main/tab/ttosspay/f_ttosspay.dart b/lib/screen/main/tab/ttosspay/f_ttosspay.dart new file mode 100644 index 00000000..147e8d78 --- /dev/null +++ b/lib/screen/main/tab/ttosspay/f_ttosspay.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class TtosspayFragment extends StatefulWidget { + const TtosspayFragment({super.key}); + + @override + State createState() => _TtosspayFragmentState(); +} + +class _TtosspayFragmentState extends State { + @override + Widget build(BuildContext context) { + return const Placeholder(); + } +} diff --git a/pubspec.lock b/pubspec.lock index 78abbc87..aa09db5a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -205,10 +205,10 @@ packages: dependency: transitive description: name: coverage - sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" + sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" url: "https://pub.dev" source: hosted - version: "1.6.3" + version: "1.8.0" crypto: dependency: transitive description: @@ -565,6 +565,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.0.4" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" lints: dependency: transitive description: @@ -585,26 +609,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: "direct main" description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" mime: dependency: transitive description: @@ -657,10 +681,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1142,10 +1166,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f3743ca475e0c9ef71df4ba15eb2d7684eecd5c8ba20a462462e4e8b561b2e11 + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "11.6.0" + version: "13.0.0" vxstate: dependency: transitive description: @@ -1162,14 +1186,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 - url: "https://pub.dev" - source: hosted - version: "0.3.0" web_socket_channel: dependency: transitive description: @@ -1227,5 +1243,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0-194.0.dev <4.0.0" + dart: ">=3.2.0-0 <4.0.0" flutter: ">=3.7.0-0" diff --git a/pubspec.yaml b/pubspec.yaml index 80e6e86c..f25623fa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -109,6 +109,9 @@ flutter: - assets/image/ - assets/image/icon/ - assets/image/flag/ + - assets/image/splash/ + - assets/image/bank/ + - assets/image/benefit/ - assets/image/darkmode/ - assets/translations/ - assets/ diff --git a/web/index.html b/web/index.html index c253dd97..fdb5474a 100644 --- a/web/index.html +++ b/web/index.html @@ -36,11 +36,81 @@ - + - + + + + + + + +