From 6d7ae0ec1bd32de3124b2fe25b6290738320f33d Mon Sep 17 00:00:00 2001 From: boroboro01 Date: Sat, 31 Aug 2024 17:33:30 +0900 Subject: [PATCH] feat: add logout function --- .github/reviewer-lottery.yml | 18 ----- .github/workflows/reviewer.yml | 14 ---- lib/main.dart | 1 + lib/screens/mypage/setting.dart | 72 +++++++++++++------ lib/screens/screen_controller.dart | 1 + lib/screens/welcome/signup_screen.dart | 49 ++++++------- .../authentication/main_view_model.dart | 5 ++ lib/widgets/normal_button.dart | 2 +- lib/widgets/sign_up_form.dart | 2 +- 9 files changed, 82 insertions(+), 82 deletions(-) delete mode 100644 .github/reviewer-lottery.yml delete mode 100644 .github/workflows/reviewer.yml diff --git a/.github/reviewer-lottery.yml b/.github/reviewer-lottery.yml deleted file mode 100644 index 8c1698a..0000000 --- a/.github/reviewer-lottery.yml +++ /dev/null @@ -1,18 +0,0 @@ -groups: - - name: boroboro01 - reviewers: 1 - usernames: - - DURAM0830 - - cho4u4o - - - name: DURAM0830 - reviewers: 1 - usernames: - - boroboro01 - - cho4u4o - - - name: cho4u4o - reviewers: 1 - usernames: - - DURAM0830 - - boroboro01 diff --git a/.github/workflows/reviewer.yml b/.github/workflows/reviewer.yml deleted file mode 100644 index 49e5912..0000000 --- a/.github/workflows/reviewer.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: "Reviewer lottery" - -on: - pull_request_target: - types: [opened, ready_for_review, reopened] - -jobs: - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: uesteibar/reviewer-lottery@v3 - with: - repo-token: ${{ secrets.MY_TOKEN }} diff --git a/lib/main.dart b/lib/main.dart index 6282efa..acc36ab 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -48,6 +48,7 @@ class MyApp extends StatelessWidget { onVerificationSuccess: () {}, ), SplashSellingScreen.id: (context) => const SplashSellingScreen(), + ScreenController.id: (context) => const ScreenController(), }, ); } diff --git a/lib/screens/mypage/setting.dart b/lib/screens/mypage/setting.dart index 1517378..3261d82 100644 --- a/lib/screens/mypage/setting.dart +++ b/lib/screens/mypage/setting.dart @@ -1,6 +1,13 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:saphy/screens/mypage/setting_page/login_info.dart'; +import 'package:saphy/screens/welcome/welcome_screen.dart'; +import 'package:saphy/service/authentication/google_login_controller.dart'; +import 'package:saphy/service/authentication/kakao_login_controller.dart'; +import 'package:saphy/service/authentication/main_view_model.dart'; +import 'package:saphy/utils/colors.dart'; +import 'package:saphy/utils/log.dart'; +import 'package:saphy/widgets/normal_button.dart'; import '../../widgets/setting_menu.dart'; class SettingPage extends StatefulWidget { @@ -16,84 +23,105 @@ class _SettingPageState extends State { return Scaffold( backgroundColor: Colors.white, appBar: AppBar( - title: const Text("설정", style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 20,fontFamily: "Pretendard")), + title: const Text("설정", + style: TextStyle( + color: Colors.black, + fontWeight: FontWeight.bold, + fontSize: 20, + fontFamily: "Pretendard")), backgroundColor: Colors.white, centerTitle: true, ), body: SingleChildScrollView( - physics: BouncingScrollPhysics(), - padding: EdgeInsets.all(20.0), + physics: const BouncingScrollPhysics(), + padding: const EdgeInsets.all(20.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( + const Text( "일반", style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), - SizedBox( + const SizedBox( height: 10, ), SettingMenu( title: "로그인 정보", icon: Icons.info_outline, - onTap: (){ - Navigator.of(context).push( - CupertinoPageRoute( - builder: (context) => const LoginInfo() - ) - ); + onTap: () { + Navigator.of(context).push(CupertinoPageRoute( + builder: (context) => const LoginInfo())); }, ), - SettingMenu( + const SettingMenu( title: "주소록", icon: Icons.list_alt, onTap: null, ), - SettingMenu( + const SettingMenu( title: "결제 정보", icon: Icons.credit_card, onTap: null, ), - SettingMenu( + const SettingMenu( title: "판매 정산 계좌", icon: Icons.monetization_on_outlined, onTap: null, ), - SettingMenu( + const SettingMenu( title: "현금영수증 정보", icon: Icons.receipt_long, onTap: null, ), - SettingMenu( + const SettingMenu( title: "알림", icon: Icons.notifications_none, onTap: null, ), - SizedBox( + const SizedBox( height: 20, ), - Text( + const Text( "정보", style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), - SizedBox( + const SizedBox( height: 10, ), - SettingMenu( + const SettingMenu( title: "이용약관", icon: Icons.list_alt_sharp, onTap: null, ), - SettingMenu( + const SettingMenu( title: "개인정보처리방침", icon: Icons.security, onTap: null, ), - SettingMenu( + const SettingMenu( title: "오픈소스 라이선스", icon: Icons.code_rounded, onTap: null, ), + NormalButton( + title: '로그아웃', + bgColor: systemColorRed300, + txtColor: white, + onTap: () { + logger.i("로그아웃 시작"); + final googleViewModel = MainViewModel(GoogleLoginController()); + googleViewModel.logout(); + final kakaoViewModel = MainViewModel(KakaoLoginController()); + googleViewModel.logout(); + kakaoViewModel.logout(); + Navigator.of(context).pushReplacement( + MaterialPageRoute( + builder: (context) => const WelcomeScreen(), + ), + ); + }, + flag: true, + ), ], ), ), diff --git a/lib/screens/screen_controller.dart b/lib/screens/screen_controller.dart index a396527..51d3a14 100644 --- a/lib/screens/screen_controller.dart +++ b/lib/screens/screen_controller.dart @@ -13,6 +13,7 @@ import 'package:saphy/screens/mypage/mypage.dart'; // } class ScreenController extends StatefulWidget { + static String id = 'screen_controller'; const ScreenController({super.key}); @override diff --git a/lib/screens/welcome/signup_screen.dart b/lib/screens/welcome/signup_screen.dart index 4bd6778..1d46d38 100644 --- a/lib/screens/welcome/signup_screen.dart +++ b/lib/screens/welcome/signup_screen.dart @@ -83,36 +83,33 @@ class _SignupScreenState extends State { ), ), Padding( - padding: const EdgeInsets.symmetric(horizontal: 20.0), + padding: + const EdgeInsets.symmetric(horizontal: 20.0, vertical: 40.0), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - const SizedBox(height: 30.0), formWidget(context), - Padding( - padding: const EdgeInsets.only(bottom: 20.0), - child: NormalButton( - title: '사피 시작하기', - bgColor: phoneAuth ? mainPrimary : gray400, - txtColor: black, - flag: phoneAuth, - onTap: () async { - logger.i( - '${_nameController.text} / ${_emailController.text} / ${_phoneController.text} / ${widget.userPhotoUrl} /', - ); - final code = await joinService( - widget.socialType!, - _emailController.text, - _nameController.text, - _phoneController.text, - ); - if (code == 200) { - Navigator.of(context).pushReplacement(MaterialPageRoute( - builder: (context) => const ScreenController(), - )); - } - }, - ), + NormalButton( + title: '사피 시작하기', + bgColor: phoneAuth ? mainPrimary : gray400, + txtColor: black, + flag: phoneAuth, + onTap: () async { + logger.i( + '${_nameController.text} / ${_emailController.text} / ${_phoneController.text} / ${widget.userPhotoUrl} /', + ); + final code = await joinService( + widget.socialType!, + _emailController.text, + _nameController.text, + _phoneController.text, + ); + if (code == 200) { + Navigator.of(context).pushReplacement(MaterialPageRoute( + builder: (context) => const ScreenController(), + )); + } + }, ) ], ), diff --git a/lib/service/authentication/main_view_model.dart b/lib/service/authentication/main_view_model.dart index 5e09679..0aa0fdb 100644 --- a/lib/service/authentication/main_view_model.dart +++ b/lib/service/authentication/main_view_model.dart @@ -5,6 +5,7 @@ import 'package:saphy/service/authentication/google_login_controller.dart'; import 'package:saphy/service/authentication/kakao_login_controller.dart'; import 'package:saphy/service/authentication/secure_storage.dart'; import 'package:saphy/service/social_login.dart'; +import 'package:saphy/utils/log.dart'; class MainViewModel { final SocialLogin _socialLogin; @@ -42,8 +43,12 @@ class MainViewModel { Future logout() async { deleteLoginInfo(); + deleteAccessToke(); + deleteRefreshToke(); + deleteJwt(); await _socialLogin.logout(); //로그아웃 실행 isLogined = false; //로그인되어 있는지를 저장하는 변수 false값 저장 user = null; //user 객체 null + logger.i("Logout 성공"); } } diff --git a/lib/widgets/normal_button.dart b/lib/widgets/normal_button.dart index 0cd4220..64e0a2d 100644 --- a/lib/widgets/normal_button.dart +++ b/lib/widgets/normal_button.dart @@ -15,7 +15,7 @@ class NormalButton extends StatelessWidget { final Color bgColor; final Color txtColor; final bool flag; - final Function() onTap; + final VoidCallback onTap; @override Widget build(BuildContext context) { diff --git a/lib/widgets/sign_up_form.dart b/lib/widgets/sign_up_form.dart index c3aa9c3..2fb4eba 100644 --- a/lib/widgets/sign_up_form.dart +++ b/lib/widgets/sign_up_form.dart @@ -23,7 +23,7 @@ class SignUpForm extends StatelessWidget { Widget build(BuildContext context) { textEditingController.text = initialValue; return Padding( - padding: const EdgeInsets.only(bottom: 10.0), + padding: const EdgeInsets.only(bottom: 20.0), child: Container( decoration: BoxDecoration( shape: BoxShape.rectangle,