diff --git a/examples/postly/lib/di/app_module.dart b/examples/postly/lib/di/app_module.dart new file mode 100644 index 0000000..5dd9637 --- /dev/null +++ b/examples/postly/lib/di/app_module.dart @@ -0,0 +1,21 @@ +import 'package:dio/dio.dart'; +import 'package:cherrypick/cherrypick.dart'; +import '../data/network/json_placeholder_api.dart'; +import '../data/post_repository_impl.dart'; +import '../domain/repository/post_repository.dart'; + +class AppModule extends Module { + @override + void builder(Scope currentScope) { + bind().toProvide(() => Dio()).singleton(); + + bind() + .toProvide(() => JsonPlaceholderApi(currentScope.resolve())) + .singleton(); + + bind() + .toProvide(() => + PostRepositoryImpl(currentScope.resolve())) + .singleton(); + } +} diff --git a/examples/postly/lib/main.dart b/examples/postly/lib/main.dart index d66193b..394fbc2 100644 --- a/examples/postly/lib/main.dart +++ b/examples/postly/lib/main.dart @@ -1,28 +1,29 @@ +import 'package:cherrypick/cherrypick.dart'; import 'package:flutter/material.dart'; -import 'package:dio/dio.dart'; -import 'data/network/json_placeholder_api.dart'; -import 'data/post_repository_impl.dart'; +import 'di/app_module.dart'; import 'domain/repository/post_repository.dart'; import 'presentation/bloc/post_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'router/app_router.dart'; void main() { - final dio = Dio(); - final api = JsonPlaceholderApi(dio); - final repository = PostRepositoryImpl(api); + final scope = CherryPick.openRootScope(); + scope.installModules([AppModule()]); - runApp(MyApp(repository: repository)); + runApp(MyApp(scope: scope)); } class MyApp extends StatelessWidget { - final PostRepository repository; + final Scope scope; final _appRouter = AppRouter(); - MyApp({super.key, required this.repository}); + MyApp({super.key, required this.scope}); @override Widget build(BuildContext context) { + // Получаем репозиторий через injector + final repository = scope.resolve(); + return BlocProvider( create: (_) => PostBloc(repository), child: MaterialApp.router( diff --git a/examples/postly/pubspec.lock b/examples/postly/pubspec.lock index 826fb82..3fcb01b 100644 --- a/examples/postly/pubspec.lock +++ b/examples/postly/pubspec.lock @@ -150,6 +150,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + cherrypick: + dependency: "direct main" + description: + name: cherrypick + sha256: e1e2b4f3a70cbe7760e479e6ddb7dce2fc85a1bbb2fba6c398efe235ed111dfe + url: "https://pub.dev" + source: hosted + version: "2.0.2" clock: dependency: transitive description: diff --git a/examples/postly/pubspec.yaml b/examples/postly/pubspec.yaml index 6a95235..fd996c3 100644 --- a/examples/postly/pubspec.yaml +++ b/examples/postly/pubspec.yaml @@ -11,6 +11,9 @@ environment: dependencies: flutter: sdk: flutter + + cherrypick: any + dio: ^5.4.0 retrofit: ^4.0.3 freezed_annotation: ^2.0.0 diff --git a/examples/postly/test/widget_test.dart b/examples/postly/test/widget_test.dart index 259856b..c7ce080 100644 --- a/examples/postly/test/widget_test.dart +++ b/examples/postly/test/widget_test.dart @@ -5,29 +5,24 @@ // gestures. You can also use WidgetTester to find child widgets in the widget // tree, read text, and verify that the values of widget properties are correct. -import 'package:dio/dio.dart'; +import 'package:cherrypick/cherrypick.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:postly/data/network/json_placeholder_api.dart'; -import 'package:postly/data/post_repository_impl.dart'; -import 'package:postly/domain/repository/post_repository.dart'; +import 'package:postly/di/app_module.dart'; import 'package:postly/main.dart'; void main() { - late Dio dio; - late JsonPlaceholderApi api; - late PostRepository repository; + late Scope scope; setUp(() { - dio = Dio(); - api = JsonPlaceholderApi(dio); - repository = PostRepositoryImpl(api); + scope = CherryPick.openRootScope(); + scope.installModules([AppModule()]); }); testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. await tester.pumpWidget(MyApp( - repository: repository, + scope: scope, )); // Verify that our counter starts at 0.