From 4e5062e88ac989ea73044926ae9132cb6d5a6f31 Mon Sep 17 00:00:00 2001 From: Abhishek Khanal Date: Mon, 12 Jan 2026 19:01:42 +0545 Subject: [PATCH 1/8] chore: upgraded dependencies to latest versions --- analysis_options.yaml | 3 ++- packages/clean_framework/example/.gitignore | 2 ++ .../lib/core/dependency_providers.dart | 2 +- .../profile/domain/profile_use_case.dart | 19 +++++--------- .../external_interface_providers.dart | 2 +- .../lib/providers/gateway_providers.dart | 6 ++--- .../lib/providers/use_case_providers.dart | 4 +-- .../example/lib/widgets/svg_palette_card.dart | 9 +++---- packages/clean_framework/example/pubspec.yaml | 8 +++--- .../presentation/home_presenter_test.dart | 10 +++----- .../profile/domain/profile_use_case_test.dart | 24 +++++++----------- .../presentation/profile_presenter_test.dart | 8 +++--- .../test/helpers/test_cache_manager.dart | 4 +-- .../example/test/widgets/app_scope_test.dart | 18 ++++++++----- .../lib/src/app_providers_container.dart | 1 + .../lib/src/core/app_provider_scope.dart | 1 + .../src/core/clean_framework_provider.dart | 2 +- .../core/dependency/dependency_provider.dart | 4 +-- .../external_interface.dart | 19 +++++++------- .../external_interface_provider.dart | 4 +-- .../lib/src/core/gateway/gateway.dart | 19 +++++++------- .../src/core/gateway/gateway_provider.dart | 4 +-- .../core/use_case/provider/auto_dispose.dart | 10 ++++---- .../src/core/use_case/provider/bridge.dart | 9 ++++--- .../src/core/use_case/provider/family.dart | 25 ++++++++----------- .../use_case/provider/use_case_provider.dart | 5 ++-- .../lib/src/core/use_case/use_case.dart | 23 ++++++----------- .../providers/bridge_gateway_provider.dart | 4 +-- .../lib/src/providers/external_interface.dart | 14 +++++------ .../external_interface_provider.dart | 4 +-- .../lib/src/providers/gateway_provider.dart | 1 + .../src/providers/overridable_provider.dart | 2 +- .../lib/src/providers/use_case_provider.dart | 11 ++++---- .../lib/src/widgets/src/feature_scope.dart | 8 +++--- packages/clean_framework/pubspec.yaml | 8 +++--- .../test/core/app_provider_scope_test.dart | 14 +++++------ .../external_interface_test.dart | 18 ++++++------- .../core/gateway/gateway_provider_test.dart | 2 +- .../test/core/gateway/gateway_test.dart | 16 ++++++------ .../core/use_case/use_case_provider_test.dart | 16 +++++------- .../presenter/presenter_test.dart | 10 +++----- .../test/providers/presenter_widget_test.dart | 24 ++++++++---------- .../theme_example/pubspec.yaml | 6 ++--- .../lib/src/firebase_client_fake.dart | 2 +- .../clean_framework_firestore/pubspec.yaml | 10 ++++---- packages/clean_framework_graphql/pubspec.yaml | 8 +++--- .../home/presentation/home_presenter.dart | 8 +++--- .../flutter/generated_plugin_registrant.cc | 4 --- .../linux/flutter/generated_plugins.cmake | 1 - .../flutter/generated_plugin_registrant.cc | 6 ++--- .../windows/flutter/generated_plugins.cmake | 2 +- .../lib/src/http_external_interface.dart | 8 +++--- packages/clean_framework_http/pubspec.yaml | 8 +++--- packages/clean_framework_router/pubspec.yaml | 8 +++--- .../lib/src/presenter_test.dart | 10 +++----- .../clean_framework_test/lib/src/ui_test.dart | 2 +- packages/clean_framework_test/pubspec.yaml | 10 ++++---- pubspec.yaml | 4 +-- 58 files changed, 225 insertions(+), 269 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 78e281bb..966aca12 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -4,4 +4,5 @@ linter: rules: one_member_abstracts: false only_throw_errors: false - public_member_api_docs: false \ No newline at end of file + public_member_api_docs: false + lines_longer_than_80_chars: false \ No newline at end of file diff --git a/packages/clean_framework/example/.gitignore b/packages/clean_framework/example/.gitignore index 24476c5d..6c319542 100644 --- a/packages/clean_framework/example/.gitignore +++ b/packages/clean_framework/example/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/packages/clean_framework/example/lib/core/dependency_providers.dart b/packages/clean_framework/example/lib/core/dependency_providers.dart index 0e8263a5..aaa45e2d 100644 --- a/packages/clean_framework/example/lib/core/dependency_providers.dart +++ b/packages/clean_framework/example/lib/core/dependency_providers.dart @@ -1,6 +1,6 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:dio/dio.dart'; -final restClientProvider = DependencyProvider( +final DependencyProvider restClientProvider = DependencyProvider( (_) => Dio(BaseOptions(baseUrl: 'https://pokeapi.co/api/v2/')), ); diff --git a/packages/clean_framework/example/lib/features/profile/domain/profile_use_case.dart b/packages/clean_framework/example/lib/features/profile/domain/profile_use_case.dart index 1fead074..1e32bc8e 100644 --- a/packages/clean_framework/example/lib/features/profile/domain/profile_use_case.dart +++ b/packages/clean_framework/example/lib/features/profile/domain/profile_use_case.dart @@ -16,13 +16,13 @@ class ProfileUseCase extends UseCase { final String name; - void fetchPokemonProfile() { + Future fetchPokemonProfile() async { final pokeName = name.toLowerCase(); // If the use case is not auto disposed then we have last fetched data. if (entity.description.isNotEmpty) return; - request( + await request( PokemonSpeciesDomainToGatewayModel(name: pokeName), onSuccess: (success) { final descriptions = success.species.descriptions.where( @@ -38,7 +38,7 @@ class ProfileUseCase extends UseCase { onFailure: (failure) => entity, ); - request( + await request( PokemonProfileDomainToGatewayModel(name: pokeName), onSuccess: (success) { final profile = success.profile; @@ -48,9 +48,7 @@ class ProfileUseCase extends UseCase { types: profile.types, height: profile.height, weight: profile.weight, - stats: profile.stats - .map((s) => ProfileStatEntity(name: s.name, point: s.baseStat)) - .toList(growable: false), + stats: profile.stats.map((s) => ProfileStatEntity(name: s.name, point: s.baseStat)).toList(growable: false), ); }, onFailure: (failure) => entity, @@ -58,8 +56,7 @@ class ProfileUseCase extends UseCase { } } -class ProfileDomainToUIModelTransformer - extends DomainModelTransformer { +class ProfileDomainToUIModelTransformer extends DomainModelTransformer { @override ProfileDomainToUIModel transform(ProfileEntity entity) { return ProfileDomainToUIModel( @@ -79,10 +76,6 @@ class ProfileDomainToUIModelTransformer } String _kebabToTitleCase(String input) { - return input - .replaceAll('special', 'sp.') - .split('-') - .map((s) => s[0].toUpperCase() + s.substring(1)) - .join(' '); + return input.replaceAll('special', 'sp.').split('-').map((s) => s[0].toUpperCase() + s.substring(1)).join(' '); } } diff --git a/packages/clean_framework/example/lib/providers/external_interface_providers.dart b/packages/clean_framework/example/lib/providers/external_interface_providers.dart index 0480f0dd..6c27cd53 100644 --- a/packages/clean_framework/example/lib/providers/external_interface_providers.dart +++ b/packages/clean_framework/example/lib/providers/external_interface_providers.dart @@ -2,7 +2,7 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_example_rest/core/pokemon/pokemon_external_interface.dart'; import 'package:clean_framework_example_rest/providers/gateway_providers.dart'; -final pokemonExternalInterfaceProvider = ExternalInterfaceProvider( +final ExternalInterfaceProvider pokemonExternalInterfaceProvider = ExternalInterfaceProvider( PokemonExternalInterface.new, gateways: [ pokemonCollectionGateway, diff --git a/packages/clean_framework/example/lib/providers/gateway_providers.dart b/packages/clean_framework/example/lib/providers/gateway_providers.dart index a55624b3..880344d2 100644 --- a/packages/clean_framework/example/lib/providers/gateway_providers.dart +++ b/packages/clean_framework/example/lib/providers/gateway_providers.dart @@ -4,18 +4,18 @@ import 'package:clean_framework_example_rest/features/profile/external_interface import 'package:clean_framework_example_rest/features/profile/external_interface/pokemon_species_gateway.dart'; import 'package:clean_framework_example_rest/providers/use_case_providers.dart'; -final pokemonCollectionGateway = GatewayProvider( +final GatewayProvider pokemonCollectionGateway = GatewayProvider( PokemonCollectionGateway.new, useCases: [homeUseCaseProvider], ); -final pokemonProfileGateway = GatewayProvider( +final GatewayProvider pokemonProfileGateway = GatewayProvider( PokemonProfileGateway.new, useCases: [], families: [profileUseCaseFamily], ); -final pokemonSpeciesGateway = GatewayProvider( +final GatewayProvider pokemonSpeciesGateway = GatewayProvider( PokemonSpeciesGateway.new, useCases: [], families: [profileUseCaseFamily], diff --git a/packages/clean_framework/example/lib/providers/use_case_providers.dart b/packages/clean_framework/example/lib/providers/use_case_providers.dart index 42914291..27ea4f20 100644 --- a/packages/clean_framework/example/lib/providers/use_case_providers.dart +++ b/packages/clean_framework/example/lib/providers/use_case_providers.dart @@ -6,7 +6,7 @@ import 'package:clean_framework_example_rest/features/home/domain/home_use_case. import 'package:clean_framework_example_rest/features/profile/domain/profile_entity.dart'; import 'package:clean_framework_example_rest/features/profile/domain/profile_use_case.dart'; -final homeUseCaseProvider = +final AutoDisposeUseCaseProvider homeUseCaseProvider = UseCaseProvider.autoDispose( HomeUseCase.new, (bridge) { @@ -24,7 +24,7 @@ final homeUseCaseProvider = }, ); -final profileUseCaseFamily = +final UseCaseProviderFamily profileUseCaseFamily = UseCaseProvider.family( ProfileUseCase.new, ); diff --git a/packages/clean_framework/example/lib/widgets/svg_palette_card.dart b/packages/clean_framework/example/lib/widgets/svg_palette_card.dart index 6c5a1569..95770195 100644 --- a/packages/clean_framework/example/lib/widgets/svg_palette_card.dart +++ b/packages/clean_framework/example/lib/widgets/svg_palette_card.dart @@ -48,7 +48,7 @@ class _SvgPaletteCardState extends State { void initState() { super.initState(); SchedulerBinding.instance.addPostFrameCallback((_) { - _fetchSvg(); + unawaited(_fetchSvg()); }); } @@ -56,9 +56,9 @@ class _SvgPaletteCardState extends State { void didUpdateWidget(SvgPaletteCard oldWidget) { super.didUpdateWidget(oldWidget); if (oldWidget.url != widget.url) { - _fetchSvg(); + unawaited(_fetchSvg()); } - _generateColor(); + unawaited(_generateColor()); } @override @@ -116,8 +116,7 @@ class _SvgPaletteCardState extends State { final palette = await AppScope.paletteGeneratorOf(context, image); if (!mounted) return; - _color = widget.backgroundColorBuilder?.call(context, palette) ?? - palette.dominantColor?.color; + _color = widget.backgroundColorBuilder?.call(context, palette) ?? palette.dominantColor?.color; setState(() {}); } diff --git a/packages/clean_framework/example/pubspec.yaml b/packages/clean_framework/example/pubspec.yaml index c2e5458f..66854fe5 100644 --- a/packages/clean_framework/example/pubspec.yaml +++ b/packages/clean_framework/example/pubspec.yaml @@ -8,8 +8,8 @@ environment: dependencies: animations: ^2.0.11 - clean_framework: ^4.1.1 - clean_framework_router: ^0.5.11 + clean_framework: ^5.0.0 + clean_framework_router: ^0.5.13 dio: ^5.7.0 flutter: sdk: flutter @@ -19,12 +19,12 @@ dependencies: uniform: ^2.0.6 dev_dependencies: - clean_framework_test: ^0.5.3 + clean_framework_test: ^0.5.4 file: ^7.0.0 flutter_test: sdk: flutter http: ^1.2.2 - icons_launcher: ^2.1.7 + icons_launcher: ^3.0.3 mocktail: ^1.0.4 flutter: diff --git a/packages/clean_framework/example/test/features/home/presentation/home_presenter_test.dart b/packages/clean_framework/example/test/features/home/presentation/home_presenter_test.dart index 84aeb524..02fcefd2 100644 --- a/packages/clean_framework/example/test/features/home/presentation/home_presenter_test.dart +++ b/packages/clean_framework/example/test/features/home/presentation/home_presenter_test.dart @@ -116,11 +116,10 @@ void main() { useCase: HomeUseCaseMock(), create: (builder) => HomePresenter(builder: builder), setup: (useCase) { - when(() => useCase.fetchPokemons(isRefresh: true)) - .thenAnswer((_) async {}); + when(() => useCase.fetchPokemons(isRefresh: true)).thenAnswer((_) async {}); }, - verify: (useCase, vm) { - vm.onRefresh(); + verify: (useCase, vm) async { + await vm.onRefresh(); verify(() => useCase.fetchPokemons(isRefresh: true)); }, @@ -131,8 +130,7 @@ void main() { useCase: HomeUseCaseMock(), create: (builder) => HomePresenter(builder: builder), setup: (useCase) { - when(() => useCase.setInput(any())) - .thenAnswer((_) async {}); + when(() => useCase.setInput(any())).thenAnswer((_) async {}); }, verify: (useCase, vm) { vm.onSearch('pikachu'); diff --git a/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart b/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart index c50ca457..8744865b 100644 --- a/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart +++ b/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart @@ -14,10 +14,9 @@ void main() { useCaseTest( 'fetches pokemon profile', provider: profileUseCaseFamily('pikachu'), - execute: (useCase) { + execute: (useCase) async { useCase - ..subscribe( + ..subscribe( (output) { return Either.right( PokemonSpeciesSuccessDomainInput( @@ -33,8 +32,7 @@ void main() { ); }, ) - ..subscribe( + ..subscribe( (output) { return Either.right( PokemonProfileSuccessInput( @@ -86,18 +84,16 @@ void main() { useCaseTest( 'fetches pokemon profile; description failure', provider: profileUseCaseFamily('PIKACHU'), - execute: (useCase) { + execute: (useCase) async { useCase - ..subscribe( + ..subscribe( (output) { return const Either.left( FailureDomainInput(message: 'Something went wrong'), ); }, ) - ..subscribe( + ..subscribe( (output) { return Either.right( PokemonProfileSuccessInput( @@ -142,10 +138,9 @@ void main() { useCaseTest( 'fetches pokemon profile; profile/stat failure', provider: profileUseCaseFamily('PIKACHU'), - execute: (useCase) { + execute: (useCase) async { useCase - ..subscribe( + ..subscribe( (output) { return Either.right( PokemonSpeciesSuccessDomainInput( @@ -161,8 +156,7 @@ void main() { ); }, ) - ..subscribe( + ..subscribe( (output) { return const Either.left( FailureDomainInput(message: 'Something went wrong'), diff --git a/packages/clean_framework/example/test/features/profile/presentation/profile_presenter_test.dart b/packages/clean_framework/example/test/features/profile/presentation/profile_presenter_test.dart index 15fcdc74..a801229e 100644 --- a/packages/clean_framework/example/test/features/profile/presentation/profile_presenter_test.dart +++ b/packages/clean_framework/example/test/features/profile/presentation/profile_presenter_test.dart @@ -16,8 +16,7 @@ void main() { name: 'pikachu', ), overrides: [ - profileUseCaseFamily('PIKACHU') - .overrideWith(ProfileUseCaseFake('PIKACHU')), + profileUseCaseFamily('PIKACHU').overrideWith(ProfileUseCaseFake('PIKACHU')), ], setup: (useCase) { useCase.debugEntityUpdate( @@ -39,8 +38,7 @@ void main() { ); }, expect: () => [ - isA() - .having((vm) => vm.description, 'description', ''), + isA().having((vm) => vm.description, 'description', ''), isA().having( (vm) => vm.description, 'description', @@ -55,5 +53,5 @@ class ProfileUseCaseFake extends ProfileUseCase { ProfileUseCaseFake(super.name); @override - void fetchPokemonProfile() {} + Future fetchPokemonProfile() async {} } diff --git a/packages/clean_framework/example/test/helpers/test_cache_manager.dart b/packages/clean_framework/example/test/helpers/test_cache_manager.dart index 056d8b01..ad0ae83c 100644 --- a/packages/clean_framework/example/test/helpers/test_cache_manager.dart +++ b/packages/clean_framework/example/test/helpers/test_cache_manager.dart @@ -1,4 +1,5 @@ import 'package:file/memory.dart'; +import 'package:file/src/interface/directory.dart'; import 'package:flutter_cache_manager/file.dart'; import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:http/http.dart' as http; @@ -56,8 +57,7 @@ class TestCacheManager extends CacheManager { } class TestFileSystem extends FileSystem { - final directoryFuture = - MemoryFileSystem().systemTempDirectory.createTemp('test'); + final Future directoryFuture = MemoryFileSystem().systemTempDirectory.createTemp('test'); @override Future createFile(String name) async { final dir = await directoryFuture; diff --git a/packages/clean_framework/example/test/widgets/app_scope_test.dart b/packages/clean_framework/example/test/widgets/app_scope_test.dart index aced73db..ab5aeede 100644 --- a/packages/clean_framework/example/test/widgets/app_scope_test.dart +++ b/packages/clean_framework/example/test/widgets/app_scope_test.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:clean_framework_example_rest/widgets/app_scope.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -53,9 +55,11 @@ Future main() async { AppScope( child: Builder( builder: (context) { - AppScope.paletteGeneratorOf(context, image).then((generator) { - expect(generator, isA()); - }); + unawaited( + AppScope.paletteGeneratorOf(context, image).then((generator) { + expect(generator, isA()); + }), + ); return const SizedBox.shrink(); }, @@ -79,9 +83,11 @@ Future main() async { ), child: Builder( builder: (context) { - AppScope.paletteGeneratorOf(context, image).then((generator) { - expect(generator, isA()); - }); + unawaited( + AppScope.paletteGeneratorOf(context, image).then((generator) { + expect(generator, isA()); + }), + ); return const SizedBox.shrink(); }, diff --git a/packages/clean_framework/lib/src/app_providers_container.dart b/packages/clean_framework/lib/src/app_providers_container.dart index 8a5e90ea..7a868a37 100644 --- a/packages/clean_framework/lib/src/app_providers_container.dart +++ b/packages/clean_framework/lib/src/app_providers_container.dart @@ -1,5 +1,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; typedef ContainerBuildCallback = void Function( BuildContext, diff --git a/packages/clean_framework/lib/src/core/app_provider_scope.dart b/packages/clean_framework/lib/src/core/app_provider_scope.dart index ef291bd4..ab5b2f50 100644 --- a/packages/clean_framework/lib/src/core/app_provider_scope.dart +++ b/packages/clean_framework/lib/src/core/app_provider_scope.dart @@ -1,6 +1,7 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; import 'package:stack_trace/stack_trace.dart'; class AppProviderScope extends StatelessWidget { diff --git a/packages/clean_framework/lib/src/core/clean_framework_provider.dart b/packages/clean_framework/lib/src/core/clean_framework_provider.dart index 0abe8041..0e9fc920 100644 --- a/packages/clean_framework/lib/src/core/clean_framework_provider.dart +++ b/packages/clean_framework/lib/src/core/clean_framework_provider.dart @@ -1,4 +1,4 @@ -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; abstract class CleanFrameworkProvider

> { CleanFrameworkProvider({required P provider}) : _provider = provider; diff --git a/packages/clean_framework/lib/src/core/dependency/dependency_provider.dart b/packages/clean_framework/lib/src/core/dependency/dependency_provider.dart index 3bab560f..dfa339fd 100644 --- a/packages/clean_framework/lib/src/core/dependency/dependency_provider.dart +++ b/packages/clean_framework/lib/src/core/dependency/dependency_provider.dart @@ -1,9 +1,9 @@ import 'package:clean_framework/src/core/clean_framework_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; import 'package:meta/meta.dart'; -class DependencyProvider - extends CleanFrameworkProvider> { +class DependencyProvider extends CleanFrameworkProvider> { DependencyProvider(T Function(DependencyRef) create) : super( provider: Provider((ref) => create(DependencyRef(ref))), diff --git a/packages/clean_framework/lib/src/core/external_interface/external_interface.dart b/packages/clean_framework/lib/src/core/external_interface/external_interface.dart index 7c54c50e..8ae646ba 100644 --- a/packages/clean_framework/lib/src/core/external_interface/external_interface.dart +++ b/packages/clean_framework/lib/src/core/external_interface/external_interface.dart @@ -21,7 +21,7 @@ abstract class ExternalInterface { @internal void attach( - ProviderRef ref, { + Ref ref, { required List providers, }) { _ref = DependencyRef(ref); @@ -64,8 +64,7 @@ abstract class ExternalInterface { ); } - final _RequestController _requestController = - StreamController.broadcast(); + final _RequestController _requestController = StreamController.broadcast(); @visibleForTesting Future> request(R request) { @@ -111,7 +110,7 @@ abstract class ExternalInterface { } else { await handler(request, e.complete); } - } catch (error, stackTrace) { + } on Exception catch (error, stackTrace) { e.completeFailure(_onError(error, request, stackTrace)); } }, @@ -133,13 +132,14 @@ abstract class ExternalInterface { } } -typedef _RequestController - = StreamController>; +typedef _RequestController = StreamController>; typedef ResponseSender = void Function(S response); -typedef RequestHandler - = FutureOr Function(E request, ResponseSender send); +typedef RequestHandler = FutureOr Function( + E request, + ResponseSender send, +); class RequestCompleter { RequestCompleter(this.request) : _completer = Completer(); @@ -158,8 +158,7 @@ class RequestCompleter { } } -class _StreamRequestCompleter - extends RequestCompleter { +class _StreamRequestCompleter extends RequestCompleter { _StreamRequestCompleter(super.request, this.emitSuccess); final void Function(S) emitSuccess; diff --git a/packages/clean_framework/lib/src/core/external_interface/external_interface_provider.dart b/packages/clean_framework/lib/src/core/external_interface/external_interface_provider.dart index 24fc5bf7..4dbc6d0f 100644 --- a/packages/clean_framework/lib/src/core/external_interface/external_interface_provider.dart +++ b/packages/clean_framework/lib/src/core/external_interface/external_interface_provider.dart @@ -2,10 +2,10 @@ import 'package:clean_framework/src/core/clean_framework_provider.dart'; import 'package:clean_framework/src/core/external_interface/external_interface.dart'; import 'package:clean_framework/src/core/gateway/gateway_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; import 'package:meta/meta.dart'; -class ExternalInterfaceProvider - extends CleanFrameworkProvider> { +class ExternalInterfaceProvider extends CleanFrameworkProvider> { ExternalInterfaceProvider( E Function() create, { List gateways = const [], diff --git a/packages/clean_framework/lib/src/core/gateway/gateway.dart b/packages/clean_framework/lib/src/core/gateway/gateway.dart index 28700f17..5e795111 100644 --- a/packages/clean_framework/lib/src/core/gateway/gateway.dart +++ b/packages/clean_framework/lib/src/core/gateway/gateway.dart @@ -6,12 +6,13 @@ import 'package:clean_framework/src/core/use_case/provider/use_case_provider.dar import 'package:clean_framework/src/core/use_case/use_case.dart'; import 'package:clean_framework/src/utilities/either.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; import 'package:meta/meta.dart'; -abstract class Gateway { +abstract class Gateway { void attach( - ProviderRef ref, { + Ref ref, { required List providers, List families = const [], }) { @@ -29,7 +30,7 @@ abstract class Gateway _useCases = {}; - void _subscribe(ProviderRef ref, Refreshable notifier) { + void _subscribe(Ref ref, Refreshable notifier) { final useCase = ref.read(notifier); _useCases.add(useCase); useCase.subscribe(buildInput); @@ -70,10 +71,7 @@ abstract class Gateway extends Gateway { @override FailureDomainInput onFailure(FailureResponse failureResponse) { @@ -88,8 +86,9 @@ abstract class WatcherGateway< } } -typedef Responder - = FutureOr> Function(R request); +typedef Responder = FutureOr> Function( + R request, +); class _Source { _Source(this.responder, this.type); diff --git a/packages/clean_framework/lib/src/core/gateway/gateway_provider.dart b/packages/clean_framework/lib/src/core/gateway/gateway_provider.dart index d4391fba..77b254a0 100644 --- a/packages/clean_framework/lib/src/core/gateway/gateway_provider.dart +++ b/packages/clean_framework/lib/src/core/gateway/gateway_provider.dart @@ -2,10 +2,10 @@ import 'package:clean_framework/src/core/clean_framework_provider.dart'; import 'package:clean_framework/src/core/gateway/gateway.dart'; import 'package:clean_framework/src/core/use_case/provider/use_case_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; import 'package:meta/meta.dart'; -class GatewayProvider - extends CleanFrameworkProvider> { +class GatewayProvider extends CleanFrameworkProvider> { GatewayProvider( G Function() create, { List useCases = const [], diff --git a/packages/clean_framework/lib/src/core/use_case/provider/auto_dispose.dart b/packages/clean_framework/lib/src/core/use_case/provider/auto_dispose.dart index b231028b..a5664ca0 100644 --- a/packages/clean_framework/lib/src/core/use_case/provider/auto_dispose.dart +++ b/packages/clean_framework/lib/src/core/use_case/provider/auto_dispose.dart @@ -1,23 +1,23 @@ part of 'use_case_provider.dart'; -class AutoDisposeUseCaseProvider> - extends UseCaseProviderBase { +class AutoDisposeUseCaseProvider> extends UseCaseProviderBase { AutoDisposeUseCaseProvider( U Function() create, [ UseCaseProviderConnector? connector, ]) { - _internal = StateNotifierProvider.autoDispose( + _internal = StateNotifierProvider( (ref) { final useCase = create(); connector?.call(UseCaseProviderBridge._(useCase, ref)); return useCase; }, + isAutoDispose: true, ); } AutoDisposeUseCaseProvider._(this._internal); - late final AutoDisposeStateNotifierProvider _internal; + late final StateNotifierProvider _internal; @override Refreshable buildNotifier() => _internal.notifier; @@ -30,7 +30,7 @@ class AutoDisposeUseCaseProvider> return _internal.select((_) => useCase.getDomainModel()); } - AutoDisposeStateNotifierProvider call() => _internal; + StateNotifierProvider call() => _internal; } class AutoDisposeUseCaseProviderBuilder { diff --git a/packages/clean_framework/lib/src/core/use_case/provider/bridge.dart b/packages/clean_framework/lib/src/core/use_case/provider/bridge.dart index d63db7fc..35e15c18 100644 --- a/packages/clean_framework/lib/src/core/use_case/provider/bridge.dart +++ b/packages/clean_framework/lib/src/core/use_case/provider/bridge.dart @@ -1,13 +1,14 @@ part of 'use_case_provider.dart'; -typedef UseCaseProviderConnector> = void - Function(UseCaseProviderBridge bridge); +typedef UseCaseProviderConnector> = void Function( + UseCaseProviderBridge bridge, +); class UseCaseProviderBridge> { - UseCaseProviderBridge._(this.useCase, Ref ref) : _ref = ref; + UseCaseProviderBridge._(this.useCase, Ref ref) : _ref = ref; final BU useCase; - final Ref _ref; + final Ref _ref; void connect, T>( UseCaseProvider provider, diff --git a/packages/clean_framework/lib/src/core/use_case/provider/family.dart b/packages/clean_framework/lib/src/core/use_case/provider/family.dart index 159e3c72..9bc7aeef 100644 --- a/packages/clean_framework/lib/src/core/use_case/provider/family.dart +++ b/packages/clean_framework/lib/src/core/use_case/provider/family.dart @@ -1,10 +1,8 @@ part of 'use_case_provider.dart'; -abstract class UseCaseProviderFamilyBase, - A extends Object> { +abstract class UseCaseProviderFamilyBase, A extends Object> { // ignore: close_sinks - final StreamController<(Refreshable, A)> _notifierController = - StreamController.broadcast(); + final StreamController<(Refreshable, A)> _notifierController = StreamController.broadcast(); Stream<(Refreshable, A)> get notifier => _notifierController.stream; @@ -13,8 +11,8 @@ abstract class UseCaseProviderFamilyBase, UseCaseProviderBase call(A arg); } -class UseCaseProviderFamily, - A extends Object> extends UseCaseProviderFamilyBase { +class UseCaseProviderFamily, A extends Object> + extends UseCaseProviderFamilyBase { UseCaseProviderFamily( U Function(A) create, [ UseCaseProviderConnector? connector, @@ -40,8 +38,7 @@ class UseCaseProviderFamily, class UseCaseProviderFamilyBuilder { const UseCaseProviderFamilyBuilder(); - UseCaseProviderFamily - call, A extends Object>( + UseCaseProviderFamily call, A extends Object>( U Function(A) create, [ UseCaseProviderConnector? connector, ]) { @@ -49,22 +46,23 @@ class UseCaseProviderFamilyBuilder { } } -class AutoDisposeUseCaseProviderFamily, - A extends Object> extends UseCaseProviderFamilyBase { +class AutoDisposeUseCaseProviderFamily, A extends Object> + extends UseCaseProviderFamilyBase { AutoDisposeUseCaseProviderFamily( U Function(A) create, [ UseCaseProviderConnector? connector, ]) { - _internal = AutoDisposeStateNotifierProviderFamily( + _internal = StateNotifierProvider.family( (ref, arg) { final useCase = create(arg); connector?.call(UseCaseProviderBridge._(useCase, ref)); return useCase; }, + isAutoDispose: true, ); } - late final AutoDisposeStateNotifierProviderFamily _internal; + late final StateNotifierProviderFamily _internal; @override void init(A arg) => _notifierController.add((_internal(arg).notifier, arg)); @@ -78,8 +76,7 @@ class AutoDisposeUseCaseProviderFamily, class AutoDisposeUseCaseProviderFamilyBuilder { const AutoDisposeUseCaseProviderFamilyBuilder(); - AutoDisposeUseCaseProviderFamily - call, A extends Object>( + AutoDisposeUseCaseProviderFamily call, A extends Object>( U Function(A) create, [ UseCaseProviderConnector? connector, ]) { diff --git a/packages/clean_framework/lib/src/core/use_case/provider/use_case_provider.dart b/packages/clean_framework/lib/src/core/use_case/provider/use_case_provider.dart index f8fc02a8..8667b2a7 100644 --- a/packages/clean_framework/lib/src/core/use_case/provider/use_case_provider.dart +++ b/packages/clean_framework/lib/src/core/use_case/provider/use_case_provider.dart @@ -3,6 +3,8 @@ import 'dart:async'; import 'package:clean_framework/clean_framework.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/legacy.dart'; +import 'package:flutter_riverpod/misc.dart'; import 'package:meta/meta.dart'; part 'auto_dispose.dart'; @@ -10,8 +12,7 @@ part 'base.dart'; part 'bridge.dart'; part 'family.dart'; -class UseCaseProvider> - extends UseCaseProviderBase { +class UseCaseProvider> extends UseCaseProviderBase { UseCaseProvider( U Function() create, [ UseCaseProviderConnector? connector, diff --git a/packages/clean_framework/lib/src/core/use_case/use_case.dart b/packages/clean_framework/lib/src/core/use_case/use_case.dart index 2c04c614..b5c0cb32 100644 --- a/packages/clean_framework/lib/src/core/use_case/use_case.dart +++ b/packages/clean_framework/lib/src/core/use_case/use_case.dart @@ -6,7 +6,7 @@ import 'package:clean_framework/src/core/use_case/use_case_debounce_mixin.dart'; import 'package:clean_framework/src/core/use_case/use_case_helpers.dart'; import 'package:clean_framework/src/utilities/clean_framework_observer.dart'; import 'package:clean_framework/src/utilities/either.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/legacy.dart'; import 'package:meta/meta.dart'; export 'helpers/use_case_input.dart'; @@ -14,8 +14,7 @@ export 'use_case_helpers.dart'; typedef InputCallback = E Function(I); -abstract class UseCase extends StateNotifier - with UseCaseDebounceMixin { +abstract class UseCase extends StateNotifier with UseCaseDebounceMixin { UseCase({ required E entity, List> transformers = const [], @@ -75,8 +74,7 @@ abstract class UseCase extends StateNotifier M getDomainModel() => transformToDomainModel(entity); @visibleForTesting - M transformToDomainModel(E entity) => - _domainModelFilters(entity); + M transformToDomainModel(E entity) => _domainModelFilters(entity); void setInput(I input) { entity = _domainInputFilters(entity, input); @@ -90,8 +88,7 @@ abstract class UseCase extends StateNotifier @visibleForTesting @protected - FutureOr> - getInternalInput( + FutureOr> getInternalInput( DomainModel domainModel, ) { return _requestSubscriptions.getDomainInput(domainModel); @@ -108,13 +105,11 @@ abstract class UseCase extends StateNotifier entity = input.fold( (failure) { - CleanFrameworkObserver.instance - .onFailureInput(this, domainModel, failure); + CleanFrameworkObserver.instance.onFailureInput(this, domainModel, failure); return onFailure(failure); }, (success) { - CleanFrameworkObserver.instance - .onSuccessInput(this, domainModel, success); + CleanFrameworkObserver.instance.onSuccessInput(this, domainModel, success); return onSuccess(success); }, ); @@ -129,13 +124,11 @@ abstract class UseCase extends StateNotifier return input.fold( (failure) { - CleanFrameworkObserver.instance - .onFailureInput(this, domainModel, failure); + CleanFrameworkObserver.instance.onFailureInput(this, domainModel, failure); return FailureUseCaseInput(failure); }, (success) { - CleanFrameworkObserver.instance - .onSuccessInput(this, domainModel, success); + CleanFrameworkObserver.instance.onSuccessInput(this, domainModel, success); return SuccessUseCaseInput(success); }, ); diff --git a/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart b/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart index 18b9a89a..76e9252d 100644 --- a/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart +++ b/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart @@ -2,9 +2,9 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/src/providers/gateway.dart'; import 'package:clean_framework/src/providers/overridable_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; -class BridgeGatewayProvider - implements OverridableProvider { +class BridgeGatewayProvider implements OverridableProvider { BridgeGatewayProvider(this.create) : _provider = Provider(create); final Provider _provider; final G Function(Ref) create; diff --git a/packages/clean_framework/lib/src/providers/external_interface.dart b/packages/clean_framework/lib/src/providers/external_interface.dart index ba2bfc37..7907bed6 100644 --- a/packages/clean_framework/lib/src/providers/external_interface.dart +++ b/packages/clean_framework/lib/src/providers/external_interface.dart @@ -23,8 +23,7 @@ abstract class ExternalInterface { } } - final StreamController<_RequestCompleter> _requestController = - StreamController.broadcast(); + final StreamController<_RequestCompleter> _requestController = StreamController.broadcast(); void handleRequest(); @@ -57,7 +56,7 @@ abstract class ExternalInterface { } else { await handler(request, e.complete); } - } catch (error, stackTrace) { + } on Exception catch (error, stackTrace) { e.completeFailure(_onError(error, stackTrace, request)); } }, @@ -83,8 +82,10 @@ typedef GatewayConnection = G Function(); typedef ResponseSender = void Function(S response); -typedef RequestHandler - = FutureOr Function(E request, ResponseSender send); +typedef RequestHandler = FutureOr Function( + E request, + ResponseSender send, +); class _RequestCompleter { _RequestCompleter(this.request) : _completer = Completer(); @@ -103,8 +104,7 @@ class _RequestCompleter { } } -class _StreamRequestCompleter - extends _RequestCompleter { +class _StreamRequestCompleter extends _RequestCompleter { _StreamRequestCompleter(super.request, this.emitSuccess); final void Function(S) emitSuccess; diff --git a/packages/clean_framework/lib/src/providers/external_interface_provider.dart b/packages/clean_framework/lib/src/providers/external_interface_provider.dart index e6112338..ecf7e6e5 100644 --- a/packages/clean_framework/lib/src/providers/external_interface_provider.dart +++ b/packages/clean_framework/lib/src/providers/external_interface_provider.dart @@ -1,9 +1,9 @@ import 'package:clean_framework/clean_framework_legacy.dart'; import 'package:clean_framework/src/providers/overridable_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; -class ExternalInterfaceProvider - implements OverridableProvider { +class ExternalInterfaceProvider implements OverridableProvider { ExternalInterfaceProvider(this.create) : _provider = Provider(create); final Provider _provider; final I Function(Ref) create; diff --git a/packages/clean_framework/lib/src/providers/gateway_provider.dart b/packages/clean_framework/lib/src/providers/gateway_provider.dart index edee3a90..b145ba2a 100644 --- a/packages/clean_framework/lib/src/providers/gateway_provider.dart +++ b/packages/clean_framework/lib/src/providers/gateway_provider.dart @@ -1,6 +1,7 @@ import 'package:clean_framework/clean_framework_legacy.dart'; import 'package:clean_framework/src/providers/overridable_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; class GatewayProvider implements OverridableProvider { GatewayProvider(this.create) : _provider = Provider(create); diff --git a/packages/clean_framework/lib/src/providers/overridable_provider.dart b/packages/clean_framework/lib/src/providers/overridable_provider.dart index c1891cec..983df36b 100644 --- a/packages/clean_framework/lib/src/providers/overridable_provider.dart +++ b/packages/clean_framework/lib/src/providers/overridable_provider.dart @@ -1,4 +1,4 @@ -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; import 'package:meta/meta.dart'; abstract class OverridableProvider { diff --git a/packages/clean_framework/lib/src/providers/use_case_provider.dart b/packages/clean_framework/lib/src/providers/use_case_provider.dart index 92a9efdd..2e8bc64c 100644 --- a/packages/clean_framework/lib/src/providers/use_case_provider.dart +++ b/packages/clean_framework/lib/src/providers/use_case_provider.dart @@ -2,11 +2,11 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework/clean_framework_legacy.dart'; import 'package:clean_framework/src/providers/overridable_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/legacy.dart'; +import 'package:flutter_riverpod/misc.dart'; -class UseCaseProvider> - implements OverridableProvider { - UseCaseProvider(this.create) - : _provider = StateNotifierProvider(create); +class UseCaseProvider> implements OverridableProvider { + UseCaseProvider(this.create) : _provider = StateNotifierProvider(create); final StateNotifierProvider _provider; final U Function(Ref) create; @@ -30,8 +30,7 @@ class UseCaseProvider> ref.listen(_listenForOutputChange(ref), listener); } - AlwaysAliveProviderListenable - _listenForOutputChange( + ProviderListenable _listenForOutputChange( WidgetRef ref, ) { final useCase = getUseCase(ref); diff --git a/packages/clean_framework/lib/src/widgets/src/feature_scope.dart b/packages/clean_framework/lib/src/widgets/src/feature_scope.dart index 4fc6d56c..37cec592 100644 --- a/packages/clean_framework/lib/src/widgets/src/feature_scope.dart +++ b/packages/clean_framework/lib/src/widgets/src/feature_scope.dart @@ -19,8 +19,7 @@ class FeatureScope extends StatefulWidget { // ignore: library_private_types_in_public_api static _InheritedFeatureScope of(BuildContext context) { - final result = - context.dependOnInheritedWidgetOfExactType<_InheritedFeatureScope>(); + final result = context.dependOnInheritedWidgetOfExactType<_InheritedFeatureScope>(); assert(result != null, 'No _InheritedFeatureScope found in context'); return result!; } @@ -29,8 +28,7 @@ class FeatureScope extends StatefulWidget { State> createState() => _FeatureScopeState(); } -class _FeatureScopeState - extends State> { +class _FeatureScopeState extends State> { late final FeatureClient _client; @override @@ -41,7 +39,7 @@ class _FeatureScopeState OpenFeature.instance.provider = featureProvider; _client = OpenFeature.instance.getClient(); - _load(featureProvider); + unawaited(_load(featureProvider)); } Future _load(T featureProvider) async { diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 73d7210f..80841452 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework description: Clean Architecture components library, inspired on the guidelines created by Uncle Bob. -version: 4.1.2 +version: 5.0.0 homepage: https://acmesoftware.com/ repository: https://github.com/AcmeSoftwareLLC/clean_framework screenshots: @@ -20,15 +20,15 @@ dependencies: equatable: ^2.0.5 flutter: sdk: flutter - flutter_riverpod: ^2.5.1 + flutter_riverpod: ^3.1.0 meta: '>=1.12.0 <2.0.0' stack_trace: '>=1.11.0 <2.0.0' uniform: ^2.0.6 dev_dependencies: - clean_framework_test: ^0.5.3 + clean_framework_test: ^0.5.4 flutter_test: sdk: flutter mocktail: ^1.0.4 - very_good_analysis: ^6.0.0 + very_good_analysis: ^10.0.0 diff --git a/packages/clean_framework/test/core/app_provider_scope_test.dart b/packages/clean_framework/test/core/app_provider_scope_test.dart index df72c085..777548c0 100644 --- a/packages/clean_framework/test/core/app_provider_scope_test.dart +++ b/packages/clean_framework/test/core/app_provider_scope_test.dart @@ -45,7 +45,7 @@ void main() { try { await useCase.ping('Hello'); - } catch (e, s) { + } on Exception catch (e, s) { FlutterError.demangleStackTrace(s); expect(e, isA()); } @@ -54,20 +54,19 @@ void main() { }); } -final _testExternalInterfaceProvider = ExternalInterfaceProvider( +final ExternalInterfaceProvider _testExternalInterfaceProvider = ExternalInterfaceProvider( TestExternalInterface.new, gateways: [_testGatewayProvider], ); -final _testGatewayProvider = GatewayProvider( +final GatewayProvider _testGatewayProvider = GatewayProvider( TestGateway.new, useCases: [_testUseCaseProvider], ); -final _testUseCaseProvider = UseCaseProvider(TestUseCase.new); +final UseCaseProvider _testUseCaseProvider = UseCaseProvider(TestUseCase.new); -class TestExternalInterface - extends ExternalInterface { +class TestExternalInterface extends ExternalInterface { @override void handleRequest() { on( @@ -83,8 +82,7 @@ class TestExternalInterface } } -class TestGateway extends Gateway { +class TestGateway extends Gateway { @override TestRequest buildRequest(TestDomainToGatewayModel output) { return TestRequest(ping: output.ping); diff --git a/packages/clean_framework/test/core/external_interface/external_interface_test.dart b/packages/clean_framework/test/core/external_interface/external_interface_test.dart index 0b6912ab..9d018c9d 100644 --- a/packages/clean_framework/test/core/external_interface/external_interface_test.dart +++ b/packages/clean_framework/test/core/external_interface/external_interface_test.dart @@ -107,9 +107,9 @@ class _Dependency { final String value; } -final _testDependencyProvider = DependencyProvider((_) => _Dependency('test')); +final DependencyProvider<_Dependency> _testDependencyProvider = DependencyProvider((_) => _Dependency('test')); -final _testExternalInterfaceProvider = ExternalInterfaceProvider( +final ExternalInterfaceProvider _testExternalInterfaceProvider = ExternalInterfaceProvider( () => TestExternalInterface(delegate: TextExternalInterfaceDelegate()), gateways: [ _testGatewayProvider, @@ -117,16 +117,15 @@ final _testExternalInterfaceProvider = ExternalInterfaceProvider( ], ); -final _testGatewayProvider = GatewayProvider(TestGateway.new); +final GatewayProvider _testGatewayProvider = GatewayProvider(TestGateway.new); -final _testWatcherGatewayProvider = GatewayProvider( +final GatewayProvider _testWatcherGatewayProvider = GatewayProvider( TestWatcherGateway.new, ); class NewTestExternalInterface extends TestExternalInterface {} -class TestExternalInterface - extends ExternalInterface { +class TestExternalInterface extends ExternalInterface { TestExternalInterface({super.delegate}); @override @@ -170,8 +169,7 @@ class TestRequest extends Request { final bool success; } -class TestGateway extends Gateway { +class TestGateway extends Gateway { @override TestRequest buildRequest(TestDomainToGatewayModel output) { return TestRequest(success: output.success); @@ -188,8 +186,8 @@ class TestGateway extends Gateway { +class TestWatcherGateway + extends WatcherGateway { @override TestRequest buildRequest(TestDomainToGatewayModel output) { return TestRequest(success: output.success); diff --git a/packages/clean_framework/test/core/gateway/gateway_provider_test.dart b/packages/clean_framework/test/core/gateway/gateway_provider_test.dart index fedabc45..36f8fd13 100644 --- a/packages/clean_framework/test/core/gateway/gateway_provider_test.dart +++ b/packages/clean_framework/test/core/gateway/gateway_provider_test.dart @@ -19,7 +19,7 @@ void main() { }); } -final _gatewayProvider = GatewayProvider(TestGateway.new); +final GatewayProvider _gatewayProvider = GatewayProvider(TestGateway.new); class NewTestGateway extends TestGateway {} diff --git a/packages/clean_framework/test/core/gateway/gateway_test.dart b/packages/clean_framework/test/core/gateway/gateway_test.dart index b6a1c08f..9292f4c8 100644 --- a/packages/clean_framework/test/core/gateway/gateway_test.dart +++ b/packages/clean_framework/test/core/gateway/gateway_test.dart @@ -137,8 +137,7 @@ void main() { await subscription.cancel(); }); - test('yielding response will update use case created using family', - () async { + test('yielding response will update use case created using family', () async { final container = ProviderContainer(); final gateway = _testGatewayProvider.read(container); @@ -170,14 +169,14 @@ void main() { }); } -final _testGatewayProvider = GatewayProvider( +final GatewayProvider _testGatewayProvider = GatewayProvider( TestWatcherGateway.new, useCases: [_testUseCaseProvider], families: [_testUseCaseProviderFamily], ); -final _testUseCaseProvider = UseCaseProvider(TestUseCase.new); -final _testUseCaseProviderFamily = +final UseCaseProvider _testUseCaseProvider = UseCaseProvider(TestUseCase.new); +final UseCaseProviderFamily _testUseCaseProviderFamily = UseCaseProvider.family( (_) => TestUseCase(), ); @@ -208,8 +207,7 @@ class TestUseCase extends UseCase { ); } -class TestGateway extends Gateway { +class TestGateway extends Gateway { @override TestRequest buildRequest(TestDomainToGatewayModel output) { return TestRequest(output.name); @@ -226,8 +224,8 @@ class TestGateway extends Gateway { +class TestWatcherGateway + extends WatcherGateway { @override TestRequest buildRequest(TestDomainToGatewayModel output) { return TestRequest(output.name); diff --git a/packages/clean_framework/test/core/use_case/use_case_provider_test.dart b/packages/clean_framework/test/core/use_case/use_case_provider_test.dart index 345e9a2e..0e89fc25 100644 --- a/packages/clean_framework/test/core/use_case/use_case_provider_test.dart +++ b/packages/clean_framework/test/core/use_case/use_case_provider_test.dart @@ -17,7 +17,7 @@ final _testUseCaseProvider = UseCaseProvider( }, ); -final _testUseCaseProvider2 = +final AutoDisposeUseCaseProvider _testUseCaseProvider2 = UseCaseProvider.autoDispose( TestUseCase.new, (bridge) { @@ -37,13 +37,13 @@ final _testUseCaseProvider3 = UseCaseProvider( TestUseCase.new, ); -final _testUseCaseAutoDisposeFamily = +final AutoDisposeUseCaseProviderFamily _testUseCaseAutoDisposeFamily = UseCaseProvider.autoDispose.family( (name) => TestUseCase(name: name), (_) {}, ); -final _testUseCaseFamily = +final UseCaseProviderFamily _testUseCaseFamily = UseCaseProvider.family( (name) => TestUseCase(name: name), (_) {}, @@ -187,9 +187,7 @@ void main() { return ElevatedButton( onPressed: () { - _testUseCaseProvider - .getUseCaseFromContext(context) - .set(foo: 'bar'); + _testUseCaseProvider.getUseCaseFromContext(context).set(foo: 'bar'); }, child: const Text('CLICK'), ); @@ -241,10 +239,8 @@ void main() { test('use case creation', () { final container = ProviderContainer(); - final pikachuUseCase = - _testUseCaseAutoDisposeFamily('Pikachu').read(container); - final bulbasaurUseCase = - _testUseCaseAutoDisposeFamily('Bulbasaur').read(container); + final pikachuUseCase = _testUseCaseAutoDisposeFamily('Pikachu').read(container); + final bulbasaurUseCase = _testUseCaseAutoDisposeFamily('Bulbasaur').read(container); expect(pikachuUseCase, isA()); expect(bulbasaurUseCase, isA()); diff --git a/packages/clean_framework/test/presentation/presenter/presenter_test.dart b/packages/clean_framework/test/presentation/presenter/presenter_test.dart index 9a627470..d3c470f5 100644 --- a/packages/clean_framework/test/presentation/presenter/presenter_test.dart +++ b/packages/clean_framework/test/presentation/presenter/presenter_test.dart @@ -55,8 +55,7 @@ void main() { ); }); - testWidgets('didUpdatePresenter is triggered if presenter property changes', - (tester) async { + testWidgets('didUpdatePresenter is triggered if presenter property changes', (tester) async { final messageNotifier = ValueNotifier(''); await tester.pumpWidget( @@ -89,15 +88,14 @@ void main() { }); } -final _testUseCaseProvider = UseCaseProvider(TestUseCase.new); +final UseCaseProvider _testUseCaseProvider = UseCaseProvider(TestUseCase.new); -final _testUseCaseProviderFamily = +final UseCaseProviderFamily _testUseCaseProviderFamily = UseCaseProvider.family( (name) => TestUseCase(name: name), ); -class TestPresenter - extends Presenter { +class TestPresenter extends Presenter { TestPresenter({ super.key, WidgetBuilder? builder, diff --git a/packages/clean_framework/test/providers/presenter_widget_test.dart b/packages/clean_framework/test/providers/presenter_widget_test.dart index 2806ac83..ed06b3cf 100644 --- a/packages/clean_framework/test/providers/presenter_widget_test.dart +++ b/packages/clean_framework/test/providers/presenter_widget_test.dart @@ -1,9 +1,11 @@ +import 'dart:async'; + import 'package:clean_framework/clean_framework_legacy.dart'; import 'package:clean_framework_test/clean_framework_test_legacy.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -final provider = UseCaseProvider((_) => TestUseCase()); +final UseCaseProvider provider = UseCaseProvider((_) => TestUseCase()); void main() { testWidgets('Presenter initial load', (tester) async { final presenter = TestPresenter( @@ -12,8 +14,7 @@ void main() { }, ); - await ProviderTester() - .pumpWidget(tester, MaterialApp(home: presenter)); + await ProviderTester().pumpWidget(tester, MaterialApp(home: presenter)); expect(find.byKey(const Key('foo')), findsOneWidget); expect(find.text('INITIAL'), findsOneWidget); @@ -42,8 +43,7 @@ void main() { builder: (context, snapshot) { return TestPresenter( count: snapshot.data, - builder: (viewModel) => - Text(viewModel.foo, key: const Key('foo')), + builder: (viewModel) => Text(viewModel.foo, key: const Key('foo')), ); }, ), @@ -65,10 +65,8 @@ void main() { ); } -class TestPresenter - extends Presenter { - TestPresenter({required super.builder, super.key, this.count}) - : super(provider: provider); +class TestPresenter extends Presenter { + TestPresenter({required super.builder, super.key, this.count}) : super(provider: provider); final int? count; @@ -78,12 +76,11 @@ class TestPresenter @override void onLayoutReady(BuildContext context, TestUseCase useCase) { super.onLayoutReady(context, useCase); - useCase.fetch(); + unawaited(useCase.fetch()); } @override - TestViewModel createViewModel(_, TestDomainModel output) => - TestViewModel.fromOutput(output); + TestViewModel createViewModel(_, TestDomainModel output) => TestViewModel.fromOutput(output); @override void onOutputUpdate(BuildContext context, TestDomainModel output) { @@ -133,8 +130,7 @@ class TestDomainModel extends DomainModel { class TestViewModel extends ViewModel { const TestViewModel(this.foo); - TestViewModel.fromOutput(TestDomainModel output) - : foo = output.foo.toUpperCase(); + TestViewModel.fromOutput(TestDomainModel output) : foo = output.foo.toUpperCase(); final String foo; @override diff --git a/packages/clean_framework/theme_example/pubspec.yaml b/packages/clean_framework/theme_example/pubspec.yaml index a94336a7..fa11eba2 100644 --- a/packages/clean_framework/theme_example/pubspec.yaml +++ b/packages/clean_framework/theme_example/pubspec.yaml @@ -28,8 +28,8 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: - clean_framework: ^4.0.0 - clean_framework_router: ^0.5.10 + clean_framework: ^5.0.0 + clean_framework_router: ^0.5.13 flutter: sdk: flutter @@ -48,7 +48,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^2.0.0 + flutter_lints: ^6.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart b/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart index 9537c09f..4f8ad9cf 100644 --- a/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart +++ b/packages/clean_framework_firestore/lib/src/firebase_client_fake.dart @@ -77,6 +77,6 @@ class FirebaseClientFake implements FirebaseClient { void clearQuery() {} void dispose() { - _controller.close(); + unawaited(_controller.close()); } } diff --git a/packages/clean_framework_firestore/pubspec.yaml b/packages/clean_framework_firestore/pubspec.yaml index 3861862b..02671da2 100644 --- a/packages/clean_framework_firestore/pubspec.yaml +++ b/packages/clean_framework_firestore/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_firestore description: A wrapper around cloud_firestore to make it easier to use with clean_framework. -version: 0.5.3 +version: 0.5.4 homepage: https://acmesoftware.com/ repository: https://github.com/AcmeSoftwareLLC/clean_framework/packages/clean_framework_firestore @@ -9,17 +9,17 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^4.0.0 + clean_framework: ^5.0.0 - cloud_firestore: ^4.8.4 + cloud_firestore: ^6.1.1 equatable: ^2.0.5 flutter: sdk: flutter dev_dependencies: - clean_framework_test: ^0.5.3 + clean_framework_test: ^0.5.4 flutter_test: sdk: flutter mocktail: ^1.0.0 - very_good_analysis: ^5.0.0+1 + very_good_analysis: ^10.0.0 diff --git a/packages/clean_framework_graphql/pubspec.yaml b/packages/clean_framework_graphql/pubspec.yaml index 9bcc2933..ec753813 100644 --- a/packages/clean_framework_graphql/pubspec.yaml +++ b/packages/clean_framework_graphql/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_graphql description: A wrapper around graphql to make it easier to use with clean_framework. -version: 0.4.3 +version: 0.4.4 homepage: https://acmesoftware.com/ repository: https://github.com/AcmeSoftwareLLC/clean_framework/packages/clean_framework_graphql @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^4.0.0 + clean_framework: ^5.0.0 flutter: sdk: flutter @@ -17,9 +17,9 @@ dependencies: graphql: ^5.1.3 dev_dependencies: - clean_framework_test: ^0.5.3 + clean_framework_test: ^0.5.4 flutter_test: sdk: flutter mocktail: ^1.0.0 - very_good_analysis: ^5.0.0+1 + very_good_analysis: ^10.0.0 diff --git a/packages/clean_framework_http/example/lib/features/home/presentation/home_presenter.dart b/packages/clean_framework_http/example/lib/features/home/presentation/home_presenter.dart index adf8b6b1..7a351d04 100644 --- a/packages/clean_framework_http/example/lib/features/home/presentation/home_presenter.dart +++ b/packages/clean_framework_http/example/lib/features/home/presentation/home_presenter.dart @@ -1,13 +1,13 @@ -import 'package:clean_framework/clean_framework.dart'; +import 'dart:async'; +import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_http_example/features/home/domain/home_domain_models.dart'; import 'package:clean_framework_http_example/features/home/domain/home_use_case.dart'; import 'package:clean_framework_http_example/features/home/presentation/home_view_model.dart'; import 'package:clean_framework_http_example/providers.dart'; import 'package:flutter/material.dart'; -class HomePresenter - extends Presenter { +class HomePresenter extends Presenter { HomePresenter({ required super.builder, super.key, @@ -15,7 +15,7 @@ class HomePresenter @override void onLayoutReady(BuildContext context, HomeUseCase useCase) { - useCase.fetch(); + unawaited(useCase.fetch()); } @override diff --git a/packages/clean_framework_http/example/linux/flutter/generated_plugin_registrant.cc b/packages/clean_framework_http/example/linux/flutter/generated_plugin_registrant.cc index f6f23bfe..e71a16d2 100644 --- a/packages/clean_framework_http/example/linux/flutter/generated_plugin_registrant.cc +++ b/packages/clean_framework_http/example/linux/flutter/generated_plugin_registrant.cc @@ -6,10 +6,6 @@ #include "generated_plugin_registrant.h" -#include void fl_register_plugins(FlPluginRegistry* registry) { - g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); - url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); } diff --git a/packages/clean_framework_http/example/linux/flutter/generated_plugins.cmake b/packages/clean_framework_http/example/linux/flutter/generated_plugins.cmake index f16b4c34..2e1de87a 100644 --- a/packages/clean_framework_http/example/linux/flutter/generated_plugins.cmake +++ b/packages/clean_framework_http/example/linux/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - url_launcher_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/packages/clean_framework_http/example/windows/flutter/generated_plugin_registrant.cc b/packages/clean_framework_http/example/windows/flutter/generated_plugin_registrant.cc index 4f788487..3b4ee903 100644 --- a/packages/clean_framework_http/example/windows/flutter/generated_plugin_registrant.cc +++ b/packages/clean_framework_http/example/windows/flutter/generated_plugin_registrant.cc @@ -6,9 +6,9 @@ #include "generated_plugin_registrant.h" -#include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { - UrlLauncherWindowsRegisterWithRegistrar( - registry->GetRegistrarForPlugin("UrlLauncherWindows")); + FlutterInappwebviewWindowsPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FlutterInappwebviewWindowsPluginCApi")); } diff --git a/packages/clean_framework_http/example/windows/flutter/generated_plugins.cmake b/packages/clean_framework_http/example/windows/flutter/generated_plugins.cmake index 88b22e5c..61c79a21 100644 --- a/packages/clean_framework_http/example/windows/flutter/generated_plugins.cmake +++ b/packages/clean_framework_http/example/windows/flutter/generated_plugins.cmake @@ -3,7 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST - url_launcher_windows + flutter_inappwebview_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/packages/clean_framework_http/lib/src/http_external_interface.dart b/packages/clean_framework_http/lib/src/http_external_interface.dart index e9fd4d84..1ab665ab 100644 --- a/packages/clean_framework_http/lib/src/http_external_interface.dart +++ b/packages/clean_framework_http/lib/src/http_external_interface.dart @@ -10,8 +10,7 @@ import 'package:dio_cache_interceptor/dio_cache_interceptor.dart'; typedef HttpCancelToken = CancelToken; -class HttpExternalInterface - extends ExternalInterface { +class HttpExternalInterface extends ExternalInterface { HttpExternalInterface({ HttpExternalInterfaceDelegate? delegate, }) : super(delegate: delegate ?? _DefaultHttpExternalInterfaceDelegate()); @@ -166,7 +165,7 @@ enum HttpResponseType { /// Response data will be a [ResponseBody] instance. stream(ResponseType.stream), - /// Get original bytes, the type of [Response.data] will be List. + /// Get original bytes, the type of [Response.data] will be List`<`int>. bytes(ResponseType.bytes); const HttpResponseType(this.original); @@ -174,8 +173,7 @@ enum HttpResponseType { final ResponseType original; } -class _DefaultHttpExternalInterfaceDelegate - extends HttpExternalInterfaceDelegate { +class _DefaultHttpExternalInterfaceDelegate extends HttpExternalInterfaceDelegate { @override Map? buildHeaders() => null; diff --git a/packages/clean_framework_http/pubspec.yaml b/packages/clean_framework_http/pubspec.yaml index c5540103..2e55cc58 100644 --- a/packages/clean_framework_http/pubspec.yaml +++ b/packages/clean_framework_http/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_http description: External Interface for clean_framework package based on Dio. -version: 1.0.0 +version: 1.0.1 homepage: https://acmesoftware.com repository: https://github.com/AcmeSoftwareLLC/clean_framework/tree/main/packages/clean_framework_http @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^4.1.2 + clean_framework: ^5.0.0 dio: ^5.9.0 dio_cache_interceptor: ^4.0.5 @@ -17,8 +17,8 @@ dependencies: sdk: flutter dev_dependencies: - clean_framework_test: ^0.5.3 + clean_framework_test: ^0.5.4 flutter_test: sdk: flutter - very_good_analysis: ^6.0.0 \ No newline at end of file + very_good_analysis: ^10.0.0 \ No newline at end of file diff --git a/packages/clean_framework_router/pubspec.yaml b/packages/clean_framework_router/pubspec.yaml index 7936d177..131b7ee0 100644 --- a/packages/clean_framework_router/pubspec.yaml +++ b/packages/clean_framework_router/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_router description: A wrapper around go_router to make it easier to use with clean_framework. -version: 0.5.12 +version: 0.5.13 homepage: https://acmesoftware.com/ repository: https://github.com/AcmeSoftwareLLC/clean_framework/tree/main/packages/clean_framework_router @@ -9,13 +9,13 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^4.1.1 + clean_framework: ^5.0.0 flutter: sdk: flutter - go_router: ^14.2.7 + go_router: ^17.0.1 dev_dependencies: flutter_test: sdk: flutter - very_good_analysis: ^6.0.0 + very_good_analysis: ^10.0.0 diff --git a/packages/clean_framework_test/lib/src/presenter_test.dart b/packages/clean_framework_test/lib/src/presenter_test.dart index 19b06571..50000d46 100644 --- a/packages/clean_framework_test/lib/src/presenter_test.dart +++ b/packages/clean_framework_test/lib/src/presenter_test.dart @@ -7,12 +7,12 @@ import 'package:clean_framework_test/src/ui_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; import 'package:flutter_test/flutter_test.dart' as ft; import 'package:meta/meta.dart'; @isTest -void presenterTest( +void presenterTest( String description, { required Presenter Function(WidgetBuilder builder) create, List overrides = const [], @@ -75,8 +75,7 @@ void presenterTest( +void presenterCallbackTest( String description, { required U useCase, required Presenter Function(WidgetBuilder builder) create, @@ -108,8 +107,7 @@ class _TestBuilder extends ConsumerStatefulWidget { ConsumerState<_TestBuilder> createState() => _TestBuilderState(); } -class _TestBuilderState - extends ConsumerState<_TestBuilder> { +class _TestBuilderState extends ConsumerState<_TestBuilder> { @override void initState() { super.initState(); diff --git a/packages/clean_framework_test/lib/src/ui_test.dart b/packages/clean_framework_test/lib/src/ui_test.dart index f70bf7d4..c50f2339 100644 --- a/packages/clean_framework_test/lib/src/ui_test.dart +++ b/packages/clean_framework_test/lib/src/ui_test.dart @@ -4,7 +4,7 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_router/clean_framework_router.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_riverpod/misc.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:meta/meta.dart'; diff --git a/packages/clean_framework_test/pubspec.yaml b/packages/clean_framework_test/pubspec.yaml index 74131f49..eb4f9c48 100644 --- a/packages/clean_framework_test/pubspec.yaml +++ b/packages/clean_framework_test/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework_test description: A collection test helpers to support clean_framework. -version: 0.5.3 +version: 0.5.4 homepage: https://acmesoftware.com/ repository: https://github.com/AcmeSoftwareLLC/clean_framework/packages/clean_framework_test @@ -9,17 +9,17 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^4.0.0 - clean_framework_router: ^0.5.10 + clean_framework: ^5.0.0 + clean_framework_router: ^0.5.13 diff_match_patch: ^0.4.1 flutter: sdk: flutter - flutter_riverpod: ^2.3.6 + flutter_riverpod: ^3.1.0 flutter_test: sdk: flutter meta: '>=1.8.0 <2.0.0' mocktail: ^1.0.0 dev_dependencies: - very_good_analysis: ^5.0.0+1 + very_good_analysis: ^10.0.0 diff --git a/pubspec.yaml b/pubspec.yaml index d49af0a2..0be0108a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,5 +4,5 @@ environment: sdk: '>=3.4.1 <4.0.0' dev_dependencies: - melos: ^6.0.0 - very_good_analysis: ^6.0.0 + melos: ^7.3.0 + very_good_analysis: ^10.0.0 From f5d549c5dd4a0758e1586403387ae9f67082766c Mon Sep 17 00:00:00 2001 From: Abhishek Khanal Date: Mon, 12 Jan 2026 19:29:30 +0545 Subject: [PATCH 2/8] docs: updated CHANGELOG.md --- packages/clean_framework/CHANGELOG.md | 4 ++ .../form/presentation/form_presenter.dart | 61 ++++++++++--------- .../home/presentation/home_presenter.dart | 10 +-- .../presentation/profile_presenter.dart | 10 +-- .../example/lib/widgets/spotlight.dart | 6 +- .../example/lib/widgets/svg_palette_card.dart | 2 +- .../profile/domain/profile_use_case_test.dart | 18 +++--- .../pokemon_species_gateway_test.dart | 2 - .../example/test/flow_test.dart | 2 - .../clean_framework/lib/clean_framework.dart | 5 +- .../lib/clean_framework_defaults.dart | 2 +- .../lib/clean_framework_legacy.dart | 5 +- .../src/core/use_case/provider/family.dart | 1 + packages/clean_framework/pubspec.yaml | 2 +- .../clean_framework_firestore/CHANGELOG.md | 4 ++ .../clean_framework_firestore/pubspec.yaml | 2 +- packages/clean_framework_graphql/CHANGELOG.md | 4 ++ packages/clean_framework_graphql/pubspec.yaml | 2 +- packages/clean_framework_http/CHANGELOG.md | 4 ++ packages/clean_framework_http/pubspec.yaml | 2 +- packages/clean_framework_router/CHANGELOG.md | 4 ++ packages/clean_framework_router/pubspec.yaml | 2 +- packages/clean_framework_test/CHANGELOG.md | 4 ++ packages/clean_framework_test/pubspec.yaml | 2 +- 24 files changed, 91 insertions(+), 69 deletions(-) diff --git a/packages/clean_framework/CHANGELOG.md b/packages/clean_framework/CHANGELOG.md index 805e4237..061b4f4e 100644 --- a/packages/clean_framework/CHANGELOG.md +++ b/packages/clean_framework/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## 4.1.3 +**Jan 12, 2026** +- Bump dependency to latest version. + ## 4.1.2 **Sep 17, 2024** - Bump dependency to latest version. diff --git a/packages/clean_framework/example/lib/features/form/presentation/form_presenter.dart b/packages/clean_framework/example/lib/features/form/presentation/form_presenter.dart index 68ca2ad1..4530f94f 100644 --- a/packages/clean_framework/example/lib/features/form/presentation/form_presenter.dart +++ b/packages/clean_framework/example/lib/features/form/presentation/form_presenter.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_example_rest/features/form/domain/form_domain_models.dart'; import 'package:clean_framework_example_rest/features/form/domain/form_use_case.dart'; @@ -5,8 +7,7 @@ import 'package:clean_framework_example_rest/features/form/presentation/form_vie import 'package:clean_framework_example_rest/providers.dart'; import 'package:flutter/material.dart'; -class FormPresenter - extends Presenter { +class FormPresenter extends Presenter { FormPresenter({ required super.builder, super.key, @@ -14,7 +15,7 @@ class FormPresenter @override void onLayoutReady(BuildContext context, FormUseCase useCase) { - useCase.fetchAndPrefillData(); + unawaited(useCase.fetchAndPrefillData()); } @override @@ -37,34 +38,36 @@ class FormPresenter FormDomainToUIModel domainModel, ) { if (domainModel.isLoggedIn) { - showDialog( - context: context, - barrierDismissible: false, - builder: (context) { - final meta = domainModel.userMeta; + unawaited( + showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + final meta = domainModel.userMeta; - return AlertDialog( - title: const Text('Login Success'), - content: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text('Email: ${meta.email}'), - Text('Password: ${meta.password}'), - Text('Gender: ${meta.gender}'), - ], - ), - actions: [ - FilledButton( - onPressed: () { - Navigator.pop(context); - Navigator.pop(context); - }, - child: const Text('Done'), + return AlertDialog( + title: const Text('Login Success'), + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text('Email: ${meta.email}'), + Text('Password: ${meta.password}'), + Text('Gender: ${meta.gender}'), + ], ), - ], - ); - }, + actions: [ + FilledButton( + onPressed: () { + Navigator.pop(context); + Navigator.pop(context); + }, + child: const Text('Done'), + ), + ], + ); + }, + ), ); } } diff --git a/packages/clean_framework/example/lib/features/home/presentation/home_presenter.dart b/packages/clean_framework/example/lib/features/home/presentation/home_presenter.dart index 39c7e0ad..d7f99e15 100644 --- a/packages/clean_framework/example/lib/features/home/presentation/home_presenter.dart +++ b/packages/clean_framework/example/lib/features/home/presentation/home_presenter.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_example_rest/features/home/domain/home_domain_models.dart'; import 'package:clean_framework_example_rest/features/home/domain/home_entity.dart'; @@ -6,8 +8,7 @@ import 'package:clean_framework_example_rest/features/home/presentation/home_vie import 'package:clean_framework_example_rest/providers.dart'; import 'package:flutter/material.dart'; -class HomePresenter - extends Presenter { +class HomePresenter extends Presenter { HomePresenter({ required super.builder, super.key, @@ -15,7 +16,7 @@ class HomePresenter @override void onLayoutReady(BuildContext context, HomeUseCase useCase) { - useCase.fetchPokemons(); + unawaited(useCase.fetchPokemons()); } @override @@ -25,8 +26,7 @@ class HomePresenter ) { return HomeViewModel( pokemons: domainModel.pokemons, - onSearch: (query) => - useCase.setInput(PokemonSearchDomainInput(name: query)), + onSearch: (query) => useCase.setInput(PokemonSearchDomainInput(name: query)), onRefresh: () => useCase.fetchPokemons(isRefresh: true), onRetry: useCase.fetchPokemons, isLoading: domainModel.status == HomeStatus.loading, diff --git a/packages/clean_framework/example/lib/features/profile/presentation/profile_presenter.dart b/packages/clean_framework/example/lib/features/profile/presentation/profile_presenter.dart index 3ea6ccaa..f311aded 100644 --- a/packages/clean_framework/example/lib/features/profile/presentation/profile_presenter.dart +++ b/packages/clean_framework/example/lib/features/profile/presentation/profile_presenter.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_example_rest/features/profile/domain/profile_domain_models.dart'; import 'package:clean_framework_example_rest/features/profile/domain/profile_use_case.dart'; @@ -5,8 +7,7 @@ import 'package:clean_framework_example_rest/features/profile/presentation/profi import 'package:clean_framework_example_rest/providers.dart'; import 'package:flutter/material.dart'; -class ProfilePresenter extends Presenter { +class ProfilePresenter extends Presenter { ProfilePresenter({ required super.builder, required String name, @@ -16,7 +17,7 @@ class ProfilePresenter extends Presenter { void initState() { super.initState(); SchedulerBinding.instance.addPostFrameCallback((_) { - _loadFileFromCache(); + unawaited(_loadFileFromCache()); }); } @@ -72,8 +73,7 @@ class _SpotlightState extends State { gradient: RadialGradient( center: const FractionalOffset(0.5, 0.3), colors: [ - for (var a = 0; a < 200; a++) - Theme.of(context).colorScheme.surface.withAlpha(a), + for (var a = 0; a < 200; a++) Theme.of(context).colorScheme.surface.withAlpha(a), ], stops: [ for (var stop = 0.0; stop < 1.0; stop += 1 / 200) stop, diff --git a/packages/clean_framework/example/lib/widgets/svg_palette_card.dart b/packages/clean_framework/example/lib/widgets/svg_palette_card.dart index 95770195..21d22863 100644 --- a/packages/clean_framework/example/lib/widgets/svg_palette_card.dart +++ b/packages/clean_framework/example/lib/widgets/svg_palette_card.dart @@ -102,7 +102,7 @@ class _SvgPaletteCardState extends State { if (mounted) setState(() {}); unawaited(_generateColor()); - } catch (e) { + } on Exception catch (e) { log(e.toString(), name: 'SvgPaletteCard'); } } diff --git a/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart b/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart index 8744865b..25ef53d7 100644 --- a/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart +++ b/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart @@ -15,7 +15,7 @@ void main() { 'fetches pokemon profile', provider: profileUseCaseFamily('pikachu'), execute: (useCase) async { - useCase + final profileUseCase = useCase ..subscribe( (output) { return Either.right( @@ -53,8 +53,8 @@ void main() { ), ); }, - ) - ..fetchPokemonProfile(); + ); + await profileUseCase.fetchPokemonProfile(); }, expect: () => [ const ProfileDomainToUIModel( @@ -85,7 +85,7 @@ void main() { 'fetches pokemon profile; description failure', provider: profileUseCaseFamily('PIKACHU'), execute: (useCase) async { - useCase + final profileUseCase = useCase ..subscribe( (output) { return const Either.left( @@ -114,8 +114,8 @@ void main() { ), ); }, - ) - ..fetchPokemonProfile(); + ); + await profileUseCase.fetchPokemonProfile(); }, expect: () => [ const ProfileDomainToUIModel( @@ -139,7 +139,7 @@ void main() { 'fetches pokemon profile; profile/stat failure', provider: profileUseCaseFamily('PIKACHU'), execute: (useCase) async { - useCase + final profileUseCase = useCase ..subscribe( (output) { return Either.right( @@ -162,8 +162,8 @@ void main() { FailureDomainInput(message: 'Something went wrong'), ); }, - ) - ..fetchPokemonProfile(); + ); + await profileUseCase.fetchPokemonProfile(); }, expect: () => [ const ProfileDomainToUIModel( diff --git a/packages/clean_framework/example/test/features/profile/external_interface/pokemon_species_gateway_test.dart b/packages/clean_framework/example/test/features/profile/external_interface/pokemon_species_gateway_test.dart index 598b7298..29005525 100644 --- a/packages/clean_framework/example/test/features/profile/external_interface/pokemon_species_gateway_test.dart +++ b/packages/clean_framework/example/test/features/profile/external_interface/pokemon_species_gateway_test.dart @@ -1,5 +1,3 @@ -// ignore_for_file: lines_longer_than_80_chars - import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_example_rest/core/pokemon/pokemon_success_response.dart'; import 'package:clean_framework_example_rest/features/profile/domain/profile_domain_models.dart'; diff --git a/packages/clean_framework/example/test/flow_test.dart b/packages/clean_framework/example/test/flow_test.dart index 906e0c6a..f15612b2 100644 --- a/packages/clean_framework/example/test/flow_test.dart +++ b/packages/clean_framework/example/test/flow_test.dart @@ -1,5 +1,3 @@ -// ignore_for_file: lines_longer_than_80_chars - import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_example_rest/core/pokemon/pokemon_external_interface.dart'; import 'package:clean_framework_example_rest/core/pokemon/pokemon_request.dart'; diff --git a/packages/clean_framework/lib/clean_framework.dart b/packages/clean_framework/lib/clean_framework.dart index 866fce7e..52e68245 100644 --- a/packages/clean_framework/lib/clean_framework.dart +++ b/packages/clean_framework/lib/clean_framework.dart @@ -1,5 +1,5 @@ /// Clean Framework -library clean_framework; +library; export 'package:clean_framework/src/app_providers_container.dart'; export 'package:clean_framework/src/core/core.dart'; @@ -12,6 +12,5 @@ export 'package:clean_framework/src/utilities/logger.dart'; export 'package:clean_framework/src/utilities/network_logger.dart'; export 'package:clean_framework/src/widgets/widgets.dart'; export 'package:equatable/equatable.dart'; -export 'package:flutter_riverpod/flutter_riverpod.dart' - show Consumer, Provider, ProviderContainer; +export 'package:flutter_riverpod/flutter_riverpod.dart' show Consumer, Provider, ProviderContainer; export 'package:uniform/uniform.dart'; diff --git a/packages/clean_framework/lib/clean_framework_defaults.dart b/packages/clean_framework/lib/clean_framework_defaults.dart index c771c490..07eb15d7 100644 --- a/packages/clean_framework/lib/clean_framework_defaults.dart +++ b/packages/clean_framework/lib/clean_framework_defaults.dart @@ -1,4 +1,4 @@ /// Clean Framework Defaults -library clean_framework_defaults; +library; export 'package:clean_framework/src/defaults/feature_provider/json_feature_provider.dart'; diff --git a/packages/clean_framework/lib/clean_framework_legacy.dart b/packages/clean_framework/lib/clean_framework_legacy.dart index 8bda5ee6..b340b2b5 100644 --- a/packages/clean_framework/lib/clean_framework_legacy.dart +++ b/packages/clean_framework/lib/clean_framework_legacy.dart @@ -1,5 +1,5 @@ /// Clean Framework v1 (Legacy) -library clean_framework_legacy; +library; export 'package:clean_framework/src/app_providers_container.dart'; export 'package:clean_framework/src/core/external_interface/request.dart'; @@ -7,8 +7,7 @@ export 'package:clean_framework/src/core/external_interface/response.dart'; export 'package:clean_framework/src/core/use_case/entity.dart'; export 'package:clean_framework/src/core/use_case/use_case.dart'; export 'package:clean_framework/src/open_feature/open_feature.dart'; -export 'package:clean_framework/src/presentation/presenter/presenter.dart' - show PresenterBuilder; +export 'package:clean_framework/src/presentation/presenter/presenter.dart' show PresenterBuilder; export 'package:clean_framework/src/presentation/presenter/view_model.dart'; export 'package:clean_framework/src/providers/bridge_gateway_provider.dart'; export 'package:clean_framework/src/providers/external_interface.dart'; diff --git a/packages/clean_framework/lib/src/core/use_case/provider/family.dart b/packages/clean_framework/lib/src/core/use_case/provider/family.dart index 9bc7aeef..b2c5d343 100644 --- a/packages/clean_framework/lib/src/core/use_case/provider/family.dart +++ b/packages/clean_framework/lib/src/core/use_case/provider/family.dart @@ -17,6 +17,7 @@ class UseCaseProviderFamily, A extends Ob U Function(A) create, [ UseCaseProviderConnector? connector, ]) { + //ignore: invalid_use_of_internal_member _internal = StateNotifierProviderFamily( (ref, arg) { final useCase = create(arg); diff --git a/packages/clean_framework/pubspec.yaml b/packages/clean_framework/pubspec.yaml index 80841452..efbe4721 100644 --- a/packages/clean_framework/pubspec.yaml +++ b/packages/clean_framework/pubspec.yaml @@ -1,6 +1,6 @@ name: clean_framework description: Clean Architecture components library, inspired on the guidelines created by Uncle Bob. -version: 5.0.0 +version: 4.1.3 homepage: https://acmesoftware.com/ repository: https://github.com/AcmeSoftwareLLC/clean_framework screenshots: diff --git a/packages/clean_framework_firestore/CHANGELOG.md b/packages/clean_framework_firestore/CHANGELOG.md index 3e01eca1..4afbf4cc 100644 --- a/packages/clean_framework_firestore/CHANGELOG.md +++ b/packages/clean_framework_firestore/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## 0.5.4 +**Jan 12, 2026** +- Bump dependencies to latest versions. + ## 0.5.3 **Feb 10, 2024** - Fix bug causing `FirebaseDeleteRequest`s to fail. diff --git a/packages/clean_framework_firestore/pubspec.yaml b/packages/clean_framework_firestore/pubspec.yaml index 02671da2..9ba3eb8d 100644 --- a/packages/clean_framework_firestore/pubspec.yaml +++ b/packages/clean_framework_firestore/pubspec.yaml @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^5.0.0 + clean_framework: ^4.1.3 cloud_firestore: ^6.1.1 equatable: ^2.0.5 diff --git a/packages/clean_framework_graphql/CHANGELOG.md b/packages/clean_framework_graphql/CHANGELOG.md index 5b32cc93..f99211ac 100644 --- a/packages/clean_framework_graphql/CHANGELOG.md +++ b/packages/clean_framework_graphql/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## 0.4.4 +**Jan 12, 2026** +- Publish patch version for newest Clean Framework changes. + ## 0.4.3 **Feb 7, 2024** - Publish patch version for newest Clean Framework changes. diff --git a/packages/clean_framework_graphql/pubspec.yaml b/packages/clean_framework_graphql/pubspec.yaml index ec753813..0d6fa57f 100644 --- a/packages/clean_framework_graphql/pubspec.yaml +++ b/packages/clean_framework_graphql/pubspec.yaml @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^5.0.0 + clean_framework: ^4.1.3 flutter: sdk: flutter diff --git a/packages/clean_framework_http/CHANGELOG.md b/packages/clean_framework_http/CHANGELOG.md index 786ac695..8f0f5ab6 100644 --- a/packages/clean_framework_http/CHANGELOG.md +++ b/packages/clean_framework_http/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## 1.0.1 +**Jan 12, 2026** +- Bumps dependencies to latest version. + ## 1.0.0 **Oct 6, 2025** - Bumps dependencies to latest version. diff --git a/packages/clean_framework_http/pubspec.yaml b/packages/clean_framework_http/pubspec.yaml index 2e55cc58..c59c10da 100644 --- a/packages/clean_framework_http/pubspec.yaml +++ b/packages/clean_framework_http/pubspec.yaml @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^5.0.0 + clean_framework: ^4.1.3 dio: ^5.9.0 dio_cache_interceptor: ^4.0.5 diff --git a/packages/clean_framework_router/CHANGELOG.md b/packages/clean_framework_router/CHANGELOG.md index 34595574..c565993a 100644 --- a/packages/clean_framework_router/CHANGELOG.md +++ b/packages/clean_framework_router/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## 0.5.13 +**Jan 12, 2026** +- Bump dependency to latest version. + ## 0.5.12 **Sep 17, 2024** - Bump dependency to latest version. diff --git a/packages/clean_framework_router/pubspec.yaml b/packages/clean_framework_router/pubspec.yaml index 131b7ee0..4b509a6a 100644 --- a/packages/clean_framework_router/pubspec.yaml +++ b/packages/clean_framework_router/pubspec.yaml @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^5.0.0 + clean_framework: ^4.1.3 flutter: sdk: flutter diff --git a/packages/clean_framework_test/CHANGELOG.md b/packages/clean_framework_test/CHANGELOG.md index 22bbb0d2..13777414 100644 --- a/packages/clean_framework_test/CHANGELOG.md +++ b/packages/clean_framework_test/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## 0.5.4 +**Jan 12, 2026** +- Bump dependency to latest version. + ## 0.5.3 **Feb 7, 2024** - Updates for newest clean framework class changes. diff --git a/packages/clean_framework_test/pubspec.yaml b/packages/clean_framework_test/pubspec.yaml index eb4f9c48..43faa7e1 100644 --- a/packages/clean_framework_test/pubspec.yaml +++ b/packages/clean_framework_test/pubspec.yaml @@ -9,7 +9,7 @@ environment: flutter: '>=3.0.0' dependencies: - clean_framework: ^5.0.0 + clean_framework: ^4.1.3 clean_framework_router: ^0.5.13 diff_match_patch: ^0.4.1 From bfcfa7c6b508c12813243946aacbfab84e20f8ae Mon Sep 17 00:00:00 2001 From: Abhishek Khanal Date: Mon, 12 Jan 2026 20:57:08 +0545 Subject: [PATCH 3/8] test: fix few failing test --- .../test/core/app_provider_scope_test.dart | 38 +++++++++---------- .../core/use_case/use_case_provider_test.dart | 2 +- .../external_interface_integration_test.dart | 38 +++++++------------ 3 files changed, 33 insertions(+), 45 deletions(-) diff --git a/packages/clean_framework/test/core/app_provider_scope_test.dart b/packages/clean_framework/test/core/app_provider_scope_test.dart index 777548c0..3ce2ee19 100644 --- a/packages/clean_framework/test/core/app_provider_scope_test.dart +++ b/packages/clean_framework/test/core/app_provider_scope_test.dart @@ -5,50 +5,48 @@ import 'package:flutter_test/flutter_test.dart'; void main() { group('AppProviderScope tests |', () { testWidgets( - 'initializes providers', + 'throws error if no appropriate providers were supplied', (tester) async { - const key = ValueKey('child'); - final scope = AppProviderScope( - externalInterfaceProviders: [_testExternalInterfaceProvider], - child: const SizedBox.shrink(key: key), + const scope = AppProviderScope( + child: MaterialApp(home: Text('PING')), ); await tester.pumpWidget(scope); _testUseCaseProvider.init(); - await tester.pumpAndSettle(); + await tester.pump(); final useCase = AppProviderScope.containerOf( - tester.element(find.byKey(key)), + tester.element(find.byType(MaterialApp)), ).read(_testUseCaseProvider().notifier); - await useCase.ping('Hello'); - expect(useCase.debugEntity.pong, 'Hello'); + await expectLater( + () => useCase.ping('Hello'), + throwsA(isA()), + ); }, ); testWidgets( - 'throws error if no appropriate providers were supplied', + 'initializes providers', (tester) async { - const scope = AppProviderScope( - child: MaterialApp(home: Text('PING')), + const key = ValueKey('child'); + final scope = AppProviderScope( + externalInterfaceProviders: [_testExternalInterfaceProvider], + child: const SizedBox.shrink(key: key), ); await tester.pumpWidget(scope); _testUseCaseProvider.init(); - await tester.pump(); + await tester.pumpAndSettle(); final useCase = AppProviderScope.containerOf( - tester.element(find.byType(MaterialApp)), + tester.element(find.byKey(key)), ).read(_testUseCaseProvider().notifier); + await useCase.ping('Hello'); - try { - await useCase.ping('Hello'); - } on Exception catch (e, s) { - FlutterError.demangleStackTrace(s); - expect(e, isA()); - } + expect(useCase.debugEntity.pong, 'Hello'); }, ); }); diff --git a/packages/clean_framework/test/core/use_case/use_case_provider_test.dart b/packages/clean_framework/test/core/use_case/use_case_provider_test.dart index 0e89fc25..b5c1c8d4 100644 --- a/packages/clean_framework/test/core/use_case/use_case_provider_test.dart +++ b/packages/clean_framework/test/core/use_case/use_case_provider_test.dart @@ -229,7 +229,7 @@ void main() { ], ); - final useCase = _testUseCaseProvider2().notifier.read(container); + final useCase = container.read(_testUseCaseProvider2().notifier); expect(useCase, isA()); }); diff --git a/packages/clean_framework/test/providers/external_interface_integration_test.dart b/packages/clean_framework/test/providers/external_interface_integration_test.dart index 97ad9de2..7d530327 100644 --- a/packages/clean_framework/test/providers/external_interface_integration_test.dart +++ b/packages/clean_framework/test/providers/external_interface_integration_test.dart @@ -80,8 +80,7 @@ void main() { } class TestInterface extends ExternalInterface { - TestInterface(GatewayProvider provider) - : super([() => provider.getGateway(context)]); + TestInterface(GatewayProvider provider) : super([() => provider.getGateway(context)]); @override void handleRequest() { @@ -120,14 +119,11 @@ class TestInterface extends ExternalInterface { } } -class TestDirectGateway extends Gateway { - TestDirectGateway(UseCaseProvider provider) - : super(provider: provider, context: context); +class TestDirectGateway extends Gateway { + TestDirectGateway(UseCaseProvider provider) : super(provider: provider, context: context); @override - TestRequest buildRequest(TestDirectDomainModel output) => - FutureTestRequest(output.id); + TestRequest buildRequest(TestDirectDomainModel output) => FutureTestRequest(output.id); @override FailureDomainInput onFailure(FailureResponse failureResponse) { @@ -140,10 +136,8 @@ class TestDirectGateway extends Gateway { - TestGatewayWithFailure(UseCaseProvider provider) - : super(provider: provider, context: context); +class TestGatewayWithFailure extends Gateway { + TestGatewayWithFailure(UseCaseProvider provider) : super(provider: provider, context: context); @override FailedRequest buildRequest(TestDirectDomainModel output) { @@ -161,14 +155,12 @@ class TestGatewayWithFailure extends Gateway { - TestWatcherGatewayWithFailure(UseCaseProvider provider) - : super(provider: provider, context: context); +class TestWatcherGatewayWithFailure + extends WatcherGateway { + TestWatcherGatewayWithFailure(UseCaseProvider provider) : super(provider: provider, context: context); @override - FailedRequest buildRequest(TestDirectDomainModel output) => - FailedRequest(output.id); + FailedRequest buildRequest(TestDirectDomainModel output) => FailedRequest(output.id); @override TestSuccessInput onSuccess(TestResponse response) { @@ -176,14 +168,12 @@ class TestWatcherGatewayWithFailure extends WatcherGateway< } } -class TestYieldGateway extends WatcherGateway { - TestYieldGateway(UseCaseProvider provider) - : super(provider: provider, context: context); +class TestYieldGateway + extends WatcherGateway { + TestYieldGateway(UseCaseProvider provider) : super(provider: provider, context: context); @override - TestRequest buildRequest(TestSubscriptionDomainModel output) => - StreamTestRequest(output.id); + TestRequest buildRequest(TestSubscriptionDomainModel output) => StreamTestRequest(output.id); @override TestSuccessInput onSuccess(TestResponse response) { From f2ad2328be0b62f7c6171049d23979ad00aae782 Mon Sep 17 00:00:00 2001 From: Abhishek Khanal Date: Mon, 12 Jan 2026 21:13:55 +0545 Subject: [PATCH 4/8] fix: example clean framework version --- packages/clean_framework/example/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/clean_framework/example/pubspec.yaml b/packages/clean_framework/example/pubspec.yaml index 66854fe5..f0556fcd 100644 --- a/packages/clean_framework/example/pubspec.yaml +++ b/packages/clean_framework/example/pubspec.yaml @@ -8,7 +8,7 @@ environment: dependencies: animations: ^2.0.11 - clean_framework: ^5.0.0 + clean_framework: ^4.1.3 clean_framework_router: ^0.5.13 dio: ^5.7.0 flutter: From 1403ff8865e5b49713a48b77580a98292a2ba6c3 Mon Sep 17 00:00:00 2001 From: Abhishek Khanal Date: Mon, 12 Jan 2026 21:34:08 +0545 Subject: [PATCH 5/8] chore: refactor to line length 80 --- .../form/presentation/form_presenter.dart | 3 +- .../home/presentation/home_presenter.dart | 6 ++- .../profile/domain/profile_use_case.dart | 13 +++++-- .../presentation/profile_presenter.dart | 6 ++- .../external_interface_providers.dart | 3 +- .../lib/providers/gateway_providers.dart | 9 +++-- .../lib/providers/use_case_providers.dart | 3 +- .../example/lib/widgets/spotlight.dart | 3 +- .../example/lib/widgets/svg_palette_card.dart | 3 +- .../presentation/home_presenter_test.dart | 6 ++- .../profile/domain/profile_use_case_test.dart | 18 ++++++--- .../presentation/profile_presenter_test.dart | 6 ++- .../test/helpers/test_cache_manager.dart | 3 +- .../clean_framework/lib/clean_framework.dart | 3 +- .../lib/clean_framework_legacy.dart | 3 +- .../core/dependency/dependency_provider.dart | 3 +- .../external_interface.dart | 12 ++++-- .../external_interface_provider.dart | 3 +- .../lib/src/core/gateway/gateway.dart | 13 ++++--- .../src/core/gateway/gateway_provider.dart | 3 +- .../core/use_case/provider/auto_dispose.dart | 3 +- .../src/core/use_case/provider/bridge.dart | 3 +- .../src/core/use_case/provider/family.dart | 20 ++++++---- .../use_case/provider/use_case_provider.dart | 3 +- .../lib/src/core/use_case/use_case.dart | 21 ++++++---- .../evaluation_context.dart | 1 - .../providers/bridge_gateway_provider.dart | 3 +- .../lib/src/providers/external_interface.dart | 9 +++-- .../external_interface_provider.dart | 3 +- .../lib/src/providers/use_case_provider.dart | 6 ++- .../lib/src/widgets/src/feature_scope.dart | 6 ++- .../test/core/app_provider_scope_test.dart | 12 ++++-- .../external_interface_test.dart | 22 +++++++---- .../core/gateway/gateway_provider_test.dart | 3 +- .../test/core/gateway/gateway_test.dart | 19 ++++++---- .../core/use_case/use_case_provider_test.dart | 19 +++++++--- .../presenter/presenter_test.dart | 12 ++++-- .../external_interface_integration_test.dart | 38 ++++++++++++------- .../test/providers/presenter_widget_test.dart | 21 ++++++---- .../test/graphql_service_test.dart | 2 +- .../home/presentation/home_presenter.dart | 3 +- .../external_interface_providers.dart | 3 +- .../lib/providers/gateway_providers.dart | 2 +- .../lib/providers/use_case_providers.dart | 3 +- .../lib/src/http_external_interface.dart | 6 ++- .../lib/src/presenter_test.dart | 9 +++-- .../lib/src/test_helpers.dart | 2 - 47 files changed, 245 insertions(+), 131 deletions(-) diff --git a/packages/clean_framework/example/lib/features/form/presentation/form_presenter.dart b/packages/clean_framework/example/lib/features/form/presentation/form_presenter.dart index 4530f94f..1491bde6 100644 --- a/packages/clean_framework/example/lib/features/form/presentation/form_presenter.dart +++ b/packages/clean_framework/example/lib/features/form/presentation/form_presenter.dart @@ -7,7 +7,8 @@ import 'package:clean_framework_example_rest/features/form/presentation/form_vie import 'package:clean_framework_example_rest/providers.dart'; import 'package:flutter/material.dart'; -class FormPresenter extends Presenter { +class FormPresenter + extends Presenter { FormPresenter({ required super.builder, super.key, diff --git a/packages/clean_framework/example/lib/features/home/presentation/home_presenter.dart b/packages/clean_framework/example/lib/features/home/presentation/home_presenter.dart index d7f99e15..e7c12300 100644 --- a/packages/clean_framework/example/lib/features/home/presentation/home_presenter.dart +++ b/packages/clean_framework/example/lib/features/home/presentation/home_presenter.dart @@ -8,7 +8,8 @@ import 'package:clean_framework_example_rest/features/home/presentation/home_vie import 'package:clean_framework_example_rest/providers.dart'; import 'package:flutter/material.dart'; -class HomePresenter extends Presenter { +class HomePresenter + extends Presenter { HomePresenter({ required super.builder, super.key, @@ -26,7 +27,8 @@ class HomePresenter extends Presenter useCase.setInput(PokemonSearchDomainInput(name: query)), + onSearch: (query) => + useCase.setInput(PokemonSearchDomainInput(name: query)), onRefresh: () => useCase.fetchPokemons(isRefresh: true), onRetry: useCase.fetchPokemons, isLoading: domainModel.status == HomeStatus.loading, diff --git a/packages/clean_framework/example/lib/features/profile/domain/profile_use_case.dart b/packages/clean_framework/example/lib/features/profile/domain/profile_use_case.dart index 1e32bc8e..d8d7dd41 100644 --- a/packages/clean_framework/example/lib/features/profile/domain/profile_use_case.dart +++ b/packages/clean_framework/example/lib/features/profile/domain/profile_use_case.dart @@ -48,7 +48,9 @@ class ProfileUseCase extends UseCase { types: profile.types, height: profile.height, weight: profile.weight, - stats: profile.stats.map((s) => ProfileStatEntity(name: s.name, point: s.baseStat)).toList(growable: false), + stats: profile.stats + .map((s) => ProfileStatEntity(name: s.name, point: s.baseStat)) + .toList(growable: false), ); }, onFailure: (failure) => entity, @@ -56,7 +58,8 @@ class ProfileUseCase extends UseCase { } } -class ProfileDomainToUIModelTransformer extends DomainModelTransformer { +class ProfileDomainToUIModelTransformer + extends DomainModelTransformer { @override ProfileDomainToUIModel transform(ProfileEntity entity) { return ProfileDomainToUIModel( @@ -76,6 +79,10 @@ class ProfileDomainToUIModelTransformer extends DomainModelTransformer s[0].toUpperCase() + s.substring(1)).join(' '); + return input + .replaceAll('special', 'sp.') + .split('-') + .map((s) => s[0].toUpperCase() + s.substring(1)) + .join(' '); } } diff --git a/packages/clean_framework/example/lib/features/profile/presentation/profile_presenter.dart b/packages/clean_framework/example/lib/features/profile/presentation/profile_presenter.dart index f311aded..48347ac6 100644 --- a/packages/clean_framework/example/lib/features/profile/presentation/profile_presenter.dart +++ b/packages/clean_framework/example/lib/features/profile/presentation/profile_presenter.dart @@ -7,7 +7,8 @@ import 'package:clean_framework_example_rest/features/profile/presentation/profi import 'package:clean_framework_example_rest/providers.dart'; import 'package:flutter/material.dart'; -class ProfilePresenter extends Presenter { +class ProfilePresenter extends Presenter { ProfilePresenter({ required super.builder, required String name, @@ -26,7 +27,8 @@ class ProfilePresenter extends Presenter pokemonExternalInterfaceProvider = ExternalInterfaceProvider( +final ExternalInterfaceProvider + pokemonExternalInterfaceProvider = ExternalInterfaceProvider( PokemonExternalInterface.new, gateways: [ pokemonCollectionGateway, diff --git a/packages/clean_framework/example/lib/providers/gateway_providers.dart b/packages/clean_framework/example/lib/providers/gateway_providers.dart index 880344d2..85c29470 100644 --- a/packages/clean_framework/example/lib/providers/gateway_providers.dart +++ b/packages/clean_framework/example/lib/providers/gateway_providers.dart @@ -4,18 +4,21 @@ import 'package:clean_framework_example_rest/features/profile/external_interface import 'package:clean_framework_example_rest/features/profile/external_interface/pokemon_species_gateway.dart'; import 'package:clean_framework_example_rest/providers/use_case_providers.dart'; -final GatewayProvider pokemonCollectionGateway = GatewayProvider( +final GatewayProvider pokemonCollectionGateway = + GatewayProvider( PokemonCollectionGateway.new, useCases: [homeUseCaseProvider], ); -final GatewayProvider pokemonProfileGateway = GatewayProvider( +final GatewayProvider pokemonProfileGateway = + GatewayProvider( PokemonProfileGateway.new, useCases: [], families: [profileUseCaseFamily], ); -final GatewayProvider pokemonSpeciesGateway = GatewayProvider( +final GatewayProvider pokemonSpeciesGateway = + GatewayProvider( PokemonSpeciesGateway.new, useCases: [], families: [profileUseCaseFamily], diff --git a/packages/clean_framework/example/lib/providers/use_case_providers.dart b/packages/clean_framework/example/lib/providers/use_case_providers.dart index 27ea4f20..3a6c4dce 100644 --- a/packages/clean_framework/example/lib/providers/use_case_providers.dart +++ b/packages/clean_framework/example/lib/providers/use_case_providers.dart @@ -24,7 +24,8 @@ final AutoDisposeUseCaseProvider homeUseCaseProvider = }, ); -final UseCaseProviderFamily profileUseCaseFamily = +final UseCaseProviderFamily + profileUseCaseFamily = UseCaseProvider.family( ProfileUseCase.new, ); diff --git a/packages/clean_framework/example/lib/widgets/spotlight.dart b/packages/clean_framework/example/lib/widgets/spotlight.dart index 9a2b0327..acba6bb2 100644 --- a/packages/clean_framework/example/lib/widgets/spotlight.dart +++ b/packages/clean_framework/example/lib/widgets/spotlight.dart @@ -73,7 +73,8 @@ class _SpotlightState extends State { gradient: RadialGradient( center: const FractionalOffset(0.5, 0.3), colors: [ - for (var a = 0; a < 200; a++) Theme.of(context).colorScheme.surface.withAlpha(a), + for (var a = 0; a < 200; a++) + Theme.of(context).colorScheme.surface.withAlpha(a), ], stops: [ for (var stop = 0.0; stop < 1.0; stop += 1 / 200) stop, diff --git a/packages/clean_framework/example/lib/widgets/svg_palette_card.dart b/packages/clean_framework/example/lib/widgets/svg_palette_card.dart index 21d22863..0129c61f 100644 --- a/packages/clean_framework/example/lib/widgets/svg_palette_card.dart +++ b/packages/clean_framework/example/lib/widgets/svg_palette_card.dart @@ -116,7 +116,8 @@ class _SvgPaletteCardState extends State { final palette = await AppScope.paletteGeneratorOf(context, image); if (!mounted) return; - _color = widget.backgroundColorBuilder?.call(context, palette) ?? palette.dominantColor?.color; + _color = widget.backgroundColorBuilder?.call(context, palette) ?? + palette.dominantColor?.color; setState(() {}); } diff --git a/packages/clean_framework/example/test/features/home/presentation/home_presenter_test.dart b/packages/clean_framework/example/test/features/home/presentation/home_presenter_test.dart index 02fcefd2..30c29767 100644 --- a/packages/clean_framework/example/test/features/home/presentation/home_presenter_test.dart +++ b/packages/clean_framework/example/test/features/home/presentation/home_presenter_test.dart @@ -116,7 +116,8 @@ void main() { useCase: HomeUseCaseMock(), create: (builder) => HomePresenter(builder: builder), setup: (useCase) { - when(() => useCase.fetchPokemons(isRefresh: true)).thenAnswer((_) async {}); + when(() => useCase.fetchPokemons(isRefresh: true)) + .thenAnswer((_) async {}); }, verify: (useCase, vm) async { await vm.onRefresh(); @@ -130,7 +131,8 @@ void main() { useCase: HomeUseCaseMock(), create: (builder) => HomePresenter(builder: builder), setup: (useCase) { - when(() => useCase.setInput(any())).thenAnswer((_) async {}); + when(() => useCase.setInput(any())) + .thenAnswer((_) async {}); }, verify: (useCase, vm) { vm.onSearch('pikachu'); diff --git a/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart b/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart index 25ef53d7..3fc47f39 100644 --- a/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart +++ b/packages/clean_framework/example/test/features/profile/domain/profile_use_case_test.dart @@ -16,7 +16,8 @@ void main() { provider: profileUseCaseFamily('pikachu'), execute: (useCase) async { final profileUseCase = useCase - ..subscribe( + ..subscribe( (output) { return Either.right( PokemonSpeciesSuccessDomainInput( @@ -32,7 +33,8 @@ void main() { ); }, ) - ..subscribe( + ..subscribe( (output) { return Either.right( PokemonProfileSuccessInput( @@ -86,14 +88,16 @@ void main() { provider: profileUseCaseFamily('PIKACHU'), execute: (useCase) async { final profileUseCase = useCase - ..subscribe( + ..subscribe( (output) { return const Either.left( FailureDomainInput(message: 'Something went wrong'), ); }, ) - ..subscribe( + ..subscribe( (output) { return Either.right( PokemonProfileSuccessInput( @@ -140,7 +144,8 @@ void main() { provider: profileUseCaseFamily('PIKACHU'), execute: (useCase) async { final profileUseCase = useCase - ..subscribe( + ..subscribe( (output) { return Either.right( PokemonSpeciesSuccessDomainInput( @@ -156,7 +161,8 @@ void main() { ); }, ) - ..subscribe( + ..subscribe( (output) { return const Either.left( FailureDomainInput(message: 'Something went wrong'), diff --git a/packages/clean_framework/example/test/features/profile/presentation/profile_presenter_test.dart b/packages/clean_framework/example/test/features/profile/presentation/profile_presenter_test.dart index a801229e..2d6f0ee9 100644 --- a/packages/clean_framework/example/test/features/profile/presentation/profile_presenter_test.dart +++ b/packages/clean_framework/example/test/features/profile/presentation/profile_presenter_test.dart @@ -16,7 +16,8 @@ void main() { name: 'pikachu', ), overrides: [ - profileUseCaseFamily('PIKACHU').overrideWith(ProfileUseCaseFake('PIKACHU')), + profileUseCaseFamily('PIKACHU') + .overrideWith(ProfileUseCaseFake('PIKACHU')), ], setup: (useCase) { useCase.debugEntityUpdate( @@ -38,7 +39,8 @@ void main() { ); }, expect: () => [ - isA().having((vm) => vm.description, 'description', ''), + isA() + .having((vm) => vm.description, 'description', ''), isA().having( (vm) => vm.description, 'description', diff --git a/packages/clean_framework/example/test/helpers/test_cache_manager.dart b/packages/clean_framework/example/test/helpers/test_cache_manager.dart index ad0ae83c..418af647 100644 --- a/packages/clean_framework/example/test/helpers/test_cache_manager.dart +++ b/packages/clean_framework/example/test/helpers/test_cache_manager.dart @@ -57,7 +57,8 @@ class TestCacheManager extends CacheManager { } class TestFileSystem extends FileSystem { - final Future directoryFuture = MemoryFileSystem().systemTempDirectory.createTemp('test'); + final Future directoryFuture = + MemoryFileSystem().systemTempDirectory.createTemp('test'); @override Future createFile(String name) async { final dir = await directoryFuture; diff --git a/packages/clean_framework/lib/clean_framework.dart b/packages/clean_framework/lib/clean_framework.dart index 52e68245..26bd205c 100644 --- a/packages/clean_framework/lib/clean_framework.dart +++ b/packages/clean_framework/lib/clean_framework.dart @@ -12,5 +12,6 @@ export 'package:clean_framework/src/utilities/logger.dart'; export 'package:clean_framework/src/utilities/network_logger.dart'; export 'package:clean_framework/src/widgets/widgets.dart'; export 'package:equatable/equatable.dart'; -export 'package:flutter_riverpod/flutter_riverpod.dart' show Consumer, Provider, ProviderContainer; +export 'package:flutter_riverpod/flutter_riverpod.dart' + show Consumer, Provider, ProviderContainer; export 'package:uniform/uniform.dart'; diff --git a/packages/clean_framework/lib/clean_framework_legacy.dart b/packages/clean_framework/lib/clean_framework_legacy.dart index b340b2b5..bafbc5a2 100644 --- a/packages/clean_framework/lib/clean_framework_legacy.dart +++ b/packages/clean_framework/lib/clean_framework_legacy.dart @@ -7,7 +7,8 @@ export 'package:clean_framework/src/core/external_interface/response.dart'; export 'package:clean_framework/src/core/use_case/entity.dart'; export 'package:clean_framework/src/core/use_case/use_case.dart'; export 'package:clean_framework/src/open_feature/open_feature.dart'; -export 'package:clean_framework/src/presentation/presenter/presenter.dart' show PresenterBuilder; +export 'package:clean_framework/src/presentation/presenter/presenter.dart' + show PresenterBuilder; export 'package:clean_framework/src/presentation/presenter/view_model.dart'; export 'package:clean_framework/src/providers/bridge_gateway_provider.dart'; export 'package:clean_framework/src/providers/external_interface.dart'; diff --git a/packages/clean_framework/lib/src/core/dependency/dependency_provider.dart b/packages/clean_framework/lib/src/core/dependency/dependency_provider.dart index dfa339fd..bc786cde 100644 --- a/packages/clean_framework/lib/src/core/dependency/dependency_provider.dart +++ b/packages/clean_framework/lib/src/core/dependency/dependency_provider.dart @@ -3,7 +3,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/misc.dart'; import 'package:meta/meta.dart'; -class DependencyProvider extends CleanFrameworkProvider> { +class DependencyProvider + extends CleanFrameworkProvider> { DependencyProvider(T Function(DependencyRef) create) : super( provider: Provider((ref) => create(DependencyRef(ref))), diff --git a/packages/clean_framework/lib/src/core/external_interface/external_interface.dart b/packages/clean_framework/lib/src/core/external_interface/external_interface.dart index 8ae646ba..4cdac0f8 100644 --- a/packages/clean_framework/lib/src/core/external_interface/external_interface.dart +++ b/packages/clean_framework/lib/src/core/external_interface/external_interface.dart @@ -64,7 +64,8 @@ abstract class ExternalInterface { ); } - final _RequestController _requestController = StreamController.broadcast(); + final _RequestController _requestController = + StreamController.broadcast(); @visibleForTesting Future> request(R request) { @@ -132,11 +133,13 @@ abstract class ExternalInterface { } } -typedef _RequestController = StreamController>; +typedef _RequestController + = StreamController>; typedef ResponseSender = void Function(S response); -typedef RequestHandler = FutureOr Function( +typedef RequestHandler + = FutureOr Function( E request, ResponseSender send, ); @@ -158,7 +161,8 @@ class RequestCompleter { } } -class _StreamRequestCompleter extends RequestCompleter { +class _StreamRequestCompleter + extends RequestCompleter { _StreamRequestCompleter(super.request, this.emitSuccess); final void Function(S) emitSuccess; diff --git a/packages/clean_framework/lib/src/core/external_interface/external_interface_provider.dart b/packages/clean_framework/lib/src/core/external_interface/external_interface_provider.dart index 4dbc6d0f..cee6233c 100644 --- a/packages/clean_framework/lib/src/core/external_interface/external_interface_provider.dart +++ b/packages/clean_framework/lib/src/core/external_interface/external_interface_provider.dart @@ -5,7 +5,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/misc.dart'; import 'package:meta/meta.dart'; -class ExternalInterfaceProvider extends CleanFrameworkProvider> { +class ExternalInterfaceProvider + extends CleanFrameworkProvider> { ExternalInterfaceProvider( E Function() create, { List gateways = const [], diff --git a/packages/clean_framework/lib/src/core/gateway/gateway.dart b/packages/clean_framework/lib/src/core/gateway/gateway.dart index 5e795111..2573bd62 100644 --- a/packages/clean_framework/lib/src/core/gateway/gateway.dart +++ b/packages/clean_framework/lib/src/core/gateway/gateway.dart @@ -9,8 +9,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/misc.dart'; import 'package:meta/meta.dart'; -abstract class Gateway { +abstract class Gateway { void attach( Ref ref, { required List providers, @@ -38,7 +38,6 @@ abstract class Gateway feeder, {Type? source}) { assert( _source == null, @@ -71,7 +70,10 @@ abstract class Gateway extends Gateway { @override FailureDomainInput onFailure(FailureResponse failureResponse) { @@ -86,7 +88,8 @@ abstract class WatcherGateway = FutureOr> Function( +typedef Responder + = FutureOr> Function( R request, ); diff --git a/packages/clean_framework/lib/src/core/gateway/gateway_provider.dart b/packages/clean_framework/lib/src/core/gateway/gateway_provider.dart index 77b254a0..d96ca0b5 100644 --- a/packages/clean_framework/lib/src/core/gateway/gateway_provider.dart +++ b/packages/clean_framework/lib/src/core/gateway/gateway_provider.dart @@ -5,7 +5,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/misc.dart'; import 'package:meta/meta.dart'; -class GatewayProvider extends CleanFrameworkProvider> { +class GatewayProvider + extends CleanFrameworkProvider> { GatewayProvider( G Function() create, { List useCases = const [], diff --git a/packages/clean_framework/lib/src/core/use_case/provider/auto_dispose.dart b/packages/clean_framework/lib/src/core/use_case/provider/auto_dispose.dart index a5664ca0..30dcc5c4 100644 --- a/packages/clean_framework/lib/src/core/use_case/provider/auto_dispose.dart +++ b/packages/clean_framework/lib/src/core/use_case/provider/auto_dispose.dart @@ -1,6 +1,7 @@ part of 'use_case_provider.dart'; -class AutoDisposeUseCaseProvider> extends UseCaseProviderBase { +class AutoDisposeUseCaseProvider> + extends UseCaseProviderBase { AutoDisposeUseCaseProvider( U Function() create, [ UseCaseProviderConnector? connector, diff --git a/packages/clean_framework/lib/src/core/use_case/provider/bridge.dart b/packages/clean_framework/lib/src/core/use_case/provider/bridge.dart index 35e15c18..b89ac874 100644 --- a/packages/clean_framework/lib/src/core/use_case/provider/bridge.dart +++ b/packages/clean_framework/lib/src/core/use_case/provider/bridge.dart @@ -1,6 +1,7 @@ part of 'use_case_provider.dart'; -typedef UseCaseProviderConnector> = void Function( +typedef UseCaseProviderConnector> = void + Function( UseCaseProviderBridge bridge, ); diff --git a/packages/clean_framework/lib/src/core/use_case/provider/family.dart b/packages/clean_framework/lib/src/core/use_case/provider/family.dart index b2c5d343..0120f726 100644 --- a/packages/clean_framework/lib/src/core/use_case/provider/family.dart +++ b/packages/clean_framework/lib/src/core/use_case/provider/family.dart @@ -1,8 +1,10 @@ part of 'use_case_provider.dart'; -abstract class UseCaseProviderFamilyBase, A extends Object> { +abstract class UseCaseProviderFamilyBase, + A extends Object> { // ignore: close_sinks - final StreamController<(Refreshable, A)> _notifierController = StreamController.broadcast(); + final StreamController<(Refreshable, A)> _notifierController = + StreamController.broadcast(); Stream<(Refreshable, A)> get notifier => _notifierController.stream; @@ -11,8 +13,8 @@ abstract class UseCaseProviderFamilyBase, UseCaseProviderBase call(A arg); } -class UseCaseProviderFamily, A extends Object> - extends UseCaseProviderFamilyBase { +class UseCaseProviderFamily, + A extends Object> extends UseCaseProviderFamilyBase { UseCaseProviderFamily( U Function(A) create, [ UseCaseProviderConnector? connector, @@ -39,7 +41,8 @@ class UseCaseProviderFamily, A extends Ob class UseCaseProviderFamilyBuilder { const UseCaseProviderFamilyBuilder(); - UseCaseProviderFamily call, A extends Object>( + UseCaseProviderFamily + call, A extends Object>( U Function(A) create, [ UseCaseProviderConnector? connector, ]) { @@ -47,8 +50,8 @@ class UseCaseProviderFamilyBuilder { } } -class AutoDisposeUseCaseProviderFamily, A extends Object> - extends UseCaseProviderFamilyBase { +class AutoDisposeUseCaseProviderFamily, + A extends Object> extends UseCaseProviderFamilyBase { AutoDisposeUseCaseProviderFamily( U Function(A) create, [ UseCaseProviderConnector? connector, @@ -77,7 +80,8 @@ class AutoDisposeUseCaseProviderFamily, A class AutoDisposeUseCaseProviderFamilyBuilder { const AutoDisposeUseCaseProviderFamilyBuilder(); - AutoDisposeUseCaseProviderFamily call, A extends Object>( + AutoDisposeUseCaseProviderFamily + call, A extends Object>( U Function(A) create, [ UseCaseProviderConnector? connector, ]) { diff --git a/packages/clean_framework/lib/src/core/use_case/provider/use_case_provider.dart b/packages/clean_framework/lib/src/core/use_case/provider/use_case_provider.dart index 8667b2a7..85d8ea56 100644 --- a/packages/clean_framework/lib/src/core/use_case/provider/use_case_provider.dart +++ b/packages/clean_framework/lib/src/core/use_case/provider/use_case_provider.dart @@ -12,7 +12,8 @@ part 'base.dart'; part 'bridge.dart'; part 'family.dart'; -class UseCaseProvider> extends UseCaseProviderBase { +class UseCaseProvider> + extends UseCaseProviderBase { UseCaseProvider( U Function() create, [ UseCaseProviderConnector? connector, diff --git a/packages/clean_framework/lib/src/core/use_case/use_case.dart b/packages/clean_framework/lib/src/core/use_case/use_case.dart index b5c0cb32..cad2893f 100644 --- a/packages/clean_framework/lib/src/core/use_case/use_case.dart +++ b/packages/clean_framework/lib/src/core/use_case/use_case.dart @@ -14,7 +14,8 @@ export 'use_case_helpers.dart'; typedef InputCallback = E Function(I); -abstract class UseCase extends StateNotifier with UseCaseDebounceMixin { +abstract class UseCase extends StateNotifier + with UseCaseDebounceMixin { UseCase({ required E entity, List> transformers = const [], @@ -74,7 +75,8 @@ abstract class UseCase extends StateNotifier with UseCaseDe M getDomainModel() => transformToDomainModel(entity); @visibleForTesting - M transformToDomainModel(E entity) => _domainModelFilters(entity); + M transformToDomainModel(E entity) => + _domainModelFilters(entity); void setInput(I input) { entity = _domainInputFilters(entity, input); @@ -88,7 +90,8 @@ abstract class UseCase extends StateNotifier with UseCaseDe @visibleForTesting @protected - FutureOr> getInternalInput( + FutureOr> + getInternalInput( DomainModel domainModel, ) { return _requestSubscriptions.getDomainInput(domainModel); @@ -105,11 +108,13 @@ abstract class UseCase extends StateNotifier with UseCaseDe entity = input.fold( (failure) { - CleanFrameworkObserver.instance.onFailureInput(this, domainModel, failure); + CleanFrameworkObserver.instance + .onFailureInput(this, domainModel, failure); return onFailure(failure); }, (success) { - CleanFrameworkObserver.instance.onSuccessInput(this, domainModel, success); + CleanFrameworkObserver.instance + .onSuccessInput(this, domainModel, success); return onSuccess(success); }, ); @@ -124,11 +129,13 @@ abstract class UseCase extends StateNotifier with UseCaseDe return input.fold( (failure) { - CleanFrameworkObserver.instance.onFailureInput(this, domainModel, failure); + CleanFrameworkObserver.instance + .onFailureInput(this, domainModel, failure); return FailureUseCaseInput(failure); }, (success) { - CleanFrameworkObserver.instance.onSuccessInput(this, domainModel, success); + CleanFrameworkObserver.instance + .onSuccessInput(this, domainModel, success); return SuccessUseCaseInput(success); }, ); diff --git a/packages/clean_framework/lib/src/open_feature/src/evaluation_context/evaluation_context.dart b/packages/clean_framework/lib/src/open_feature/src/evaluation_context/evaluation_context.dart index 977f2f32..28e041f3 100644 --- a/packages/clean_framework/lib/src/open_feature/src/evaluation_context/evaluation_context.dart +++ b/packages/clean_framework/lib/src/open_feature/src/evaluation_context/evaluation_context.dart @@ -33,7 +33,6 @@ class EvaluationContext extends MapMixin { // coverage:ignore-end EvaluationContext merge(EvaluationContext? other) { - // ignore: avoid_returning_this if (other == null) return this; return EvaluationContext( diff --git a/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart b/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart index 76e9252d..6e8e85ba 100644 --- a/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart +++ b/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart @@ -4,7 +4,8 @@ import 'package:clean_framework/src/providers/overridable_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/misc.dart'; -class BridgeGatewayProvider implements OverridableProvider { +class BridgeGatewayProvider + implements OverridableProvider { BridgeGatewayProvider(this.create) : _provider = Provider(create); final Provider _provider; final G Function(Ref) create; diff --git a/packages/clean_framework/lib/src/providers/external_interface.dart b/packages/clean_framework/lib/src/providers/external_interface.dart index 7907bed6..1c9d9a01 100644 --- a/packages/clean_framework/lib/src/providers/external_interface.dart +++ b/packages/clean_framework/lib/src/providers/external_interface.dart @@ -23,7 +23,8 @@ abstract class ExternalInterface { } } - final StreamController<_RequestCompleter> _requestController = StreamController.broadcast(); + final StreamController<_RequestCompleter> _requestController = + StreamController.broadcast(); void handleRequest(); @@ -82,7 +83,8 @@ typedef GatewayConnection = G Function(); typedef ResponseSender = void Function(S response); -typedef RequestHandler = FutureOr Function( +typedef RequestHandler + = FutureOr Function( E request, ResponseSender send, ); @@ -104,7 +106,8 @@ class _RequestCompleter { } } -class _StreamRequestCompleter extends _RequestCompleter { +class _StreamRequestCompleter + extends _RequestCompleter { _StreamRequestCompleter(super.request, this.emitSuccess); final void Function(S) emitSuccess; diff --git a/packages/clean_framework/lib/src/providers/external_interface_provider.dart b/packages/clean_framework/lib/src/providers/external_interface_provider.dart index ecf7e6e5..b3e6f882 100644 --- a/packages/clean_framework/lib/src/providers/external_interface_provider.dart +++ b/packages/clean_framework/lib/src/providers/external_interface_provider.dart @@ -3,7 +3,8 @@ import 'package:clean_framework/src/providers/overridable_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/misc.dart'; -class ExternalInterfaceProvider implements OverridableProvider { +class ExternalInterfaceProvider + implements OverridableProvider { ExternalInterfaceProvider(this.create) : _provider = Provider(create); final Provider _provider; final I Function(Ref) create; diff --git a/packages/clean_framework/lib/src/providers/use_case_provider.dart b/packages/clean_framework/lib/src/providers/use_case_provider.dart index 2e8bc64c..ccf753cc 100644 --- a/packages/clean_framework/lib/src/providers/use_case_provider.dart +++ b/packages/clean_framework/lib/src/providers/use_case_provider.dart @@ -5,8 +5,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/legacy.dart'; import 'package:flutter_riverpod/misc.dart'; -class UseCaseProvider> implements OverridableProvider { - UseCaseProvider(this.create) : _provider = StateNotifierProvider(create); +class UseCaseProvider> + implements OverridableProvider { + UseCaseProvider(this.create) + : _provider = StateNotifierProvider(create); final StateNotifierProvider _provider; final U Function(Ref) create; diff --git a/packages/clean_framework/lib/src/widgets/src/feature_scope.dart b/packages/clean_framework/lib/src/widgets/src/feature_scope.dart index 37cec592..04b358ea 100644 --- a/packages/clean_framework/lib/src/widgets/src/feature_scope.dart +++ b/packages/clean_framework/lib/src/widgets/src/feature_scope.dart @@ -19,7 +19,8 @@ class FeatureScope extends StatefulWidget { // ignore: library_private_types_in_public_api static _InheritedFeatureScope of(BuildContext context) { - final result = context.dependOnInheritedWidgetOfExactType<_InheritedFeatureScope>(); + final result = + context.dependOnInheritedWidgetOfExactType<_InheritedFeatureScope>(); assert(result != null, 'No _InheritedFeatureScope found in context'); return result!; } @@ -28,7 +29,8 @@ class FeatureScope extends StatefulWidget { State> createState() => _FeatureScopeState(); } -class _FeatureScopeState extends State> { +class _FeatureScopeState + extends State> { late final FeatureClient _client; @override diff --git a/packages/clean_framework/test/core/app_provider_scope_test.dart b/packages/clean_framework/test/core/app_provider_scope_test.dart index 3ce2ee19..99bb2c05 100644 --- a/packages/clean_framework/test/core/app_provider_scope_test.dart +++ b/packages/clean_framework/test/core/app_provider_scope_test.dart @@ -52,7 +52,8 @@ void main() { }); } -final ExternalInterfaceProvider _testExternalInterfaceProvider = ExternalInterfaceProvider( +final ExternalInterfaceProvider + _testExternalInterfaceProvider = ExternalInterfaceProvider( TestExternalInterface.new, gateways: [_testGatewayProvider], ); @@ -62,9 +63,11 @@ final GatewayProvider _testGatewayProvider = GatewayProvider( useCases: [_testUseCaseProvider], ); -final UseCaseProvider _testUseCaseProvider = UseCaseProvider(TestUseCase.new); +final UseCaseProvider _testUseCaseProvider = + UseCaseProvider(TestUseCase.new); -class TestExternalInterface extends ExternalInterface { +class TestExternalInterface + extends ExternalInterface { @override void handleRequest() { on( @@ -80,7 +83,8 @@ class TestExternalInterface extends ExternalInterface { +class TestGateway extends Gateway { @override TestRequest buildRequest(TestDomainToGatewayModel output) { return TestRequest(ping: output.ping); diff --git a/packages/clean_framework/test/core/external_interface/external_interface_test.dart b/packages/clean_framework/test/core/external_interface/external_interface_test.dart index 9d018c9d..7c5e0c39 100644 --- a/packages/clean_framework/test/core/external_interface/external_interface_test.dart +++ b/packages/clean_framework/test/core/external_interface/external_interface_test.dart @@ -107,9 +107,11 @@ class _Dependency { final String value; } -final DependencyProvider<_Dependency> _testDependencyProvider = DependencyProvider((_) => _Dependency('test')); +final DependencyProvider<_Dependency> _testDependencyProvider = + DependencyProvider((_) => _Dependency('test')); -final ExternalInterfaceProvider _testExternalInterfaceProvider = ExternalInterfaceProvider( +final ExternalInterfaceProvider + _testExternalInterfaceProvider = ExternalInterfaceProvider( () => TestExternalInterface(delegate: TextExternalInterfaceDelegate()), gateways: [ _testGatewayProvider, @@ -117,15 +119,18 @@ final ExternalInterfaceProvider _testExternalInterfacePro ], ); -final GatewayProvider _testGatewayProvider = GatewayProvider(TestGateway.new); +final GatewayProvider _testGatewayProvider = + GatewayProvider(TestGateway.new); -final GatewayProvider _testWatcherGatewayProvider = GatewayProvider( +final GatewayProvider _testWatcherGatewayProvider = + GatewayProvider( TestWatcherGateway.new, ); class NewTestExternalInterface extends TestExternalInterface {} -class TestExternalInterface extends ExternalInterface { +class TestExternalInterface + extends ExternalInterface { TestExternalInterface({super.delegate}); @override @@ -169,7 +174,8 @@ class TestRequest extends Request { final bool success; } -class TestGateway extends Gateway { +class TestGateway extends Gateway { @override TestRequest buildRequest(TestDomainToGatewayModel output) { return TestRequest(success: output.success); @@ -186,8 +192,8 @@ class TestGateway extends Gateway { +class TestWatcherGateway extends WatcherGateway { @override TestRequest buildRequest(TestDomainToGatewayModel output) { return TestRequest(success: output.success); diff --git a/packages/clean_framework/test/core/gateway/gateway_provider_test.dart b/packages/clean_framework/test/core/gateway/gateway_provider_test.dart index 36f8fd13..dc28f198 100644 --- a/packages/clean_framework/test/core/gateway/gateway_provider_test.dart +++ b/packages/clean_framework/test/core/gateway/gateway_provider_test.dart @@ -19,7 +19,8 @@ void main() { }); } -final GatewayProvider _gatewayProvider = GatewayProvider(TestGateway.new); +final GatewayProvider _gatewayProvider = + GatewayProvider(TestGateway.new); class NewTestGateway extends TestGateway {} diff --git a/packages/clean_framework/test/core/gateway/gateway_test.dart b/packages/clean_framework/test/core/gateway/gateway_test.dart index 9292f4c8..d0d86385 100644 --- a/packages/clean_framework/test/core/gateway/gateway_test.dart +++ b/packages/clean_framework/test/core/gateway/gateway_test.dart @@ -137,7 +137,8 @@ void main() { await subscription.cancel(); }); - test('yielding response will update use case created using family', () async { + test('yielding response will update use case created using family', + () async { final container = ProviderContainer(); final gateway = _testGatewayProvider.read(container); @@ -169,14 +170,17 @@ void main() { }); } -final GatewayProvider _testGatewayProvider = GatewayProvider( +final GatewayProvider _testGatewayProvider = + GatewayProvider( TestWatcherGateway.new, useCases: [_testUseCaseProvider], families: [_testUseCaseProviderFamily], ); -final UseCaseProvider _testUseCaseProvider = UseCaseProvider(TestUseCase.new); -final UseCaseProviderFamily _testUseCaseProviderFamily = +final UseCaseProvider _testUseCaseProvider = + UseCaseProvider(TestUseCase.new); +final UseCaseProviderFamily + _testUseCaseProviderFamily = UseCaseProvider.family( (_) => TestUseCase(), ); @@ -207,7 +211,8 @@ class TestUseCase extends UseCase { ); } -class TestGateway extends Gateway { +class TestGateway extends Gateway { @override TestRequest buildRequest(TestDomainToGatewayModel output) { return TestRequest(output.name); @@ -224,8 +229,8 @@ class TestGateway extends Gateway { +class TestWatcherGateway extends WatcherGateway { @override TestRequest buildRequest(TestDomainToGatewayModel output) { return TestRequest(output.name); diff --git a/packages/clean_framework/test/core/use_case/use_case_provider_test.dart b/packages/clean_framework/test/core/use_case/use_case_provider_test.dart index b5c1c8d4..6fc6be34 100644 --- a/packages/clean_framework/test/core/use_case/use_case_provider_test.dart +++ b/packages/clean_framework/test/core/use_case/use_case_provider_test.dart @@ -17,7 +17,8 @@ final _testUseCaseProvider = UseCaseProvider( }, ); -final AutoDisposeUseCaseProvider _testUseCaseProvider2 = +final AutoDisposeUseCaseProvider + _testUseCaseProvider2 = UseCaseProvider.autoDispose( TestUseCase.new, (bridge) { @@ -37,13 +38,15 @@ final _testUseCaseProvider3 = UseCaseProvider( TestUseCase.new, ); -final AutoDisposeUseCaseProviderFamily _testUseCaseAutoDisposeFamily = +final AutoDisposeUseCaseProviderFamily + _testUseCaseAutoDisposeFamily = UseCaseProvider.autoDispose.family( (name) => TestUseCase(name: name), (_) {}, ); -final UseCaseProviderFamily _testUseCaseFamily = +final UseCaseProviderFamily + _testUseCaseFamily = UseCaseProvider.family( (name) => TestUseCase(name: name), (_) {}, @@ -187,7 +190,9 @@ void main() { return ElevatedButton( onPressed: () { - _testUseCaseProvider.getUseCaseFromContext(context).set(foo: 'bar'); + _testUseCaseProvider + .getUseCaseFromContext(context) + .set(foo: 'bar'); }, child: const Text('CLICK'), ); @@ -239,8 +244,10 @@ void main() { test('use case creation', () { final container = ProviderContainer(); - final pikachuUseCase = _testUseCaseAutoDisposeFamily('Pikachu').read(container); - final bulbasaurUseCase = _testUseCaseAutoDisposeFamily('Bulbasaur').read(container); + final pikachuUseCase = + _testUseCaseAutoDisposeFamily('Pikachu').read(container); + final bulbasaurUseCase = + _testUseCaseAutoDisposeFamily('Bulbasaur').read(container); expect(pikachuUseCase, isA()); expect(bulbasaurUseCase, isA()); diff --git a/packages/clean_framework/test/presentation/presenter/presenter_test.dart b/packages/clean_framework/test/presentation/presenter/presenter_test.dart index d3c470f5..6fe821e1 100644 --- a/packages/clean_framework/test/presentation/presenter/presenter_test.dart +++ b/packages/clean_framework/test/presentation/presenter/presenter_test.dart @@ -55,7 +55,8 @@ void main() { ); }); - testWidgets('didUpdatePresenter is triggered if presenter property changes', (tester) async { + testWidgets('didUpdatePresenter is triggered if presenter property changes', + (tester) async { final messageNotifier = ValueNotifier(''); await tester.pumpWidget( @@ -88,14 +89,17 @@ void main() { }); } -final UseCaseProvider _testUseCaseProvider = UseCaseProvider(TestUseCase.new); +final UseCaseProvider _testUseCaseProvider = + UseCaseProvider(TestUseCase.new); -final UseCaseProviderFamily _testUseCaseProviderFamily = +final UseCaseProviderFamily + _testUseCaseProviderFamily = UseCaseProvider.family( (name) => TestUseCase(name: name), ); -class TestPresenter extends Presenter { +class TestPresenter + extends Presenter { TestPresenter({ super.key, WidgetBuilder? builder, diff --git a/packages/clean_framework/test/providers/external_interface_integration_test.dart b/packages/clean_framework/test/providers/external_interface_integration_test.dart index 7d530327..97ad9de2 100644 --- a/packages/clean_framework/test/providers/external_interface_integration_test.dart +++ b/packages/clean_framework/test/providers/external_interface_integration_test.dart @@ -80,7 +80,8 @@ void main() { } class TestInterface extends ExternalInterface { - TestInterface(GatewayProvider provider) : super([() => provider.getGateway(context)]); + TestInterface(GatewayProvider provider) + : super([() => provider.getGateway(context)]); @override void handleRequest() { @@ -119,11 +120,14 @@ class TestInterface extends ExternalInterface { } } -class TestDirectGateway extends Gateway { - TestDirectGateway(UseCaseProvider provider) : super(provider: provider, context: context); +class TestDirectGateway extends Gateway { + TestDirectGateway(UseCaseProvider provider) + : super(provider: provider, context: context); @override - TestRequest buildRequest(TestDirectDomainModel output) => FutureTestRequest(output.id); + TestRequest buildRequest(TestDirectDomainModel output) => + FutureTestRequest(output.id); @override FailureDomainInput onFailure(FailureResponse failureResponse) { @@ -136,8 +140,10 @@ class TestDirectGateway extends Gateway { - TestGatewayWithFailure(UseCaseProvider provider) : super(provider: provider, context: context); +class TestGatewayWithFailure extends Gateway { + TestGatewayWithFailure(UseCaseProvider provider) + : super(provider: provider, context: context); @override FailedRequest buildRequest(TestDirectDomainModel output) { @@ -155,12 +161,14 @@ class TestGatewayWithFailure extends Gateway { - TestWatcherGatewayWithFailure(UseCaseProvider provider) : super(provider: provider, context: context); +class TestWatcherGatewayWithFailure extends WatcherGateway< + TestDirectDomainModel, FailedRequest, TestResponse, TestSuccessInput> { + TestWatcherGatewayWithFailure(UseCaseProvider provider) + : super(provider: provider, context: context); @override - FailedRequest buildRequest(TestDirectDomainModel output) => FailedRequest(output.id); + FailedRequest buildRequest(TestDirectDomainModel output) => + FailedRequest(output.id); @override TestSuccessInput onSuccess(TestResponse response) { @@ -168,12 +176,14 @@ class TestWatcherGatewayWithFailure } } -class TestYieldGateway - extends WatcherGateway { - TestYieldGateway(UseCaseProvider provider) : super(provider: provider, context: context); +class TestYieldGateway extends WatcherGateway { + TestYieldGateway(UseCaseProvider provider) + : super(provider: provider, context: context); @override - TestRequest buildRequest(TestSubscriptionDomainModel output) => StreamTestRequest(output.id); + TestRequest buildRequest(TestSubscriptionDomainModel output) => + StreamTestRequest(output.id); @override TestSuccessInput onSuccess(TestResponse response) { diff --git a/packages/clean_framework/test/providers/presenter_widget_test.dart b/packages/clean_framework/test/providers/presenter_widget_test.dart index ed06b3cf..a9612623 100644 --- a/packages/clean_framework/test/providers/presenter_widget_test.dart +++ b/packages/clean_framework/test/providers/presenter_widget_test.dart @@ -5,7 +5,8 @@ import 'package:clean_framework_test/clean_framework_test_legacy.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -final UseCaseProvider provider = UseCaseProvider((_) => TestUseCase()); +final UseCaseProvider provider = + UseCaseProvider((_) => TestUseCase()); void main() { testWidgets('Presenter initial load', (tester) async { final presenter = TestPresenter( @@ -14,7 +15,8 @@ void main() { }, ); - await ProviderTester().pumpWidget(tester, MaterialApp(home: presenter)); + await ProviderTester() + .pumpWidget(tester, MaterialApp(home: presenter)); expect(find.byKey(const Key('foo')), findsOneWidget); expect(find.text('INITIAL'), findsOneWidget); @@ -43,7 +45,8 @@ void main() { builder: (context, snapshot) { return TestPresenter( count: snapshot.data, - builder: (viewModel) => Text(viewModel.foo, key: const Key('foo')), + builder: (viewModel) => + Text(viewModel.foo, key: const Key('foo')), ); }, ), @@ -65,8 +68,10 @@ void main() { ); } -class TestPresenter extends Presenter { - TestPresenter({required super.builder, super.key, this.count}) : super(provider: provider); +class TestPresenter + extends Presenter { + TestPresenter({required super.builder, super.key, this.count}) + : super(provider: provider); final int? count; @@ -80,7 +85,8 @@ class TestPresenter extends Presenter TestViewModel.fromOutput(output); + TestViewModel createViewModel(_, TestDomainModel output) => + TestViewModel.fromOutput(output); @override void onOutputUpdate(BuildContext context, TestDomainModel output) { @@ -130,7 +136,8 @@ class TestDomainModel extends DomainModel { class TestViewModel extends ViewModel { const TestViewModel(this.foo); - TestViewModel.fromOutput(TestDomainModel output) : foo = output.foo.toUpperCase(); + TestViewModel.fromOutput(TestDomainModel output) + : foo = output.foo.toUpperCase(); final String foo; @override diff --git a/packages/clean_framework_graphql/test/graphql_service_test.dart b/packages/clean_framework_graphql/test/graphql_service_test.dart index 69d779ff..9ecb3907 100644 --- a/packages/clean_framework_graphql/test/graphql_service_test.dart +++ b/packages/clean_framework_graphql/test/graphql_service_test.dart @@ -367,7 +367,7 @@ class QueryOptionsMock extends Mock implements QueryOptions {} class MutationOptionsMock extends Mock implements MutationOptions {} -final successResult = QueryResult.internal( +final QueryResult> successResult = QueryResult.internal( source: QueryResultSource.network, data: {'foo': 'bar'}, parserFn: (data) => data, diff --git a/packages/clean_framework_http/example/lib/features/home/presentation/home_presenter.dart b/packages/clean_framework_http/example/lib/features/home/presentation/home_presenter.dart index 7a351d04..27693654 100644 --- a/packages/clean_framework_http/example/lib/features/home/presentation/home_presenter.dart +++ b/packages/clean_framework_http/example/lib/features/home/presentation/home_presenter.dart @@ -7,7 +7,8 @@ import 'package:clean_framework_http_example/features/home/presentation/home_vie import 'package:clean_framework_http_example/providers.dart'; import 'package:flutter/material.dart'; -class HomePresenter extends Presenter { +class HomePresenter + extends Presenter { HomePresenter({ required super.builder, super.key, diff --git a/packages/clean_framework_http/example/lib/providers/external_interface_providers.dart b/packages/clean_framework_http/example/lib/providers/external_interface_providers.dart index 547fe8db..3a5e695d 100644 --- a/packages/clean_framework_http/example/lib/providers/external_interface_providers.dart +++ b/packages/clean_framework_http/example/lib/providers/external_interface_providers.dart @@ -2,7 +2,8 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_http_example/core/external_interface/pokemon_external_interface.dart'; import 'package:clean_framework_http_example/providers/gateway_providers.dart'; -final pokemonExternalInterfaceProvider = ExternalInterfaceProvider( +final ExternalInterfaceProvider + pokemonExternalInterfaceProvider = ExternalInterfaceProvider( PokemonExternalInterface.new, gateways: [pokemonGatewayProvider], ); diff --git a/packages/clean_framework_http/example/lib/providers/gateway_providers.dart b/packages/clean_framework_http/example/lib/providers/gateway_providers.dart index b9e5f76e..3a9a4b2b 100644 --- a/packages/clean_framework_http/example/lib/providers/gateway_providers.dart +++ b/packages/clean_framework_http/example/lib/providers/gateway_providers.dart @@ -2,7 +2,7 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_http_example/features/home/adapter/pokemon_gateway.dart'; import 'package:clean_framework_http_example/providers.dart'; -final pokemonGatewayProvider = GatewayProvider( +final GatewayProvider pokemonGatewayProvider = GatewayProvider( PokemonGateway.new, useCases: [homeUseCaseProvider], ); diff --git a/packages/clean_framework_http/example/lib/providers/use_case_providers.dart b/packages/clean_framework_http/example/lib/providers/use_case_providers.dart index 4736934d..179ebeff 100644 --- a/packages/clean_framework_http/example/lib/providers/use_case_providers.dart +++ b/packages/clean_framework_http/example/lib/providers/use_case_providers.dart @@ -1,4 +1,5 @@ import 'package:clean_framework/clean_framework.dart'; import 'package:clean_framework_http_example/features/home/domain/home_use_case.dart'; -final homeUseCaseProvider = UseCaseProvider(HomeUseCase.new); +final UseCaseProvider homeUseCaseProvider = + UseCaseProvider(HomeUseCase.new); diff --git a/packages/clean_framework_http/lib/src/http_external_interface.dart b/packages/clean_framework_http/lib/src/http_external_interface.dart index 1ab665ab..4a8c896f 100644 --- a/packages/clean_framework_http/lib/src/http_external_interface.dart +++ b/packages/clean_framework_http/lib/src/http_external_interface.dart @@ -10,7 +10,8 @@ import 'package:dio_cache_interceptor/dio_cache_interceptor.dart'; typedef HttpCancelToken = CancelToken; -class HttpExternalInterface extends ExternalInterface { +class HttpExternalInterface + extends ExternalInterface { HttpExternalInterface({ HttpExternalInterfaceDelegate? delegate, }) : super(delegate: delegate ?? _DefaultHttpExternalInterfaceDelegate()); @@ -173,7 +174,8 @@ enum HttpResponseType { final ResponseType original; } -class _DefaultHttpExternalInterfaceDelegate extends HttpExternalInterfaceDelegate { +class _DefaultHttpExternalInterfaceDelegate + extends HttpExternalInterfaceDelegate { @override Map? buildHeaders() => null; diff --git a/packages/clean_framework_test/lib/src/presenter_test.dart b/packages/clean_framework_test/lib/src/presenter_test.dart index 50000d46..2bb2df23 100644 --- a/packages/clean_framework_test/lib/src/presenter_test.dart +++ b/packages/clean_framework_test/lib/src/presenter_test.dart @@ -12,7 +12,8 @@ import 'package:flutter_test/flutter_test.dart' as ft; import 'package:meta/meta.dart'; @isTest -void presenterTest( +void presenterTest( String description, { required Presenter Function(WidgetBuilder builder) create, List overrides = const [], @@ -75,7 +76,8 @@ void presenterTest( +void presenterCallbackTest( String description, { required U useCase, required Presenter Function(WidgetBuilder builder) create, @@ -107,7 +109,8 @@ class _TestBuilder extends ConsumerStatefulWidget { ConsumerState<_TestBuilder> createState() => _TestBuilderState(); } -class _TestBuilderState extends ConsumerState<_TestBuilder> { +class _TestBuilderState + extends ConsumerState<_TestBuilder> { @override void initState() { super.initState(); diff --git a/packages/clean_framework_test/lib/src/test_helpers.dart b/packages/clean_framework_test/lib/src/test_helpers.dart index 6fe1318a..34df539a 100644 --- a/packages/clean_framework_test/lib/src/test_helpers.dart +++ b/packages/clean_framework_test/lib/src/test_helpers.dart @@ -1,5 +1,3 @@ -//ignore_for_file: INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER - import 'dart:async'; import 'package:clean_framework/clean_framework_legacy.dart'; From 8a21e7a8d418a7a5579754fa6cf18e1d94b4656f Mon Sep 17 00:00:00 2001 From: Abhishek Khanal Date: Mon, 12 Jan 2026 21:49:06 +0545 Subject: [PATCH 6/8] fix: failing tests --- .../lib/src/core/external_interface/external_interface.dart | 2 +- .../clean_framework/lib/src/providers/external_interface.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/clean_framework/lib/src/core/external_interface/external_interface.dart b/packages/clean_framework/lib/src/core/external_interface/external_interface.dart index 4cdac0f8..b102c3c5 100644 --- a/packages/clean_framework/lib/src/core/external_interface/external_interface.dart +++ b/packages/clean_framework/lib/src/core/external_interface/external_interface.dart @@ -111,7 +111,7 @@ abstract class ExternalInterface { } else { await handler(request, e.complete); } - } on Exception catch (error, stackTrace) { + } on Object catch (error, stackTrace) { e.completeFailure(_onError(error, request, stackTrace)); } }, diff --git a/packages/clean_framework/lib/src/providers/external_interface.dart b/packages/clean_framework/lib/src/providers/external_interface.dart index 1c9d9a01..f8d32fb7 100644 --- a/packages/clean_framework/lib/src/providers/external_interface.dart +++ b/packages/clean_framework/lib/src/providers/external_interface.dart @@ -57,7 +57,7 @@ abstract class ExternalInterface { } else { await handler(request, e.complete); } - } on Exception catch (error, stackTrace) { + } on Object catch (error, stackTrace) { e.completeFailure(_onError(error, stackTrace, request)); } }, From 25744578ae91fa0c2c87dd7649b4196fc6da702e Mon Sep 17 00:00:00 2001 From: Abhishek Khanal Date: Tue, 13 Jan 2026 11:46:06 +0545 Subject: [PATCH 7/8] chore: analyzer issues resolved to an extent --- analysis_options.yaml | 3 ++- .../lib/src/core/use_case/helpers/use_case_transformer.dart | 4 ++-- .../lib/src/core/use_case/provider/family.dart | 1 - 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 966aca12..3dc641e2 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -5,4 +5,5 @@ linter: one_member_abstracts: false only_throw_errors: false public_member_api_docs: false - lines_longer_than_80_chars: false \ No newline at end of file + document_ignores: false + unreachable_from_main: false \ No newline at end of file diff --git a/packages/clean_framework/lib/src/core/use_case/helpers/use_case_transformer.dart b/packages/clean_framework/lib/src/core/use_case/helpers/use_case_transformer.dart index d726dd8d..f0de848f 100644 --- a/packages/clean_framework/lib/src/core/use_case/helpers/use_case_transformer.dart +++ b/packages/clean_framework/lib/src/core/use_case/helpers/use_case_transformer.dart @@ -54,7 +54,7 @@ abstract class InputTransformer class _DomainModelFilter extends DomainModelTransformer { - const _DomainModelFilter(super.transformer) : super._(); + const _DomainModelFilter(super._transformer) : super._(); @override M transform(E entity) => _transformer!(entity); @@ -62,7 +62,7 @@ class _DomainModelFilter class _DomainInputFilter extends DomainInputTransformer { - const _DomainInputFilter(super.transformer) : super._(); + const _DomainInputFilter(super._transformer) : super._(); @override E transform(E entity, I input) => _transformer!(entity, input); diff --git a/packages/clean_framework/lib/src/core/use_case/provider/family.dart b/packages/clean_framework/lib/src/core/use_case/provider/family.dart index 0120f726..773e8645 100644 --- a/packages/clean_framework/lib/src/core/use_case/provider/family.dart +++ b/packages/clean_framework/lib/src/core/use_case/provider/family.dart @@ -2,7 +2,6 @@ part of 'use_case_provider.dart'; abstract class UseCaseProviderFamilyBase, A extends Object> { - // ignore: close_sinks final StreamController<(Refreshable, A)> _notifierController = StreamController.broadcast(); From fe4737dbdafd5400b1b68a99e34d254dfbaa659c Mon Sep 17 00:00:00 2001 From: Abhishek Khanal Date: Tue, 13 Jan 2026 11:55:10 +0545 Subject: [PATCH 8/8] fix: theme example clean framework version --- packages/clean_framework/theme_example/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/clean_framework/theme_example/pubspec.yaml b/packages/clean_framework/theme_example/pubspec.yaml index fa11eba2..442579ab 100644 --- a/packages/clean_framework/theme_example/pubspec.yaml +++ b/packages/clean_framework/theme_example/pubspec.yaml @@ -28,7 +28,7 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: - clean_framework: ^5.0.0 + clean_framework: ^4.1.3 clean_framework_router: ^0.5.13 flutter: