Skip to content

Commit

Permalink
feat: injectable
Browse files Browse the repository at this point in the history
  • Loading branch information
junsuk5 committed Apr 25, 2024
1 parent ded3840 commit 4ca1779
Show file tree
Hide file tree
Showing 10 changed files with 48 additions and 24 deletions.
2 changes: 2 additions & 0 deletions lib/09_use_case/data/data_source/photo_data_source.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import 'dart:convert';

import 'package:http/http.dart' as http;
import 'package:injectable/injectable.dart';

import '../dto/photo_result_dto.dart';

@singleton
class PhotoDataSource {
final _baseUrl = 'https://pixabay.com/api/';

Expand Down
2 changes: 2 additions & 0 deletions lib/09_use_case/data/repository/photo_repository_impl.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@

import 'package:injectable/injectable.dart';
import 'package:learn_flutter_together/09_use_case/data/data_source/photo_data_source.dart';
import 'package:learn_flutter_together/09_use_case/data/mapper/photo_mapper.dart';
import 'package:learn_flutter_together/09_use_case/domain/repository/photo_repository.dart';

import '../../domain/model/photo.dart';

@Singleton(as: PhotoRepository)
class PhotoRepositoryImpl implements PhotoRepository {
final PhotoDataSource _photoDataSource;

Expand Down
28 changes: 5 additions & 23 deletions lib/09_use_case/di/di_setup.dart
Original file line number Diff line number Diff line change
@@ -1,29 +1,11 @@
import 'package:get_it/get_it.dart';
import 'package:injectable/injectable.dart';

import '../data/data_source/photo_data_source.dart';
import '../data/repository/photo_repository_impl.dart';
import '../domain/repository/photo_repository.dart';
import '../domain/use_case/get_photos_top3_use_case.dart';
import '../domain/use_case/get_photos_top5_use_case.dart';
import '../domain/use_case/get_photos_use_case.dart';
import '../presentation/search_list/search_list_view_model.dart';
import 'di_setup.config.dart';

final getIt = GetIt.instance;

Future<void> diSetup() async {
getIt.registerSingleton<PhotoDataSource>(PhotoDataSource());
getIt.registerSingleton<PhotoRepository>(
PhotoRepositoryImpl(photoDataSource: getIt()));
getIt.registerSingleton<GetPhotosTop3UseCase>(GetPhotosTop3UseCase(getIt()));
getIt.registerSingleton<GetPhotosTop5UseCase>(GetPhotosTop5UseCase(getIt()));
getIt.registerSingleton<GetPhotosUseCase>(
GetPhotosUseCase(
getPhotosTop3UseCase: getIt(),
getPhotosTop5UseCase: getIt(),
),
);

getIt.registerFactory<SearchListViewModel>(
() => SearchListViewModel(getPhotosUseCase: getIt()),
);
}
@InjectableInit()
void configureDependencies() => getIt.init();

3 changes: 3 additions & 0 deletions lib/09_use_case/domain/use_case/get_photos_top3_use_case.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import 'package:injectable/injectable.dart';

import '../model/photo.dart';
import '../repository/photo_repository.dart';

@singleton
class GetPhotosTop3UseCase {
final PhotoRepository _photoRepository;

Expand Down
3 changes: 3 additions & 0 deletions lib/09_use_case/domain/use_case/get_photos_top5_use_case.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import 'package:injectable/injectable.dart';

import '../model/photo.dart';
import '../repository/photo_repository.dart';

@singleton
class GetPhotosTop5UseCase {
final PhotoRepository _photoRepository;

Expand Down
2 changes: 2 additions & 0 deletions lib/09_use_case/domain/use_case/get_photos_use_case.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import 'package:injectable/injectable.dart';
import 'package:learn_flutter_together/09_use_case/core/result.dart';
import 'package:learn_flutter_together/09_use_case/domain/use_case/get_photos_top3_use_case.dart';
import 'package:learn_flutter_together/09_use_case/domain/use_case/get_photos_top5_use_case.dart';

import '../model/photo.dart';

@singleton
class GetPhotosUseCase {
final GetPhotosTop3UseCase _getPhotosTop3UseCase;
final GetPhotosTop5UseCase _getPhotosTop5UseCase;
Expand Down
2 changes: 1 addition & 1 deletion lib/09_use_case/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:learn_flutter_together/09_use_case/core/router.dart';
import 'package:learn_flutter_together/09_use_case/di/di_setup.dart';

void main() async {
await diSetup();
configureDependencies();
runApp(const MyApp());
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:injectable/injectable.dart';
import 'package:learn_flutter_together/09_use_case/core/result.dart';
import 'package:learn_flutter_together/09_use_case/domain/model/photo.dart';
import 'package:learn_flutter_together/09_use_case/domain/use_case/get_photos_use_case.dart';
import 'package:learn_flutter_together/09_use_case/presentation/search_list/search_list_event.dart';

import 'search_list_state.dart';

@injectable
class SearchListViewModel with ChangeNotifier {
final GetPhotosUseCase _getPhotosUseCase;

final _eventController = StreamController<SearchListEvent>();

final eventNotifier = ValueNotifier<SearchListEvent?>(null);

Stream<SearchListEvent> get eventStream => _eventController.stream;

SearchListViewModel({
Expand Down
24 changes: 24 additions & 0 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.0.2"
injectable:
dependency: "direct main"
description:
name: injectable
sha256: "3d98967224a5fdd4094a61bf53ed9616c3fbcf3e090bf83e7cb7d436d0c20041"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
injectable_generator:
dependency: "direct dev"
description:
name: injectable_generator
sha256: "2ca3ada337eac0ef6b82f8049c970ddb63947738fdf32ac6cbef8d1567d7ba05"
url: "https://pub.dev"
source: hosted
version: "2.6.1"
io:
dependency: transitive
description:
Expand Down Expand Up @@ -480,6 +496,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.2.3"
recase:
dependency: transitive
description:
name: recase
sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213
url: "https://pub.dev"
source: hosted
version: "4.1.0"
retrofit:
dependency: "direct main"
description:
Expand Down
2 changes: 2 additions & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ dependencies:
dio: ^5.4.3+1
get_it: ^7.7.0
retrofit: ^4.1.0
injectable: ^2.4.1

dev_dependencies:
flutter_test:
Expand All @@ -58,6 +59,7 @@ dev_dependencies:
freezed: ^2.4.7
json_serializable: ^6.7.1
retrofit_generator: ^8.1.0
injectable_generator: ^2.6.1

# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
Expand Down

0 comments on commit 4ca1779

Please sign in to comment.