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
60 changes: 35 additions & 25 deletions lib/core/design_system/components/custom_icon_button.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,15 @@ 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 {
const CustomIconButton({
Expand All @@ -23,62 +30,65 @@ class CustomIconButton extends StatefulWidget {
final int total;
final bool initialIsSelected;
final Color activeColor;
final void Function(bool isSelect, int total)? action;
final void Function(
bool isSelect,
int total,
)? action;

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

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

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

@override
void didUpdateWidget(CustomIconButton oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.total != widget.total) {
total = widget.total;
}
// 외부(컨트롤러)에서 갱신된 값이 들어오면 내부 상태에 반영한다.
if (oldWidget.initialIsSelected != widget.initialIsSelected) {
isSelect = widget.initialIsSelected;
_isSelected = widget.initialIsSelected;
}
if (oldWidget.total != widget.total) {
_total = widget.total;
}
}

void _onTap() {
setState(() {
_isSelected = !_isSelected;
_total += _isSelected ? 1 : -1;
});

widget.action?.call(_isSelected, _total);
}

@override
Widget build(BuildContext context) {
return Row(
mainAxisSize: MainAxisSize.min,
children: [
GestureDetector(
onTap: () {
setState(() {
isSelect = !isSelect;
isSelect ? total += 1 : total -= 1;
});
widget.action?.call(isSelect, total);
},
onTap: _onTap,
child: Image.asset(
widget.imagePath,
color: isSelect ? widget.activeColor : AppColors.gray50,
color: _isSelected ? widget.activeColor : AppColors.gray50,
height: widget.iconSize,
width: widget.iconSize,
),
),
AppGap.h4,
Text(
"$total",
style: TextStyle(
fontSize: widget.totalStyle.fontSize,
fontWeight: widget.totalStyle.fontWeight,
color: AppColors.gray60,
),
"$_total",
style: widget.totalStyle.copyWith(color: AppColors.gray60),
),
],
);
Expand Down
2 changes: 1 addition & 1 deletion lib/core/router/app_router.dart
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ final GoRouter appRouter = GoRouter(
Get.delete<PostViewController>(force: true);
}

PostViewBinding(postId, state.extra as bool? ?? false).dependencies();
PostViewBinding(postId).dependencies();

return PostDetailScreen();
},
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>(),
),
);
}
}
}
16 changes: 11 additions & 5 deletions lib/core/router/bindings/navigation_binding.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,23 @@ import 'package:ondo/data/datasource/base/auth_local_datasource.dart';
import 'package:ondo/data/network/clients/auth_client.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),
Expand All @@ -38,7 +40,11 @@ class NavigationBinding extends Bindings {
);

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

NotificationBinding().dependencies();

NotificationBinding().dependencies();
ReportBinding().dependencies();
Expand All @@ -51,4 +57,4 @@ class NavigationBinding extends Bindings {
ChatBinding().dependencies();
ProfileBinding().dependencies();
}
}
}
53 changes: 21 additions & 32 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,57 @@ 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(),
);
/// 좋아요 상태 동기화 이벤트를 전역으로 유지해야 하므로 permanent 등록
Get.put(PostController(), permanent: true);
}
}
}
Loading
Loading