Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
6b3a1b0
โ™ป๏ธ Mycapitalscreen ๋ฆฌํŒฉํ† ๋ง
bluemoon983 Jul 9, 2025
4df8abc
Merge branch 'develop' of https://github.com/Jusicool-Ver-2-0/Jusicooโ€ฆ
bluemoon983 Jul 9, 2025
1aa680f
โ™ป๏ธ OrderDetailScreen๋ฆฌํŒฉํ† ๋ง
bluemoon983 Jul 9, 2025
0f5445b
โ™ป๏ธ Backbutton ์ˆ˜์ •
bluemoon983 Jul 9, 2025
1fe7642
โ™ป๏ธ RevenueCard ๋ฆฌํŒฉํ† ๋ง
bluemoon983 Jul 9, 2025
1cf91da
โ™ป๏ธ MonthlyrevenueScreen ๋ฆฌํŒฉํ† ๋ง
bluemoon983 Jul 9, 2025
5fc3029
โ™ป๏ธ Spacing ๊ฐ’ ์กฐ์ ˆ
bluemoon983 Jul 9, 2025
c88ce04
โ™ป๏ธ MaincaptialScreen ๊ณ ์ •๊ฐ’ ์ œ๊ฑฐ
bluemoon983 Jul 9, 2025
07a718f
โ™ป๏ธ OrderDetailScreen ์ƒ์ˆ˜ ์‚ญ์ œ
bluemoon983 Jul 9, 2025
2776b07
โ™ป๏ธ MonthlyrevenusScreen ๋ฆฌํŒฉํ† ๋ง
bluemoon983 Jul 10, 2025
b23b678
โ™ป๏ธ MyassetsScreen ๋ฆฌํŒฉํ† ๋ง
bluemoon983 Jul 10, 2025
97452e6
โœจ Newlist gorouter์ถ”๊ฐ€
bluemoon983 Jul 10, 2025
897285a
โ™ป๏ธ Newslistscreen ๋ฆฌํŒฉํ† ๋ง
bluemoon983 Jul 10, 2025
423db4a
โ™ป๏ธ NewsItem ๋ถ„๋ฆฌ
bluemoon983 Jul 10, 2025
292d055
โœจ StockCards ์ถ”๊ฐ€
bluemoon983 Jul 10, 2025
8e36fb8
โ™ป๏ธ StockCards ํŒŒ์ผ์œ„์น˜ ์ˆ˜์ •
bluemoon983 Jul 10, 2025
505c233
๐Ÿ› StockCard ์˜ค๋ฅ˜ ์ˆ˜์ •
bluemoon983 Jul 10, 2025
777d17e
โ™ป๏ธ SplashScreen router ์ˆ˜์ •
bluemoon983 Jul 10, 2025
57d6285
โ™ป๏ธ Menubottom gorouter๋กœ ์žฌ์„ค์ •
bluemoon983 Jul 14, 2025
9912719
โ™ป๏ธ Navbaritem class ๋ถ„๋ฆฌ
bluemoon983 Jul 14, 2025
417936a
๐Ÿ› Menubottom ๋ฒ„๊ทธ ์ˆ˜์ •
bluemoon983 Jul 14, 2025
eeb12f1
โ™ป๏ธ Menu bottom์—ShellRoute ์‚ฌ์šฉํ•˜์—ฌ ํ™”๋ฉด ์ด๋™
bluemoon983 Jul 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 31 additions & 10 deletions lib/core/config/router/router.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:jusicool_ios/main.dart';
import 'package:jusicool_ios/core/config/widget/menu_bottom.dart';
import 'package:jusicool_ios/presentation/community/screens/community_post_list_screen.dart';
import 'package:jusicool_ios/presentation/my_capital/screens/maincapital_screen.dart';
import 'package:jusicool_ios/presentation/my_capital/screens/my_assets_screen.dart';
Expand All @@ -11,7 +12,7 @@ import 'package:jusicool_ios/presentation/sign_up/screens/find_school_screen.dar
import 'package:jusicool_ios/presentation/sign_up/screens/name_input_screen.dart';
import 'package:jusicool_ios/presentation/sign_up/screens/password_create_screen.dart';
import 'package:jusicool_ios/presentation/splash/screens/splash_screen.dart';

import 'package:jusicool_ios/presentation/news/screens/news_list_screen.dart';

class RoutePaths {
static const String splash = '/splash';
Expand All @@ -36,6 +37,9 @@ class AppRouter {

factory AppRouter() => _instance;

static final GlobalKey<NavigatorState> _shellNavigatorKey =
GlobalKey<NavigatorState>();

static final GoRouter router = GoRouter(
initialLocation: RoutePaths.splash,
routes: [
Expand All @@ -47,10 +51,6 @@ class AppRouter {
path: RoutePaths.login,
builder: (context, state) => LoginScreen(),
),
GoRoute(
path: RoutePaths.main,
builder: (context, state) => const MainPage(),
),
GoRoute(
path: RoutePaths.nameInput,
builder: (context, state) => const NameInputScreen(),
Expand All @@ -67,10 +67,6 @@ class AppRouter {
path: RoutePaths.findSchool,
builder: (context, state) => const FindSchoolScreen(),
),
GoRoute(
path: RoutePaths.mainCapital,
builder: (context, state) => const MainCapitalScreen(),
),
GoRoute(
path: RoutePaths.monthlyRevenue,
builder: (context, state) => const MonthlyRevenueScreen(),
Expand All @@ -87,6 +83,31 @@ class AppRouter {
path: RoutePaths.communityPostList,
builder: (context, state) => const CommunityPostListScreen(),
),

ShellRoute(
navigatorKey: _shellNavigatorKey,
builder: (context, state, child) {
return MenuBottom(child: child);
},
routes: [
GoRoute(
path: RoutePaths.mainCapital,
builder: (context, state) => const MainCapitalScreen(),
),
GoRoute(
path: '/chart',
builder: (context, state) => const MainCapitalScreen(),
),
GoRoute(
path: '/news-list',
builder: (context, state) => const NewsListScreen(),
),
GoRoute(
path: '/mypage',
builder: (context, state) => const MyAssetsScreen(),
),
],
),
],
);
}
98 changes: 34 additions & 64 deletions lib/core/config/widget/menu_bottom.dart
Original file line number Diff line number Diff line change
@@ -1,40 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:go_router/go_router.dart';
import 'package:jusicool_design_system/jusicool_design_system.dart';
import 'package:jusicool_ios/presentation/my_capital/screens/maincapital_screen.dart';

class ScreenConfig {
ScreenConfig({required this.title, required this.widget});

final String title;
final Widget widget;
}

class ScreenList {
static final List<ScreenConfig> configs = [
ScreenConfig(title: '์ž์‚ฐ', widget: const MainCapitalScreen()),
ScreenConfig(title: '์ฐจํŠธ', widget: const MainCapitalScreen()),
ScreenConfig(title: '๋‰ด์Šค', widget: const MainCapitalScreen()),
ScreenConfig(
title: '๋งˆ์ด ํŽ˜์ด์ง€',
widget: const MainCapitalScreen(),
), //์ž„์‹œ ๊ฒฝ๋กœ ์„ค์ •, ์ถ”ํ›„ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋ฉด ๋ณ€๊ฒฝ ํ•„์š”
];

static Widget getScreen(int index) {
if (index < 0 || index >= configs.length) {
return configs[0].widget;
}
return configs[index].widget;
}

static String getTitle(int index) {
if (index < 0 || index >= configs.length) {
return configs[0].title;
}
return configs[index].title;
}
}

class NavBarItem extends StatelessWidget {
const NavBarItem({
Expand Down Expand Up @@ -91,24 +58,26 @@ class NavBarItem extends StatelessWidget {
}
}

class MenuBottom extends StatefulWidget {
const MenuBottom({super.key});
class MenuBottom extends StatelessWidget {
const MenuBottom({super.key, required this.child});
final Widget child;

@override
_MenuBottomState createState() => _MenuBottomState();
}

class _MenuBottomState extends State<MenuBottom> {
int selectedIndex = 0;
static const List<_NavItemData> _navItems = [
_NavItemData(path: '/main-capital', iconName: 'capital', label: '์ž์‚ฐ'),
_NavItemData(path: '/main-capital', iconName: 'chart', label: '์ฐจํŠธ'),
_NavItemData(path: '/news-list', iconName: 'news', label: '๋‰ด์Šค'),
_NavItemData(path: '/main-capital', iconName: 'account', label: '๋งˆ์ด ํŽ˜์ด์ง€'),
];

void onTap(int index) {
setState(() {
selectedIndex = index;
});
int _locationToIndex(String location) {
return _navItems.indexWhere((item) => location.startsWith(item.path));
}

@override
Widget build(BuildContext context) {
final location = GoRouterState.of(context).uri.toString();
final selectedIndex = _locationToIndex(location);

return Scaffold(
backgroundColor: JusicoolColor.white,
body: SafeArea(
Expand All @@ -117,15 +86,7 @@ class _MenuBottomState extends State<MenuBottom> {
maintainBottomViewPadding: true,
child: Column(
children: [
Expanded(
child: IndexedStack(
index: selectedIndex,
children: List.generate(
ScreenList.configs.length,
(index) => ScreenList.getScreen(index),
),
),
),
Expanded(child: child),
Container(
height: 52.h,
color: JusicoolColor.white,
Expand All @@ -148,10 +109,14 @@ class _MenuBottomState extends State<MenuBottom> {
children: List.generate(
_navItems.length,
(index) => NavBarItem(
iconName: _navItems[index]['image']!,
label: ScreenList.getTitle(index),
iconName: _navItems[index].iconName,
label: _navItems[index].label,
isSelected: selectedIndex == index,
onTap: () => onTap(index),
onTap: () {
if (selectedIndex != index) {
context.go(_navItems[index].path);
}
},
),
),
),
Expand All @@ -165,11 +130,16 @@ class _MenuBottomState extends State<MenuBottom> {
),
);
}
}

static const List<Map<String, String>> _navItems = [
{'label': '์ž์‚ฐ', 'image': 'capital'},
{'label': '์ฐจํŠธ', 'image': 'chart'},
{'label': '๋‰ด์Šค', 'image': 'news'},
{'label': '๋งˆ์ด ํŽ˜์ด์ง€', 'image': 'account'},
];
class _NavItemData {
final String path;
final String iconName;
final String label;

const _NavItemData({
required this.path,
required this.iconName,
required this.label,
});
}
10 changes: 0 additions & 10 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import 'package:jusicool_design_system/jusicool_design_system.dart';
import 'package:jusicool_ios/core/config/di/dependencies.dart';
import 'core/config/router/router.dart';
import 'core/config/theme/app_theme.dart';
import 'core/config/widget/menu_bottom.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
Expand Down Expand Up @@ -50,12 +49,3 @@ class MyApp extends StatelessWidget {
);
}
}

class MainPage extends StatelessWidget {
const MainPage({super.key});

@override
Widget build(BuildContext context) {
return const MenuBottom();
}
}
Loading
Loading