Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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
80 changes: 38 additions & 42 deletions lib/core/design_system/components/custom_icon_button.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,17 @@ import 'package:flutter/material.dart';
import 'package:ondo/core/design_system/app_colors.dart';
import 'package:ondo/core/design_system/app_layout.dart';

typedef FavoriteAction = void Function(bool isFavorite, int total);
typedef BookmarkAction = void Function(bool isBookmark, int total);
typedef FavoriteAction = void Function(
bool isFavorite,
int total,
);

typedef BookmarkAction = void Function(
bool isBookmark,
int total,
);

class CustomIconButton extends StatefulWidget {
class CustomIconButton extends StatelessWidget {
Comment thread
ryusuye0n marked this conversation as resolved.
Outdated
const CustomIconButton({
super.key,
required this.imagePath,
Expand All @@ -23,33 +30,10 @@ class CustomIconButton extends StatefulWidget {
final int total;
final bool initialIsSelected;
final Color activeColor;
final void Function(bool isSelect, int total)? action;

@override
State<CustomIconButton> createState() => _CustomIconButtonState();
}

class _CustomIconButtonState extends State<CustomIconButton> {
late int total;
late bool isSelect;

@override
void initState() {
super.initState();
total = widget.total;
isSelect = widget.initialIsSelected;
}

@override
void didUpdateWidget(CustomIconButton oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.total != widget.total) {
total = widget.total;
}
if (oldWidget.initialIsSelected != widget.initialIsSelected) {
isSelect = widget.initialIsSelected;
}
}
final void Function(
bool isSelect,
int total,
)? action;

@override
Widget build(BuildContext context) {
Expand All @@ -58,26 +42,38 @@ class _CustomIconButtonState extends State<CustomIconButton> {
children: [
GestureDetector(
onTap: () {
setState(() {
isSelect = !isSelect;
isSelect ? total += 1 : total -= 1;
});
widget.action?.call(isSelect, total);
final newIsSelected =
!initialIsSelected;

final newTotal =
newIsSelected
? total + 1
: total - 1;

action?.call(
newIsSelected,
newTotal,
);
},
child: Image.asset(
widget.imagePath,
color: isSelect ? widget.activeColor : AppColors.gray50,
height: widget.iconSize,
width: widget.iconSize,
imagePath,
color: initialIsSelected
? activeColor
: AppColors.gray50,
height: iconSize,
width: iconSize,
),
),
AppGap.h4,
Text(
"$total",
style: TextStyle(
fontSize: widget.totalStyle.fontSize,
fontWeight: widget.totalStyle.fontWeight,
color: AppColors.gray60,
fontSize:
Comment thread
ryusuye0n marked this conversation as resolved.
Outdated
totalStyle.fontSize,
fontWeight:
totalStyle.fontWeight,
color:
AppColors.gray60,
),
),
],
Expand Down
9 changes: 4 additions & 5 deletions lib/core/router/bindings/community_binding.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:get/get.dart';
import 'package:ondo/core/router/bindings/search_binding.dart';
import 'package:ondo/domain/usecases/post/get_cached_liked_post_ids_use_case.dart';
import 'package:ondo/domain/usecases/post/like_post_usecase.dart';
import 'package:ondo/domain/usecases/post/liked_post_use_case.dart';
import 'package:ondo/domain/usecases/post/load_recommend_post_list_use_case.dart';
import 'package:ondo/domain/usecases/post/save_post_like_local_use_case.dart';
import 'package:ondo/domain/usecases/post/unlike_post_usecase.dart';
Expand All @@ -11,17 +11,16 @@ import 'package:ondo/presentation/search/states/search_page_state.dart';
class CommunityBinding extends Bindings {
@override
void dependencies() {
/// 검색 관련 의존성
SearchBinding(pageState: SearchPageState.community).dependencies();

Get.lazyPut<CommunityController>(
() => CommunityController(
() => CommunityController(
likeUseCase: Get.find<LikePostUseCase>(),
unlikeUseCase: Get.find<UnlikePostUseCase>(),
getRecommendPostsUseCase: Get.find<LoadRecommendPostListUseCase>(),
savePostLikeLocalUseCase: Get.find<SavePostLikeLocalUseCase>(),
getCachedLikedPostIdsUseCase: Get.find<GetCachedLikedPostIdsUseCase>(),
likedPostUseCase: Get.find<LikedPostUseCase>(),
),
);
}
}
}
12 changes: 5 additions & 7 deletions lib/core/router/bindings/home_binding.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,33 @@ import 'package:ondo/core/router/bindings/search_binding.dart';
import 'package:ondo/domain/usecases/post/load_recent_popular_post_list_use_case.dart';
import 'package:ondo/domain/usecases/post/load_recommend_post_list_use_case.dart';
import 'package:ondo/domain/usecases/user/load_recommend_users_use_case.dart';
import 'package:ondo/domain/usecases/post/get_cached_liked_post_ids_use_case.dart';
import 'package:ondo/domain/usecases/post/like_post_usecase.dart';
import 'package:ondo/domain/usecases/post/liked_post_use_case.dart';
import 'package:ondo/domain/usecases/post/post_search_use_case.dart';
import 'package:ondo/domain/usecases/post/save_post_like_local_use_case.dart';
import 'package:ondo/domain/usecases/post/unlike_post_usecase.dart';
import 'package:ondo/domain/usecases/user/user_search_use_case.dart';
import 'package:ondo/presentation/home/controllers/home_controller.dart';
import 'package:ondo/presentation/search/states/search_page_state.dart';


class HomeBinding extends Bindings {
@override
void dependencies() {
SearchBinding(pageState: SearchPageState.home).dependencies();

///HomeController 등록
Get.lazyPut(
() => HomeController(
() => HomeController(
loadRecentPopularPostListUseCase:
Get.find<LoadRecentPopularPostListUseCase>(),
Get.find<LoadRecentPopularPostListUseCase>(),
postSearchUseCase: Get.find<PostSearchUseCase>(),
loadRecommendPostsUseCase: Get.find<LoadRecommendPostListUseCase>(),
loadRecommendUsersUseCase: Get.find<LoadRecommendUsersUseCase>(),
userSearchUseCase: Get.find<UserSearchUseCase>(),
likePostUseCase: Get.find<LikePostUseCase>(),
unlikePostUseCase: Get.find<UnlikePostUseCase>(),
savePostLikeLocalUseCase: Get.find<SavePostLikeLocalUseCase>(),
getCachedLikedPostIdsUseCase: Get.find<GetCachedLikedPostIdsUseCase>(),
likedPostUseCase: Get.find<LikedPostUseCase>(),
),
);
}
}
}
19 changes: 14 additions & 5 deletions lib/core/router/bindings/navigation_binding.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,32 +12,41 @@ import 'package:ondo/data/datasource/auth/auth_local_datasource_impl.dart';
import 'package:ondo/data/datasource/auth/auth_remote_datasource.dart';
import 'package:ondo/data/datasource/base/auth_local_datasource.dart';
import 'package:ondo/data/network/clients/auth_client.dart';
import 'package:ondo/presentation/community/controllers/like_state_controller.dart';
import 'package:ondo/presentation/navigation/controllers/navigation_controller.dart';


class NavigationBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<AuthRemoteDatasource>(
() => AuthRemoteDatasource(Env.apiBaseUrl),
() => AuthRemoteDatasource(Env.apiBaseUrl),
fenix: true,
);

Get.lazyPut<AuthLocalDatasource>(
() => AuthLocalDatasourceImpl(),
() => AuthLocalDatasourceImpl(),
fenix: true,
);

/// 인증 token을 포함하는 client 등록
Get.lazyPut(
() => AuthClient(
() => AuthClient(
localDatasource: Get.find<AuthLocalDatasource>(),
remoteDatasource: Get.find<AuthRemoteDatasource>(),
onAuthFailed: () => appRouter.go(RoutePaths.login),
),
fenix: true,
);

/// 전역 LikeStateController 등록
Comment thread
ryusuye0n marked this conversation as resolved.
Outdated
Get.put(LikeStateController(), permanent: true);

/// 전 화면 공통 controller 등록
Get.lazyPut<NavigationController>(() => NavigationController());
Get.lazyPut<NavigationController>(
() => NavigationController(),
);

NotificationBinding().dependencies();

UserBinding().dependencies();
Expand All @@ -49,4 +58,4 @@ class NavigationBinding extends Bindings {
ChatBinding().dependencies();
ProfileBinding().dependencies();
}
}
}
50 changes: 20 additions & 30 deletions lib/core/router/bindings/post_binding.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import 'package:ondo/data/datasource/post/post_remote_datasource.dart';
import 'package:ondo/data/network/clients/auth_client.dart';
import 'package:ondo/data/repositories/post/post_repository_impl.dart';
import 'package:ondo/domain/usecases/post/bookmark_post_usecase.dart';
import 'package:ondo/domain/usecases/post/get_cached_liked_post_ids_use_case.dart';
import 'package:ondo/domain/usecases/post/like_post_usecase.dart';
import 'package:ondo/domain/usecases/post/liked_post_use_case.dart'; // ← 추가
import 'package:ondo/domain/usecases/post/load_recent_popular_post_list_use_case.dart';
import 'package:ondo/domain/usecases/post/load_recommend_post_list_use_case.dart';
import 'package:ondo/domain/usecases/post/post_search_use_case.dart';
Expand All @@ -18,68 +18,58 @@ class PostBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<PostRemoteDatasource>(
() => PostRemoteDatasource(
Get.find<AuthClient>(),
),
() => PostRemoteDatasource(Get.find<AuthClient>()),
);

Get.lazyPut<PostLocalDatasource>(
() => PostLocalDatasource(),
() => PostLocalDatasource(),
);

// Post Repository
Get.lazyPut<PostRepositoryImpl>(
() => PostRepositoryImpl(
() => PostRepositoryImpl(
Get.find<PostRemoteDatasource>(),
Get.find<PostLocalDatasource>(),
),
);
Get.lazyPut<LikePostUseCase>(
() => LikePostUseCase(
Get.find<PostRepositoryImpl>(),
),

Get.lazyPut<LikePostUseCase>( // ← 서버 좋아요 요청
() => LikePostUseCase(Get.find<PostRepositoryImpl>()),
);

Get.lazyPut<LikedPostUseCase>( // ← 로컬 캐시 확인
() => LikedPostUseCase(Get.find<PostRepositoryImpl>()),
);

Get.lazyPut<UnlikePostUseCase>(
() => UnlikePostUseCase(
Get.find<PostRepositoryImpl>(),
),
() => UnlikePostUseCase(Get.find<PostRepositoryImpl>()),
);

// 추가된 북마크 UseCase
Get.lazyPut<BookmarkPostUseCase>(
() => BookmarkPostUseCase(
Get.find<PostRepositoryImpl>(),
),
() => BookmarkPostUseCase(Get.find<PostRepositoryImpl>()),
);

Get.lazyPut<UnbookmarkPostUseCase>(
() => UnbookmarkPostUseCase(
Get.find<PostRepositoryImpl>(),
),
() => UnbookmarkPostUseCase(Get.find<PostRepositoryImpl>()),
);

Get.lazyPut<PostSearchUseCase>(
() => PostSearchUseCase(Get.find<PostRepositoryImpl>()),
() => PostSearchUseCase(Get.find<PostRepositoryImpl>()),
);

Get.lazyPut<SavePostLikeLocalUseCase>(
() => SavePostLikeLocalUseCase(Get.find<PostRepositoryImpl>()),
);
Get.lazyPut<GetCachedLikedPostIdsUseCase>(
() => GetCachedLikedPostIdsUseCase(Get.find<PostRepositoryImpl>()),
() => SavePostLikeLocalUseCase(Get.find<PostRepositoryImpl>()),
);

Get.lazyPut(
() => LoadRecommendPostListUseCase(Get.find<PostRepositoryImpl>()),
() => LoadRecommendPostListUseCase(Get.find<PostRepositoryImpl>()),
);

Get.lazyPut(
() => LoadRecentPopularPostListUseCase(Get.find<PostRepositoryImpl>()),
() => LoadRecentPopularPostListUseCase(Get.find<PostRepositoryImpl>()),
);

Get.lazyPut(
() => PostController(),
() => PostController(),
);
}
}
}
Loading
Loading