Skip to content

Commit

Permalink
Merge pull request #9 from Tuti-Project/fix_login_error
Browse files Browse the repository at this point in the history
🚧 λ‘œκ·Έμ•„μ›ƒ μ‹œ νŠΈν‹° ν™ˆ νƒ­μœΌλ‘œ μ΄λ™μ‹œν‚€λŠ” 둜직 μΆ”κ°€ 및 νšŒμ› κ°€μž… 전체 λ™μ˜ λ²„νŠΌ μ—λŸ¬ μˆ˜μ •
  • Loading branch information
changhwan77 authored Feb 17, 2024
2 parents 460cfb1 + f1e51f5 commit 2868c77
Show file tree
Hide file tree
Showing 14 changed files with 250 additions and 131 deletions.
46 changes: 24 additions & 22 deletions lib/common/constraints_scaffold.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,30 +13,32 @@ class ConstraintsScaffold extends StatelessWidget {

@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Center(
child: Stack(
children: [
Container(
constraints: BoxConstraints(
maxWidth: 700.w,
return SafeArea(
child: Scaffold(
backgroundColor: Colors.white,
body: Center(
child: Stack(
children: [
Container(
constraints: BoxConstraints(
maxWidth: 700.w,
),
child: Image.asset(
'assets/images/home_mobile.jpg',
width: double.infinity,
height: double.infinity,
fit: BoxFit.cover,
),
),
child: Image.asset(
'assets/images/home_mobile.jpg',
width: double.infinity,
height: double.infinity,
fit: BoxFit.cover,
Container(
constraints: BoxConstraints(
maxWidth: 700.w,
),
padding: padding,
child: child,
),
),
Container(
constraints: BoxConstraints(
maxWidth: 700.w,
),
padding: padding,
child: child,
),
],
],
),
),
),
);
Expand Down
88 changes: 40 additions & 48 deletions lib/common/main_navigation_screen.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:go_router/go_router.dart';
import 'package:tuti/common/custom_token_manager.dart';
import 'package:tuti/common/service/navigation_index_provder.dart';
import 'package:tuti/constants/color.dart';
import 'package:tuti/features/profile/models/member_model.dart';
import 'package:tuti/features/profile/views/profile_screen.dart';
Expand All @@ -10,63 +12,53 @@ import 'package:tuti/features/tutis/widgets/tuti_widgets/tuti_login_dialog.dart'

import '../features/tutis/views/personal_branding_screen.dart';

class MainNavigationScreen extends StatefulWidget {
class MainNavigationScreen extends ConsumerStatefulWidget {
static const routeName = 'mainNavigation';
static const routeURL = 'main';
final String tab;

const MainNavigationScreen({
Key? key,
required this.tab,
}) : super(key: key);

@override
State<MainNavigationScreen> createState() => _MainNavigationScreenState();
ConsumerState<MainNavigationScreen> createState() =>
_MainNavigationScreenState();
}

class _MainNavigationScreenState extends State<MainNavigationScreen>
class _MainNavigationScreenState extends ConsumerState<MainNavigationScreen>
with SingleTickerProviderStateMixin {
final List<String> _tabs = [
'personalBranding',
'tuti',
'profile',
];
late int _selectedIndex = _tabs.indexOf(widget.tab);
@override
Widget build(BuildContext context) {
int selectedIndex = ref.watch(navigationSelectedIndexProvider);

void _onTap(int index) async {
// μœ μ €κ°€ λ§ˆμ΄νŽ˜μ΄μ§€λ‘œ 이동 μ‹œ authToken이 μžˆλŠ”μ§€ 검증
// 토큰이 null || λΉ„μ–΄μžˆμœΌλ©΄ 둜그인 μ•ˆλ‚΄ λ‹€μ΄μ–Όλ‘œκ·Έ 띄움.
if (index == 2) {
String? authToken = await CustomTokenManager.getToken();
if (authToken == null || authToken.isEmpty) {
if (mounted) {
await showDialog<void>(
context: context,
builder: (BuildContext context) => const LoginIntroDialog(),
);
void navigationToScreen(int index) {
setState(() {
// μœ μ €κ°€ ν΄λ¦­ν•œ indexλ₯Ό navigationSelectedIndexProvider의 state에 ν• λ‹Ή
ref.read(navigationSelectedIndexProvider.notifier).state = index;
});
}

void onTap(int index) async {
// μœ μ €κ°€ λ§ˆμ΄νŽ˜μ΄μ§€λ‘œ 이동 μ‹œ authToken이 μžˆλŠ”μ§€ 검증
// 토큰이 null || λΉ„μ–΄μžˆμœΌλ©΄ 둜그인 μ•ˆλ‚΄ λ‹€μ΄μ–Όλ‘œκ·Έ 띄움.
if (index == 2) {
String? authToken = await CustomTokenManager.getToken();
if (authToken == null || authToken.isEmpty) {
if (context.mounted) {
await showDialog<void>(
context: context,
builder: (BuildContext context) => const LoginIntroDialog(),
);
}
} else {
navigationToScreen(index);
}
// λ§ˆμ΄νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λŠ” 것이 아닐 λ•ŒλŠ” λ°”λ‘œ 이동
} else {
_navigationToScreen(index);
navigationToScreen(index);
}
// λ§ˆμ΄νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λŠ” 것이 아닐 λ•ŒλŠ” λ°”λ‘œ 이동
} else {
_navigationToScreen(index);
}
}

void _navigationToScreen(int index) {
if (mounted) {
context.go('/${_tabs[index]}');
setState(
() {
_selectedIndex = index;
},
);
}
}

@override
Widget build(BuildContext context) {
return Center(
child: Container(
constraints: BoxConstraints(
Expand All @@ -78,15 +70,15 @@ class _MainNavigationScreenState extends State<MainNavigationScreen>
body: Stack(
children: [
Offstage(
offstage: _selectedIndex != 0,
offstage: selectedIndex != 0,
child: const PersonalBrandingScreen(),
),
Offstage(
offstage: _selectedIndex != 1,
offstage: selectedIndex != 1,
child: const TuTiScreen(),
),
Offstage(
offstage: _selectedIndex != 2,
offstage: selectedIndex != 2,
child: const ProfileScreen(),
),
],
Expand All @@ -98,14 +90,14 @@ class _MainNavigationScreenState extends State<MainNavigationScreen>
unselectedItemColor: Colors.grey,
),
child: BottomNavigationBar(
currentIndex: _selectedIndex,
onTap: _onTap,
currentIndex: selectedIndex,
onTap: onTap,
items: [
BottomNavigationBarItem(
icon: Image.asset(
'assets/images/personalBranding.png',
width: 24.w,
color: _selectedIndex == 0
color: selectedIndex == 0
? ColorConstants.primaryColor
: Colors.grey,
),
Expand All @@ -115,7 +107,7 @@ class _MainNavigationScreenState extends State<MainNavigationScreen>
icon: Image.asset(
'assets/images/home.png',
width: 24.w,
color: _selectedIndex == 1
color: selectedIndex == 1
? ColorConstants.primaryColor
: Colors.grey,
),
Expand All @@ -125,7 +117,7 @@ class _MainNavigationScreenState extends State<MainNavigationScreen>
icon: Image.asset(
'assets/images/myPage.png',
width: 24.w,
color: _selectedIndex == 2
color: selectedIndex == 2
? ColorConstants.primaryColor
: Colors.grey,
),
Expand Down
15 changes: 15 additions & 0 deletions lib/common/service/navigation_index_provder.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:tuti/common/service/tab_provider.dart';

final navigationSelectedIndexProvider = StateProvider<int>((ref) {
final List<String> tabs = [
'personalBranding',
'tuti',
'profile',
];

final tab = ref.watch(tabsProvider);

int selectedIndex = tabs.indexOf(tab);
return selectedIndex;
});
3 changes: 3 additions & 0 deletions lib/common/service/tab_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';

final tabsProvider = StateProvider<String>((ref) => 'tuti');
1 change: 1 addition & 0 deletions lib/constants/color.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ class ColorConstants {
static const Color kakaoColor = Color(0xFFFFDE00);
static const Color naverColor = Color(0xFF03C75A);
static const Color profileUserNameColor = Color(0xFF52B69A);
static const Color primary600Color = Color(0xFF34A0A4);
}
5 changes: 3 additions & 2 deletions lib/constants/string.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
// getter둜 string λ§Œλ“€κΈ°
class StringConstants {
static String appName = "TuTi";

static const baseUrl = 'https://www.tuti-service.site';
// μ›λž˜ μ„œλ²„ 도메인 : 'https://www.tuti-service.site'
// AWS 과금 μ •μ±…μœΌλ‘œ 인해 도메인 μ μš©κΉŒμ§€ μž„μ‹œ μ„œλ²„ μ£Όμ†Œ μ‚¬μš©
static const baseUrl = 'http://52.78.238.81:8080';
}

final jobConstant = [
Expand Down
37 changes: 28 additions & 9 deletions lib/features/auth/views/join_private_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -128,23 +128,26 @@ class _JoinPrivateScreenState extends ConsumerState<JoinPrivateScreen> {
final Set<Terms> _agreeToTerms = {};

void _toggleSingleTerm(Terms term) {
if (_isAllTermsAgreed()) return _agreeToTerms.clear();
if (_agreeToTerms.contains(Terms.allTerms)) {
_agreeToTerms.clear();
} else {
if (_agreeToTerms.contains(term)) {
_agreeToTerms.remove(term);
if (term == Terms.allTerms) {
if (_agreeToTerms.contains(Terms.allTerms)) {
_agreeToTerms.clear();
} else {
_agreeToTerms.add(term);
_agreeToTerms.addAll(Terms.values);
}
} else {
if (_agreeToTerms.contains(Terms.allTerms)) {
_agreeToTerms.remove(Terms.allTerms);
}
_agreeToTerms.contains(term)
? _agreeToTerms.remove(term)
: _agreeToTerms.add(term);
}
}

// _aggreeToTerms에 λͺ¨λ“  ν•­λͺ©μ΄ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ 확인
bool _isAllTermsAgreed() {
return _agreeToTerms.contains(Terms.allTerms) ||
_agreeToTerms.containsAll(Terms.values) ||
_agreeToTerms.length == Terms.values.length - 1;
_agreeToTerms.containsAll(Terms.values);
}

bool _isTermsAgreed(Terms term) {
Expand Down Expand Up @@ -393,6 +396,10 @@ class _JoinPrivateScreenState extends ConsumerState<JoinPrivateScreen> {
),
),
child: AuthFormField(
style: Theme.of(context)
.textTheme
.bodyMedium!
.copyWith(fontWeight: FontWeight.w600),
controller: _emailController,
keyboardType: TextInputType.emailAddress,
onEditingComplete: () {
Expand Down Expand Up @@ -421,6 +428,10 @@ class _JoinPrivateScreenState extends ConsumerState<JoinPrivateScreen> {
),
),
child: AuthFormField(
style: Theme.of(context)
.textTheme
.bodyMedium!
.copyWith(fontWeight: FontWeight.w600),
controller: _passwordController,
obscureText: true,
onEditingComplete: () {
Expand Down Expand Up @@ -449,6 +460,10 @@ class _JoinPrivateScreenState extends ConsumerState<JoinPrivateScreen> {
),
),
child: AuthFormField(
style: Theme.of(context)
.textTheme
.bodyMedium!
.copyWith(fontWeight: FontWeight.w600),
controller: _passwordCheckController,
obscureText: true,
onEditingComplete: () {
Expand Down Expand Up @@ -477,6 +492,10 @@ class _JoinPrivateScreenState extends ConsumerState<JoinPrivateScreen> {
),
),
child: AuthFormField(
style: Theme.of(context)
.textTheme
.bodyMedium!
.copyWith(fontWeight: FontWeight.w600),
controller: _nameController,
onEditingComplete: () {
if (_name.isNotEmpty) {
Expand Down
2 changes: 1 addition & 1 deletion lib/features/auth/widgets/auth_form_field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class AuthFormField extends StatelessWidget {
errorText: errorText,
border: InputBorder.none,
hintText: hintText,
hintStyle: TextStyle(
hintStyle: Theme.of(context).textTheme.titleSmall!.copyWith(
fontSize: 12.sp,
color: Colors.grey,
textBaseline: TextBaseline.alphabetic),
Expand Down
9 changes: 6 additions & 3 deletions lib/features/profile/views/profile_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:go_router/go_router.dart';
import 'package:tuti/common/constraints_scaffold.dart';
import 'package:tuti/common/custom_token_manager.dart';
import 'package:tuti/common/main_navigation_screen.dart';
import 'package:tuti/common/service/navigation_index_provder.dart';
import 'package:tuti/common/tuti_text.dart';
import 'package:tuti/constants/gaps.dart';
import 'package:tuti/features/profile/models/proifle_model.dart';
import 'package:tuti/features/profile/services/proifle_service.dart';
import 'package:tuti/features/profile/widgets/tuti_container.dart';
import 'package:tuti/features/profile/widgets/tuti_profile.dart';
import 'package:tuti/features/tutis/views/tuti_screen.dart';

import '../../../constants/color.dart';
import '../../tutis/widgets/tuti_widgets/tuti_days.dart';
Expand Down Expand Up @@ -115,9 +118,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
TextButton(
onPressed: () async {
await CustomTokenManager.removeToken();
setState(() {
_getAuthToken();
});
ref
.read(navigationSelectedIndexProvider.notifier)
.state = 1;
},
child: TuTiText.small(
context,
Expand Down
8 changes: 4 additions & 4 deletions lib/features/tutis/views/tuti_screen.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:tuti/common/constraints_scaffold.dart';

import '../../../constants/gaps.dart';
Expand All @@ -13,13 +15,11 @@ class TuTiScreen extends StatelessWidget {

@override
Widget build(BuildContext context) {
return const ConstraintsScaffold(
return ConstraintsScaffold(
child: Column(
children: [
Gaps.h14,
TuTiHeaderMobile(),
Gaps.h5,
TuTiCardMobile(),
Flexible(flex: 5, child: TuTiCardMobile()),
],
),
);
Expand Down
Loading

0 comments on commit 2868c77

Please sign in to comment.