Skip to content

Commit ff61e41

Browse files
committed
13 - Dependency Injection
1 parent a162444 commit ff61e41

File tree

2 files changed

+65
-1
lines changed

2 files changed

+65
-1
lines changed

lib/injection_container.dart

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import 'package:data_connection_checker/data_connection_checker.dart';
2+
import 'package:get_it/get_it.dart';
3+
import 'package:http/http.dart' as http;
4+
import 'package:shared_preferences/shared_preferences.dart';
5+
6+
import 'core/network/network_info.dart';
7+
import 'core/util/input_converter.dart';
8+
import 'features/number_trivia/data/datasources/number_trivia_local_data_source.dart';
9+
import 'features/number_trivia/data/datasources/number_trivia_remote_data_source.dart';
10+
import 'features/number_trivia/data/repositories/number_trivia_repository_impl.dart';
11+
import 'features/number_trivia/domain/repositories/number_trivia_repository.dart';
12+
import 'features/number_trivia/domain/usecases/get_concrete_number_trivia.dart';
13+
import 'features/number_trivia/domain/usecases/get_random_number_trivia.dart';
14+
import 'features/number_trivia/presentation/bloc/number_trivia_bloc.dart';
15+
16+
final sl = GetIt.instance;
17+
18+
Future<void> init() async {
19+
//! Features - Number Trivia
20+
// Bloc
21+
sl.registerFactory(
22+
() => NumberTriviaBloc(
23+
concrete: sl(),
24+
inputConverter: sl(),
25+
random: sl(),
26+
),
27+
);
28+
29+
// Use cases
30+
sl.registerLazySingleton(() => GetConcreteNumberTrivia(sl()));
31+
sl.registerLazySingleton(() => GetRandomNumberTrivia(sl()));
32+
33+
// Repository
34+
sl.registerLazySingleton<NumberTriviaRepository>(
35+
() => NumberTriviaRepositoryImpl(
36+
localDataSource: sl(),
37+
networkInfo: sl(),
38+
remoteDataSource: sl(),
39+
),
40+
);
41+
42+
// Data sources
43+
sl.registerLazySingleton<NumberTriviaRemoteDataSource>(
44+
() => NumberTriviaRemoteDataSourceImpl(client: sl()),
45+
);
46+
47+
sl.registerLazySingleton<NumberTriviaLocalDataSource>(
48+
() => NumberTriviaLocalDataSourceImpl(sharedPreferences: sl()),
49+
);
50+
51+
//! Core
52+
sl.registerLazySingleton(() => InputConverter());
53+
sl.registerLazySingleton<NetworkInfo>(() => NetworkInfoImpl(sl()));
54+
55+
//! External
56+
final sharedPreferences = await SharedPreferences.getInstance();
57+
sl.registerLazySingleton(() => sharedPreferences);
58+
sl.registerLazySingleton(() => http.Client());
59+
sl.registerLazySingleton(() => DataConnectionChecker());
60+
}

lib/main.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import 'package:flutter/material.dart';
2+
import 'injection_container.dart' as di;
23

3-
void main() => runApp(MyApp());
4+
void main() async {
5+
await di.init();
6+
runApp(MyApp());
7+
}
48

59
class MyApp extends StatelessWidget {
610
// This widget is the root of your application.

0 commit comments

Comments
 (0)