diff --git a/analysis_options.yaml b/analysis_options.yaml index 78e281bb..3dc641e2 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -4,4 +4,6 @@ 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 + document_ignores: false + unreachable_from_main: false \ No newline at end of file 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/.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/form/presentation/form_presenter.dart b/packages/clean_framework/example/lib/features/form/presentation/form_presenter.dart index 68ca2ad1..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 @@ -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'; @@ -14,7 +16,7 @@ class FormPresenter @override void onLayoutReady(BuildContext context, FormUseCase useCase) { - useCase.fetchAndPrefillData(); + unawaited(useCase.fetchAndPrefillData()); } @override @@ -37,34 +39,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..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 @@ -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'; @@ -15,7 +17,7 @@ class HomePresenter @override void onLayoutReady(BuildContext context, HomeUseCase useCase) { - useCase.fetchPokemons(); + unawaited(useCase.fetchPokemons()); } @override 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..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 @@ -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; 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..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 @@ -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'; @@ -16,7 +18,7 @@ class ProfilePresenter extends Presenter + 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..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 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..3a6c4dce 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,8 @@ final homeUseCaseProvider = }, ); -final 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 8de25ef2..acba6bb2 100644 --- a/packages/clean_framework/example/lib/widgets/spotlight.dart +++ b/packages/clean_framework/example/lib/widgets/spotlight.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:math'; import 'package:clean_framework_example_rest/widgets/app_scope.dart'; @@ -36,7 +37,7 @@ class _SpotlightState extends State { void initState() { super.initState(); SchedulerBinding.instance.addPostFrameCallback((_) { - _loadFileFromCache(); + unawaited(_loadFileFromCache()); }); } 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..0129c61f 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 @@ -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/pubspec.yaml b/packages/clean_framework/example/pubspec.yaml index c2e5458f..f0556fcd 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: ^4.1.3 + 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..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 @@ -119,8 +119,8 @@ void main() { when(() => useCase.fetchPokemons(isRefresh: true)) .thenAnswer((_) async {}); }, - verify: (useCase, vm) { - vm.onRefresh(); + verify: (useCase, vm) async { + await vm.onRefresh(); verify(() => useCase.fetchPokemons(isRefresh: true)); }, 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..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 @@ -14,8 +14,8 @@ void main() { useCaseTest( 'fetches pokemon profile', provider: profileUseCaseFamily('pikachu'), - execute: (useCase) { - useCase + execute: (useCase) async { + final profileUseCase = useCase ..subscribe( (output) { @@ -55,8 +55,8 @@ void main() { ), ); }, - ) - ..fetchPokemonProfile(); + ); + await profileUseCase.fetchPokemonProfile(); }, expect: () => [ const ProfileDomainToUIModel( @@ -86,8 +86,8 @@ void main() { useCaseTest( 'fetches pokemon profile; description failure', provider: profileUseCaseFamily('PIKACHU'), - execute: (useCase) { - useCase + execute: (useCase) async { + final profileUseCase = useCase ..subscribe( (output) { @@ -118,8 +118,8 @@ void main() { ), ); }, - ) - ..fetchPokemonProfile(); + ); + await profileUseCase.fetchPokemonProfile(); }, expect: () => [ const ProfileDomainToUIModel( @@ -142,8 +142,8 @@ void main() { useCaseTest( 'fetches pokemon profile; profile/stat failure', provider: profileUseCaseFamily('PIKACHU'), - execute: (useCase) { - useCase + execute: (useCase) async { + final profileUseCase = useCase ..subscribe( (output) { @@ -168,8 +168,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/features/profile/presentation/profile_presenter_test.dart b/packages/clean_framework/example/test/features/profile/presentation/profile_presenter_test.dart index 15fcdc74..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 @@ -55,5 +55,5 @@ class ProfileUseCaseFake extends ProfileUseCase { ProfileUseCaseFake(super.name); @override - void fetchPokemonProfile() {} + Future fetchPokemonProfile() async {} } 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/example/test/helpers/test_cache_manager.dart b/packages/clean_framework/example/test/helpers/test_cache_manager.dart index 056d8b01..418af647 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,7 +57,7 @@ class TestCacheManager extends CacheManager { } class TestFileSystem extends FileSystem { - final directoryFuture = + final Future directoryFuture = MemoryFileSystem().systemTempDirectory.createTemp('test'); @override Future createFile(String name) async { 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/clean_framework.dart b/packages/clean_framework/lib/clean_framework.dart index 866fce7e..26bd205c 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'; 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..bafbc5a2 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'; 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..bc786cde 100644 --- a/packages/clean_framework/lib/src/core/dependency/dependency_provider.dart +++ b/packages/clean_framework/lib/src/core/dependency/dependency_provider.dart @@ -1,5 +1,6 @@ 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 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..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 @@ -21,7 +21,7 @@ abstract class ExternalInterface { @internal void attach( - ProviderRef ref, { + Ref ref, { required List providers, }) { _ref = DependencyRef(ref); @@ -111,7 +111,7 @@ abstract class ExternalInterface { } else { await handler(request, e.complete); } - } catch (error, stackTrace) { + } on Object catch (error, stackTrace) { e.completeFailure(_onError(error, request, stackTrace)); } }, @@ -139,7 +139,10 @@ typedef _RequestController typedef ResponseSender = void Function(S response); typedef RequestHandler - = FutureOr Function(E request, ResponseSender send); + = FutureOr Function( + E request, + ResponseSender send, +); class RequestCompleter { RequestCompleter(this.request) : _completer = Completer(); 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..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 @@ -2,6 +2,7 @@ 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 diff --git a/packages/clean_framework/lib/src/core/gateway/gateway.dart b/packages/clean_framework/lib/src/core/gateway/gateway.dart index 28700f17..2573bd62 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 { 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); @@ -37,7 +38,6 @@ abstract class Gateway feeder, {Type? source}) { assert( _source == null, @@ -89,7 +89,9 @@ abstract class WatcherGateway< } typedef Responder - = FutureOr> Function(R request); + = 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..d96ca0b5 100644 --- a/packages/clean_framework/lib/src/core/gateway/gateway_provider.dart +++ b/packages/clean_framework/lib/src/core/gateway/gateway_provider.dart @@ -2,6 +2,7 @@ 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 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/auto_dispose.dart b/packages/clean_framework/lib/src/core/use_case/provider/auto_dispose.dart index b231028b..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 @@ -6,18 +6,19 @@ class 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 +31,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..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,13 +1,15 @@ part of 'use_case_provider.dart'; typedef UseCaseProviderConnector> = void - Function(UseCaseProviderBridge bridge); + 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..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(); @@ -19,6 +18,7 @@ class UseCaseProviderFamily, U Function(A) create, [ UseCaseProviderConnector? connector, ]) { + //ignore: invalid_use_of_internal_member _internal = StateNotifierProviderFamily( (ref, arg) { final useCase = create(arg); @@ -55,16 +55,17 @@ class 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)); 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..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 @@ -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'; 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..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 @@ -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'; 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 18b9a89a..6e8e85ba 100644 --- a/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart +++ b/packages/clean_framework/lib/src/providers/bridge_gateway_provider.dart @@ -2,6 +2,7 @@ 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 { diff --git a/packages/clean_framework/lib/src/providers/external_interface.dart b/packages/clean_framework/lib/src/providers/external_interface.dart index ba2bfc37..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); } - } catch (error, stackTrace) { + } on Object catch (error, stackTrace) { e.completeFailure(_onError(error, stackTrace, request)); } }, @@ -84,7 +84,10 @@ typedef GatewayConnection = G Function(); typedef ResponseSender = void Function(S response); typedef RequestHandler - = FutureOr Function(E request, ResponseSender send); + = FutureOr Function( + E request, + ResponseSender send, +); class _RequestCompleter { _RequestCompleter(this.request) : _completer = Completer(); 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..b3e6f882 100644 --- a/packages/clean_framework/lib/src/providers/external_interface_provider.dart +++ b/packages/clean_framework/lib/src/providers/external_interface_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 ExternalInterfaceProvider implements OverridableProvider { 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..ccf753cc 100644 --- a/packages/clean_framework/lib/src/providers/use_case_provider.dart +++ b/packages/clean_framework/lib/src/providers/use_case_provider.dart @@ -2,6 +2,8 @@ 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 { @@ -30,8 +32,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..04b358ea 100644 --- a/packages/clean_framework/lib/src/widgets/src/feature_scope.dart +++ b/packages/clean_framework/lib/src/widgets/src/feature_scope.dart @@ -41,7 +41,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..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: 4.1.2 +version: 4.1.3 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..99bb2c05 100644 --- a/packages/clean_framework/test/core/app_provider_scope_test.dart +++ b/packages/clean_framework/test/core/app_provider_scope_test.dart @@ -5,66 +5,66 @@ 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'); - } catch (e, s) { - FlutterError.demangleStackTrace(s); - expect(e, isA()); - } + expect(useCase.debugEntity.pong, 'Hello'); }, ); }); } -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 { 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..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 _testDependencyProvider = DependencyProvider((_) => _Dependency('test')); +final DependencyProvider<_Dependency> _testDependencyProvider = + DependencyProvider((_) => _Dependency('test')); -final _testExternalInterfaceProvider = ExternalInterfaceProvider( +final ExternalInterfaceProvider + _testExternalInterfaceProvider = ExternalInterfaceProvider( () => TestExternalInterface(delegate: TextExternalInterfaceDelegate()), gateways: [ _testGatewayProvider, @@ -117,9 +119,11 @@ final _testExternalInterfaceProvider = ExternalInterfaceProvider( ], ); -final _testGatewayProvider = GatewayProvider(TestGateway.new); +final GatewayProvider _testGatewayProvider = + GatewayProvider(TestGateway.new); -final _testWatcherGatewayProvider = GatewayProvider( +final GatewayProvider _testWatcherGatewayProvider = + GatewayProvider( TestWatcherGateway.new, ); 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..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(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..d0d86385 100644 --- a/packages/clean_framework/test/core/gateway/gateway_test.dart +++ b/packages/clean_framework/test/core/gateway/gateway_test.dart @@ -170,14 +170,17 @@ 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(), ); 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..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 _testUseCaseProvider2 = +final AutoDisposeUseCaseProvider + _testUseCaseProvider2 = UseCaseProvider.autoDispose( TestUseCase.new, (bridge) { @@ -37,13 +38,15 @@ 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), (_) {}, @@ -231,7 +234,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/presentation/presenter/presenter_test.dart b/packages/clean_framework/test/presentation/presenter/presenter_test.dart index 9a627470..6fe821e1 100644 --- a/packages/clean_framework/test/presentation/presenter/presenter_test.dart +++ b/packages/clean_framework/test/presentation/presenter/presenter_test.dart @@ -89,9 +89,11 @@ void main() { }); } -final _testUseCaseProvider = UseCaseProvider(TestUseCase.new); +final UseCaseProvider _testUseCaseProvider = + UseCaseProvider(TestUseCase.new); -final _testUseCaseProviderFamily = +final UseCaseProviderFamily + _testUseCaseProviderFamily = UseCaseProvider.family( (name) => TestUseCase(name: name), ); diff --git a/packages/clean_framework/test/providers/presenter_widget_test.dart b/packages/clean_framework/test/providers/presenter_widget_test.dart index 2806ac83..a9612623 100644 --- a/packages/clean_framework/test/providers/presenter_widget_test.dart +++ b/packages/clean_framework/test/providers/presenter_widget_test.dart @@ -1,9 +1,12 @@ +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( @@ -78,7 +81,7 @@ class TestPresenter @override void onLayoutReady(BuildContext context, TestUseCase useCase) { super.onLayoutReady(context, useCase); - useCase.fetch(); + unawaited(useCase.fetch()); } @override diff --git a/packages/clean_framework/theme_example/pubspec.yaml b/packages/clean_framework/theme_example/pubspec.yaml index a94336a7..442579ab 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: ^4.1.3 + 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/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/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..9ba3eb8d 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: ^4.1.3 - 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/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 9bcc2933..0d6fa57f 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: ^4.1.3 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_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/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/example/lib/features/home/presentation/home_presenter.dart b/packages/clean_framework_http/example/lib/features/home/presentation/home_presenter.dart index adf8b6b1..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 @@ -1,5 +1,6 @@ -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'; @@ -15,7 +16,7 @@ class HomePresenter @override void onLayoutReady(BuildContext context, HomeUseCase useCase) { - useCase.fetch(); + unawaited(useCase.fetch()); } @override 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/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..4a8c896f 100644 --- a/packages/clean_framework_http/lib/src/http_external_interface.dart +++ b/packages/clean_framework_http/lib/src/http_external_interface.dart @@ -166,7 +166,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); diff --git a/packages/clean_framework_http/pubspec.yaml b/packages/clean_framework_http/pubspec.yaml index c5540103..c59c10da 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: ^4.1.3 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/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 7936d177..4b509a6a 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: ^4.1.3 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/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/lib/src/presenter_test.dart b/packages/clean_framework_test/lib/src/presenter_test.dart index 19b06571..2bb2df23 100644 --- a/packages/clean_framework_test/lib/src/presenter_test.dart +++ b/packages/clean_framework_test/lib/src/presenter_test.dart @@ -7,6 +7,7 @@ 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'; 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'; 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..43faa7e1 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: ^4.1.3 + 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