diff --git a/lib/domain/i_counter_repository.dart b/lib/domain/i_counter_repository.dart index 84ed65c..1b33599 100644 --- a/lib/domain/i_counter_repository.dart +++ b/lib/domain/i_counter_repository.dart @@ -1,13 +1,3 @@ -import 'package:injectable/injectable.dart'; -import 'package:injectable_tutorial/infrastructure/counter_repository.dart'; -import 'package:injectable_tutorial/infrastructure/dev_counter_repository.dart'; -import 'package:injectable_tutorial/infrastructure/mock_counter_repository.dart'; -import 'package:injectable_tutorial/injection.dart'; - -@Bind.toType(MockCounterRepository, env: Env.test) -@Bind.toType(DevCounterRepository, env: Env.dev) -@Bind.toType(CounterRepository, env: Env.prod) -@injectable abstract class ICounterRepository { int getIncrement(); } diff --git a/lib/infrastructure/counter_repository.dart b/lib/infrastructure/counter_repository.dart index d43efd7..902c3b0 100644 --- a/lib/infrastructure/counter_repository.dart +++ b/lib/infrastructure/counter_repository.dart @@ -1,7 +1,9 @@ import 'package:injectable/injectable.dart'; import 'package:injectable_tutorial/domain/i_counter_repository.dart'; -@injectable + +@Environment("prod") +@Injectable(as: ICounterRepository) class CounterRepository implements ICounterRepository { @override int getIncrement() => 1; diff --git a/lib/infrastructure/dev_counter_repository.dart b/lib/infrastructure/dev_counter_repository.dart index b570918..dced96c 100644 --- a/lib/infrastructure/dev_counter_repository.dart +++ b/lib/infrastructure/dev_counter_repository.dart @@ -1,8 +1,10 @@ import 'package:injectable/injectable.dart'; import 'package:injectable_tutorial/domain/i_counter_repository.dart'; -@injectable + +@Environment("dev") +@Injectable(as: ICounterRepository) class DevCounterRepository implements ICounterRepository { @override - int getIncrement() => 2; + int getIncrement() => 5; } diff --git a/lib/infrastructure/mock_counter_repository.dart b/lib/infrastructure/mock_counter_repository.dart index 3c6ff75..d9232d7 100644 --- a/lib/infrastructure/mock_counter_repository.dart +++ b/lib/infrastructure/mock_counter_repository.dart @@ -2,5 +2,6 @@ import 'package:injectable/injectable.dart'; import 'package:injectable_tutorial/domain/i_counter_repository.dart'; import 'package:mockito/mockito.dart'; -@injectable +@Environment("test") +@Injectable(as: ICounterRepository) class MockCounterRepository extends Mock implements ICounterRepository {} diff --git a/lib/injection.config.dart b/lib/injection.config.dart new file mode 100644 index 0000000..50e3c4c --- /dev/null +++ b/lib/injection.config.dart @@ -0,0 +1,39 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ************************************************************************** +// InjectableConfigGenerator +// ************************************************************************** + +import 'package:get_it/get_it.dart'; +import 'package:injectable/injectable.dart'; + +import 'presentation/counter_change_notifier.dart'; +import 'infrastructure/counter_repository.dart'; +import 'infrastructure/dev_counter_repository.dart'; +import 'domain/i_counter_repository.dart'; +import 'infrastructure/mock_counter_repository.dart'; + +/// Environment names +const _prod = 'prod'; +const _dev = 'dev'; +const _test = 'test'; + +/// adds generated dependencies +/// to the provided [GetIt] instance + +GetIt $initGetIt( + GetIt get, { + String environment, + EnvironmentFilter environmentFilter, +}) { + final gh = GetItHelper(get, environment, environmentFilter); + gh.factory(() => CounterRepository(), + registerFor: {_prod}); + gh.factory(() => DevCounterRepository(), + registerFor: {_dev}); + gh.factory(() => MockCounterRepository(), + registerFor: {_test}); + gh.factory( + () => CounterChangeNotifier(get())); + return get; +} diff --git a/lib/injection.dart b/lib/injection.dart index d1c59d3..a2bb1d0 100644 --- a/lib/injection.dart +++ b/lib/injection.dart @@ -1,9 +1,12 @@ +import 'package:get_it/get_it.dart'; import 'package:injectable/injectable.dart'; -import 'package:injectable_tutorial/injection.iconfig.dart'; +import 'package:injectable_tutorial/injection.config.dart'; + +final getIt = GetIt.instance; @injectableInit void configureInjection(String environment) => - $initGetIt(environment: environment); + $initGetIt(getIt, environment: environment); abstract class Env { static const test = 'test'; diff --git a/lib/injection.iconfig.dart b/lib/injection.iconfig.dart deleted file mode 100644 index 62be855..0000000 --- a/lib/injection.iconfig.dart +++ /dev/null @@ -1,43 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -// ************************************************************************** -// InjectableConfigGenerator -// ************************************************************************** - -import 'package:injectable_tutorial/domain/i_counter_repository.dart'; -import 'package:injectable_tutorial/infrastructure/counter_repository.dart'; -import 'package:injectable_tutorial/infrastructure/dev_counter_repository.dart'; -import 'package:injectable_tutorial/presentation/counter_change_notifier.dart'; -import 'package:injectable_tutorial/infrastructure/mock_counter_repository.dart'; -import 'package:get_it/get_it.dart'; - -final getIt = GetIt.instance; -void $initGetIt({String environment}) { - getIt - ..registerFactory(() => CounterRepository()) - ..registerFactory(() => DevCounterRepository()) - ..registerFactory( - () => CounterChangeNotifier(getIt())) - ..registerFactory(() => MockCounterRepository()); - if (environment == 'test') { - _registerTestDependencies(); - } - if (environment == 'dev') { - _registerDevDependencies(); - } - if (environment == 'prod') { - _registerProdDependencies(); - } -} - -void _registerTestDependencies() { - getIt..registerFactory(() => MockCounterRepository()); -} - -void _registerDevDependencies() { - getIt..registerFactory(() => DevCounterRepository()); -} - -void _registerProdDependencies() { - getIt..registerFactory(() => CounterRepository()); -} diff --git a/lib/main.dart b/lib/main.dart index bf0397e..e33defb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,14 +1,12 @@ import 'package:flutter/material.dart'; -import 'package:injectable_tutorial/infrastructure/counter_repository.dart'; -import 'package:injectable_tutorial/infrastructure/dev_counter_repository.dart'; import 'package:injectable_tutorial/injection.dart'; -import 'package:injectable_tutorial/injection.iconfig.dart'; import 'package:injectable_tutorial/presentation/counter_change_notifier.dart'; import 'package:injectable_tutorial/presentation/counter_page.dart'; + import 'package:provider/provider.dart'; void main() { - configureInjection(Env.dev); + configureInjection(Env.prod); runApp(MyApp()); } @@ -18,6 +16,7 @@ class MyApp extends StatelessWidget { return MaterialApp( title: 'Material App', home: ChangeNotifierProvider( + // Manually passing in the production repository create: (_) => getIt(), child: CounterPage(), ), diff --git a/lib/presentation/counter_change_notifier.dart b/lib/presentation/counter_change_notifier.dart index 892b6d1..5c0f8da 100644 --- a/lib/presentation/counter_change_notifier.dart +++ b/lib/presentation/counter_change_notifier.dart @@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart'; import 'package:injectable/injectable.dart'; import 'package:injectable_tutorial/domain/i_counter_repository.dart'; + @injectable class CounterChangeNotifier extends ChangeNotifier { final ICounterRepository _counterRepository; diff --git a/pubspec.lock b/pubspec.lock index 1a9a042..7ef9a5c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,21 +7,14 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "1.0.3" + version: "12.0.0" analyzer: dependency: transitive description: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "0.39.4" - archive: - dependency: transitive - description: - name: archive - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.11" + version: "0.40.6" args: dependency: transitive description: @@ -35,28 +28,28 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.5.0-nullsafety.1" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "2.1.0-nullsafety.1" build: dependency: transitive description: name: build url: "https://pub.dartlang.org" source: hosted - version: "1.2.2" + version: "1.6.1" build_config: dependency: transitive description: name: build_config url: "https://pub.dartlang.org" source: hosted - version: "0.4.1+1" + version: "0.4.5" build_daemon: dependency: transitive description: @@ -70,21 +63,21 @@ packages: name: build_resolvers url: "https://pub.dartlang.org" source: hosted - version: "1.3.2" + version: "1.5.2" build_runner: dependency: "direct dev" description: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "1.7.3" + version: "1.11.0" build_runner_core: dependency: transitive description: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "4.3.0" + version: "6.1.6" built_collection: dependency: transitive description: @@ -99,13 +92,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "7.0.8" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0-nullsafety.3" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.2.0-nullsafety.1" checked_yaml: dependency: transitive description: @@ -113,20 +113,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.2" + cli_util: + dependency: transitive + description: + name: cli_util + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0-nullsafety.1" code_builder: dependency: transitive description: name: code_builder url: "https://pub.dartlang.org" source: hosted - version: "3.2.1" + version: "3.6.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.11" + version: "1.15.0-nullsafety.3" convert: dependency: transitive description: @@ -141,13 +155,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.3" - csslib: - dependency: transitive - description: - name: csslib - url: "https://pub.dartlang.org" - source: hosted - version: "0.16.1" cupertino_icons: dependency: "direct main" description: @@ -161,7 +168,14 @@ packages: name: dart_style url: "https://pub.dartlang.org" source: hosted - version: "1.3.3" + version: "1.3.10" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0-nullsafety.1" fixnum: dependency: transitive description: @@ -185,7 +199,7 @@ packages: name: get_it url: "https://pub.dartlang.org" source: hosted - version: "3.1.0" + version: "5.0.6" glob: dependency: transitive description: @@ -200,13 +214,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.2.0" - html: - dependency: transitive - description: - name: html - url: "https://pub.dartlang.org" - source: hosted - version: "0.14.0+3" http: dependency: transitive description: @@ -228,27 +235,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.1.3" - image: - dependency: transitive - description: - name: image - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.4" injectable: dependency: "direct main" description: name: injectable url: "https://pub.dartlang.org" source: hosted - version: "0.1.0" + version: "1.0.7" injectable_generator: dependency: "direct dev" description: name: injectable_generator url: "https://pub.dartlang.org" source: hosted - version: "0.1.0" + version: "1.0.7" io: dependency: transitive description: @@ -283,14 +283,14 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.6" + version: "0.12.10-nullsafety.1" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.1.8" + version: "1.3.0-nullsafety.3" mime: dependency: transitive description: @@ -304,7 +304,7 @@ packages: name: mockito url: "https://pub.dartlang.org" source: hosted - version: "4.1.1" + version: "4.1.4" nested: dependency: transitive description: @@ -332,7 +332,7 @@ packages: name: package_config url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.9.3" package_resolver: dependency: transitive description: @@ -346,7 +346,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.6.4" + version: "1.8.0-nullsafety.1" pedantic: dependency: transitive description: @@ -354,13 +354,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.0+1" - petitparser: - dependency: transitive - description: - name: petitparser - url: "https://pub.dartlang.org" - source: hosted - version: "2.4.0" pool: dependency: transitive description: @@ -374,7 +367,7 @@ packages: name: provider url: "https://pub.dartlang.org" source: hosted - version: "4.0.2" + version: "4.3.3" pub_semver: dependency: transitive description: @@ -421,28 +414,28 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "0.9.4+7" + version: "0.9.10+1" source_span: dependency: transitive description: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.5.5" + version: "1.8.0-nullsafety.2" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.9.3" + version: "1.10.0-nullsafety.1" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0-nullsafety.1" stream_transform: dependency: transitive description: @@ -456,21 +449,21 @@ packages: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "1.1.0-nullsafety.1" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0-nullsafety.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.11" + version: "0.2.19-nullsafety.2" timing: dependency: transitive description: @@ -484,14 +477,14 @@ packages: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.1.6" + version: "1.3.0-nullsafety.3" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.1.0-nullsafety.3" watcher: dependency: transitive description: @@ -506,13 +499,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.0" - xml: - dependency: transitive - description: - name: xml - url: "https://pub.dartlang.org" - source: hosted - version: "3.5.0" yaml: dependency: transitive description: @@ -521,5 +507,5 @@ packages: source: hosted version: "2.2.0" sdks: - dart: ">=2.6.0 <3.0.0" - flutter: ">=1.12.1" + dart: ">=2.10.0 <2.11.0" + flutter: ">=1.16.0 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 19ce9ef..6291216 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,9 +19,9 @@ environment: dependencies: flutter: sdk: flutter - provider: ^4.0.2 - injectable: ^0.1.0 - get_it: ^3.1.0 + provider: ^4.3.3 + injectable: ^1.0.7 + get_it: ^5.0.6 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. @@ -31,8 +31,8 @@ dev_dependencies: flutter_test: sdk: flutter build_runner: - injectable_generator: ^0.1.0 - mockito: ^4.1.1 + injectable_generator: ^1.0.7 + mockito: ^4.1.4 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/test/example_test.dart b/test/example_test.dart index fb3205a..ae95fde 100644 --- a/test/example_test.dart +++ b/test/example_test.dart @@ -1,6 +1,6 @@ import 'package:injectable_tutorial/domain/i_counter_repository.dart'; import 'package:injectable_tutorial/injection.dart'; -import 'package:injectable_tutorial/injection.iconfig.dart'; +import 'package:injectable_tutorial/injection.config.dart'; import 'package:mockito/mockito.dart'; import 'package:flutter_test/flutter_test.dart';