Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions assets/icons/icon/out.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 12 additions & 0 deletions lib/app/config/app_router.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import 'package:grimity/presentation/album_organize/album_organize_page.dart';
import 'package:grimity/presentation/block/blocked_users_page.dart';
import 'package:grimity/presentation/board/tabs/board_page.dart';
import 'package:grimity/presentation/board/search/board_search_page.dart';
import 'package:grimity/presentation/business_info/business_info_page.dart';
import 'package:grimity/presentation/chat_message/chat_message_page.dart';
import 'package:grimity/presentation/chat_new/new_chat_page.dart';
import 'package:grimity/presentation/common/enum/upload_image_type.dart';
Expand Down Expand Up @@ -571,3 +572,14 @@ class BlockedUsersRoute extends GoRouteData {
@override
Widget build(BuildContext context, GoRouterState state) => BlockedUsersPage();
}

@TypedGoRoute<BusinessInfoRoute>(path: BusinessInfoRoute.path, name: BusinessInfoRoute.name)
class BusinessInfoRoute extends GoRouteData {
const BusinessInfoRoute();

static const String path = '/business-info';
static const String name = 'business-info';

@override
Widget build(BuildContext context, GoRouterState state) => const BusinessInfoPage();
}
64 changes: 64 additions & 0 deletions lib/presentation/business_info/business_info_page.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:grimity/app/config/app_color.dart';
import 'package:grimity/app/config/app_theme.dart';
import 'package:grimity/app/config/app_typeface.dart';

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

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
toolbarHeight: AppTheme.kToolbarHeight.height,
titleSpacing: 0,
bottom: const PreferredSize(
preferredSize: Size.fromHeight(1),
child: Divider(height: 1, color: AppColor.gray300),
),
),
body: SafeArea(
child: ListView(
padding: const EdgeInsets.all(16.0),
children: [
Text(
'사업자 정보',
style: AppTypeface.title2,
),
Gap(24),
_buildInfoItem('사업자 등록 번호', '408-27-02500'),
Gap(16),
_buildInfoItem('법인 여부', '개인'),
Gap(16),
_buildInfoItem('상호', '그리미티 (Grimity)'),
Gap(16),
_buildInfoItem('대표자명', '임종훈'),
Gap(16),
_buildInfoItem('전화번호', '070-8098-7916'),
Gap(16),
_buildInfoItem('개업일', '2025-10-11'),
Gap(16),
_buildInfoItem('전자우편', '[email protected]'),
Gap(16),
_buildInfoItem('사업장소재지(도로명)', '부산광역시 사상구 가야대로255번길 5, 107동 104호'),
Gap(16),
_buildInfoItem('인터넷 도메인', 'https://www.grimity.com/'),
Gap(16),
],
),
),
);
}

Widget _buildInfoItem(String title, String content) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(title, style: AppTypeface.subTitle3),
Gap(8),
Text(content, style: AppTypeface.label3),
],
);
}
}
2 changes: 2 additions & 0 deletions lib/presentation/drawer/main_app_drawer.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:grimity/presentation/drawer/view/drawer_view.dart';
import 'package:grimity/presentation/drawer/widget/drawer_close_button.dart';
import 'package:grimity/presentation/drawer/widget/drawer_footer.dart';
import 'package:grimity/presentation/drawer/widget/drawer_menu.dart';
import 'package:grimity/presentation/drawer/widget/drawer_profile.dart';
import 'package:grimity/presentation/drawer/widget/drawer_upload_button.dart';
Expand All @@ -15,6 +16,7 @@ class MainAppDrawer extends StatelessWidget {
profileWidget: DrawerProfile(),
uploadButton: DrawerUploadButton(),
menuListView: DrawerMenuListView(),
drawerFooter: DrawerFooter(),
);
}
}
24 changes: 18 additions & 6 deletions lib/presentation/drawer/view/drawer_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,40 @@ class DrawerView extends StatelessWidget {
required this.profileWidget,
required this.uploadButton,
required this.menuListView,
required this.drawerFooter,
});

final Widget closeButton;
final Widget profileWidget;
final Widget uploadButton;
final Widget menuListView;
final Widget drawerFooter;

@override
Widget build(BuildContext context) {
return Drawer(
backgroundColor: AppColor.gray00,
width: 260,
child: SafeArea(
child: ListView(
child: Column(
children: [
Expanded(
child: ListView(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 16),
child: Column(children: [closeButton, profileWidget, Gap(24), uploadButton, Gap(24)]),
),
Divider(height: 1, color: AppColor.gray300),
Gap(24),
menuListView,
],
),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 16),
child: Column(children: [closeButton, profileWidget, Gap(24), uploadButton, Gap(24)]),
padding: EdgeInsets.all(16),
child: drawerFooter,
),
Divider(height: 1, color: AppColor.gray300),
Gap(24),
menuListView,
],
),
),
Expand Down
88 changes: 88 additions & 0 deletions lib/presentation/drawer/widget/drawer_footer.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gap/gap.dart';
import 'package:grimity/app/config/app_color.dart';
import 'package:grimity/app/config/app_const.dart';
import 'package:grimity/app/config/app_router.dart';
import 'package:grimity/app/config/app_typeface.dart';
import 'package:grimity/app/enum/login_provider.enum.dart';
import 'package:grimity/gen/assets.gen.dart';
import 'package:grimity/presentation/common/provider/user_auth_provider.dart';
import 'package:grimity/presentation/common/widget/grimity_gesture.dart';
import 'package:grimity/presentation/common/widget/grimity_gray_circle.dart';
import 'package:url_launcher/url_launcher.dart';

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

@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_LogoutButton(),
Gap(12),
Row(
children: [
GrimityGesture(
onTap: () async {
await launchUrl(Uri.parse(AppConst.serviceTermsUrl));
},
child: Text('이용약관', style: AppTypeface.caption2.copyWith(color: AppColor.gray500)),
),
GrimityGrayCircle(),
GrimityGesture(
onTap: () async {
await launchUrl(Uri.parse(AppConst.privacyPolicyUrl));
},
child: Text('개인정보취급방침', style: AppTypeface.caption2.copyWith(color: AppColor.gray500)),
),
],
),
Gap(4),
GrimityGesture(
onTap: () async {
const BusinessInfoRoute().push(context);
},
child: Text('사업자 정보', style: AppTypeface.caption2.copyWith(color: AppColor.gray500)),
),
Gap(4),
Text(
'© Grimity. All rights reserved.',
style: AppTypeface.caption2.copyWith(color: AppColor.gray500),
),
],
);
}
}

class _LogoutButton extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
return GestureDetector(
onTap: () async {
final user = ref.read(userAuthProvider);
if (user == null) return;
final provider = LoginProvider.fromString(user.provider ?? '');

await ref.read(userAuthProvider.notifier).logout(provider);
if (context.mounted) {
SignInRoute().go(context);
}
},
child: Row(
children: [
Text(
'로그아웃',
style: AppTypeface.caption2.copyWith(color: AppColor.gray500),
),
Gap(4),
Assets.icons.icon.out.svg(
width: 16,
colorFilter: ColorFilter.mode(AppColor.gray500, BlendMode.srcIn),
),
],
),
);
}
}
2 changes: 0 additions & 2 deletions lib/presentation/setting/view/setting_body_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import 'package:grimity/app/config/app_router.dart';
import 'package:grimity/presentation/setting/widget/setting_action_tile.dart';
import 'package:grimity/presentation/setting/widget/setting_contact_options_bottom_sheet.dart';
import 'package:grimity/presentation/setting/widget/setting_delete_account_dialog.dart';
import 'package:grimity/presentation/setting/widget/setting_footer.dart';
import 'package:grimity/presentation/setting/widget/setting_notification_section.dart';

class SettingBodyView extends ConsumerWidget {
Expand All @@ -24,7 +23,6 @@ class SettingBodyView extends ConsumerWidget {
SettingActionTile(title: '문의하기', onTap: () => showContactOptionsBottomSheet(context)),
divider,
SettingActionTile(title: '회원 탈퇴', onTap: () => showDeleteAccountDialog(context, ref)),
SettingFooter(),
],
),
);
Expand Down
83 changes: 0 additions & 83 deletions lib/presentation/setting/widget/setting_footer.dart

This file was deleted.