From 8a614daf7aa1ef45171e2d46f420af698c249e56 Mon Sep 17 00:00:00 2001 From: Michael Bui <25263378+MaikuB@users.noreply.github.com> Date: Sat, 24 Aug 2024 17:25:41 +1000 Subject: [PATCH] [various] switched to use flutter_lints (#530) * switched to use flutter_lints * fixed linter issues in example app * added line length 80 linter rule --- analysis_options.yaml | 185 +----------------- flutter_appauth/example/lib/main.dart | 13 +- flutter_appauth/example/pubspec.yaml | 3 +- flutter_appauth/pubspec.yaml | 6 +- .../lib/src/authorization_token_request.dart | 31 +-- .../lib/src/errors.dart | 18 +- .../pubspec.yaml | 1 + pubspec.yaml | 1 + 8 files changed, 35 insertions(+), 223 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 74a6bb6e..c8f7d45a 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,186 +1,5 @@ -# Specify analysis options. -# -# Until there are meta linter rules, each desired lint must be explicitly enabled. -# See: https://github.com/dart-lang/linter/issues/288 -# -# For a list of lints, see: http://dart-lang.github.io/linter/lints/ -# See the configuration guide for more -# https://github.com/dart-lang/sdk/tree/master/pkg/analyzer#configuring-the-analyzer -# -# There are other similar analysis options files in the flutter repos, -# which should be kept in sync with this file: -# -# - analysis_options.yaml (this file) -# - packages/flutter/lib/analysis_options_user.yaml -# - https://github.com/flutter/plugins/blob/master/analysis_options.yaml -# - https://github.com/flutter/engine/blob/master/analysis_options.yaml -# -# This file contains the analysis options used by Flutter tools, such as IntelliJ, -# Android Studio, and the `flutter analyze` command. - -analyzer: - strong-mode: - implicit-dynamic: false - errors: - # treat missing required parameters as a warning (not a hint) - missing_required_param: warning - # treat missing returns as a warning (not a hint) - missing_return: warning - # allow having TODOs in the code - todo: ignore - # Ignore analyzer hints for updating pubspecs when using Future or - # Stream and not importing dart:async - # Please see https://github.com/flutter/flutter/pull/24528 for details. - exclude: - - "bin/cache/**" - # the following two are relative to the stocks example and the flutter package respectively - # see https://github.com/dart-lang/sdk/issues/28463 - - "lib/i18n/stock_messages_*.dart" - - "lib/src/http/**" +include: package:flutter_lints/flutter.yaml linter: rules: - # these rules are documented on and in the same order as - # the Dart Lint rules page to make maintenance easier - # https://github.com/dart-lang/linter/blob/master/example/all.yaml - - always_declare_return_types - - always_put_control_body_on_new_line - # - always_put_required_named_parameters_first # we prefer having parameters in the same order as fields https://github.com/flutter/flutter/issues/10219 - - always_specify_types - - annotate_overrides - # - avoid_annotating_with_dynamic # conflicts with always_specify_types - - avoid_bool_literals_in_conditional_expressions - # - avoid_catches_without_on_clauses # we do this commonly - # - avoid_catching_errors # we do this commonly - - avoid_classes_with_only_static_members - # - avoid_double_and_int_checks # only useful when targeting JS runtime - - avoid_empty_else - - avoid_field_initializers_in_const_classes - - avoid_function_literals_in_foreach_calls - # - avoid_implementing_value_types # not yet tested - - avoid_init_to_null - # - avoid_js_rounded_ints # only useful when targeting JS runtime - - avoid_null_checks_in_equality_operators - # - avoid_positional_boolean_parameters # not yet tested - # - avoid_private_typedef_functions # we prefer having typedef (discussion in https://github.com/flutter/flutter/pull/16356) - - avoid_relative_lib_imports - - avoid_renaming_method_parameters - - avoid_return_types_on_setters - # - avoid_returning_null # there are plenty of valid reasons to return null - # - avoid_returning_null_for_future # not yet tested - - avoid_returning_null_for_void - # - avoid_returning_this # there are plenty of valid reasons to return this - # - avoid_setters_without_getters # not yet tested - # - avoid_shadowing_type_parameters # not yet tested - # - avoid_single_cascade_in_expression_statements # not yet tested - - avoid_slow_async_io - - avoid_types_as_parameter_names - # - avoid_types_on_closure_parameters # conflicts with always_specify_types - - avoid_unused_constructor_parameters - - avoid_void_async - - await_only_futures - - camel_case_types - - cancel_subscriptions - # - cascade_invocations # not yet tested - # - close_sinks # not reliable enough - # - comment_references # blocked on https://github.com/flutter/flutter/issues/20765 - # - constant_identifier_names # needs an opt-out https://github.com/dart-lang/linter/issues/204 - - control_flow_in_finally - # - curly_braces_in_flow_control_structures # not yet tested - # - diagnostic_describe_all_properties # not yet tested - - directives_ordering - - empty_catches - - empty_constructor_bodies - - empty_statements - # - file_names # not yet tested - - flutter_style_todos - - hash_and_equals - - implementation_imports - # - invariant_booleans # too many false positives: https://github.com/dart-lang/linter/issues/811 - # - join_return_with_assignment # not yet tested - - library_names - - library_prefixes - - lines_longer_than_80_chars - # - literal_only_boolean_expressions # too many false positives: https://github.com/dart-lang/sdk/issues/34181 - - no_adjacent_strings_in_list - - no_duplicate_case_values - - non_constant_identifier_names - # - null_closures # not yet tested - # - omit_local_variable_types # opposite of always_specify_types - # - one_member_abstracts # too many false positives - # - only_throw_errors # https://github.com/flutter/flutter/issues/5792 - - overridden_fields - - package_api_docs - - package_names - - package_prefixed_library_names - # - parameter_assignments # we do this commonly - - prefer_adjacent_string_concatenation - - prefer_asserts_in_initializer_lists - # - prefer_asserts_with_message # not yet tested - - prefer_collection_literals - - prefer_conditional_assignment - - prefer_const_constructors - - prefer_const_constructors_in_immutables - - prefer_const_declarations - - prefer_const_literals_to_create_immutables - # - prefer_constructors_over_static_methods # not yet tested - - prefer_contains - # - prefer_double_quotes # opposite of prefer_single_quotes - # - prefer_expression_function_bodies # conflicts with https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#consider-using--for-short-functions-and-methods - - prefer_final_fields - # - prefer_final_in_for_each # not yet tested - - prefer_final_locals - # - prefer_for_elements_to_map_fromIterable # not yet tested - - prefer_foreach - # - prefer_function_declarations_over_variables # not yet tested - - prefer_generic_function_type_aliases - - prefer_if_elements_to_conditional_expressions - - prefer_if_null_operators - - prefer_initializing_formals - - prefer_inlined_adds - # - prefer_int_literals # not yet tested - # - prefer_interpolation_to_compose_strings # not yet tested - - prefer_is_empty - - prefer_is_not_empty - - prefer_iterable_whereType - # - prefer_mixin # https://github.com/dart-lang/language/issues/32 - # - prefer_null_aware_operators # disable until NNBD, see https://github.com/flutter/flutter/pull/32711#issuecomment-492930932 - - prefer_single_quotes - - prefer_spread_collections - - prefer_typing_uninitialized_variables - - prefer_void_to_null - # - provide_deprecation_message # not yet tested - # - public_member_api_docs # enabled on a case-by-case basis; see e.g. packages/analysis_options.yaml - - recursive_getters - - slash_for_doc_comments - # - sort_child_properties_last # not yet tested - - sort_constructors_first - - sort_pub_dependencies - - sort_unnamed_constructors_first - - test_types_in_equals - - throw_in_finally - # - type_annotate_public_apis # subset of always_specify_types - - type_init_formals - # - unawaited_futures # too many false positives - # - unnecessary_await_in_return # not yet tested - - unnecessary_brace_in_string_interps - - unnecessary_const - - unnecessary_getters_setters - # - unnecessary_lambdas # has false positives: https://github.com/dart-lang/linter/issues/498 - - unnecessary_new - - unnecessary_null_aware_assignments - - unnecessary_null_in_if_null_operators - - unnecessary_overrides - - unnecessary_parenthesis - - unnecessary_statements - - unnecessary_this - - unrelated_type_equality_checks - # - unsafe_html # not yet tested - - use_full_hex_values_for_flutter_colors - # - use_function_type_syntax_for_parameters # not yet tested - - use_rethrow_when_possible - # - use_setters_to_change_properties # not yet tested - # - use_string_buffers # has false positives: https://github.com/dart-lang/sdk/issues/34182 - # - use_to_and_as_if_applicable # has false positives, so we prefer to catch this by code-review - - valid_regexps - # - void_checks # not yet tested + - lines_longer_than_80_chars \ No newline at end of file diff --git a/flutter_appauth/example/lib/main.dart b/flutter_appauth/example/lib/main.dart index 1fa6da47..f9765dc7 100644 --- a/flutter_appauth/example/lib/main.dart +++ b/flutter_appauth/example/lib/main.dart @@ -6,16 +6,19 @@ import 'package:flutter/services.dart'; import 'package:flutter_appauth/flutter_appauth.dart'; import 'package:http/http.dart' as http; -void main() => runApp(MyApp()); +void main() => runApp(const MyApp()); class MyApp extends StatefulWidget { + const MyApp({super.key}); + @override - _MyAppState createState() => _MyAppState(); + State createState() => _MyAppState(); } class _MyAppState extends State { bool _isBusy = false; final FlutterAppAuth _appAuth = const FlutterAppAuth(); + String? _codeVerifier; String? _nonce; String? _authorizationCode; @@ -86,8 +89,8 @@ class _MyAppState extends State { ), const SizedBox(height: 8), ElevatedButton( - child: const Text('Exchange code'), onPressed: _authorizationCode != null ? _exchangeCode : null, + child: const Text('Exchange code'), ), const SizedBox(height: 8), ElevatedButton( @@ -108,17 +111,17 @@ class _MyAppState extends State { ), ), ElevatedButton( - child: const Text('Refresh token'), onPressed: _refreshToken != null ? _refresh : null, + child: const Text('Refresh token'), ), const SizedBox(height: 8), ElevatedButton( - child: const Text('End session'), onPressed: _idToken != null ? () async { await _endSession(); } : null, + child: const Text('End session'), ), const SizedBox(height: 8), if (_error != null) Text(_error ?? ''), diff --git a/flutter_appauth/example/pubspec.yaml b/flutter_appauth/example/pubspec.yaml index 90e11fda..7e45b422 100644 --- a/flutter_appauth/example/pubspec.yaml +++ b/flutter_appauth/example/pubspec.yaml @@ -14,10 +14,11 @@ dependencies: http: ^1.0.0 dev_dependencies: + flutter_lints: ^3.0.2 flutter_test: sdk: flutter integration_test: sdk: flutter flutter: - uses-material-design: true \ No newline at end of file + uses-material-design: true diff --git a/flutter_appauth/pubspec.yaml b/flutter_appauth/pubspec.yaml index a99caa79..898c1e25 100644 --- a/flutter_appauth/pubspec.yaml +++ b/flutter_appauth/pubspec.yaml @@ -1,5 +1,7 @@ name: flutter_appauth -description: This plugin provides an abstraction around the Android and iOS AppAuth SDKs so it can be used to communicate with OAuth 2.0 and OpenID Connect providers +description: This plugin provides an abstraction around the Android and iOS + AppAuth SDKs so it can be used to communicate with OAuth 2.0 and OpenID + Connect providers version: 7.0.0-dev.4 homepage: https://github.com/MaikuB/flutter_appauth/tree/master/flutter_appauth @@ -22,3 +24,5 @@ flutter: pluginClass: FlutterAppauthPlugin macos: pluginClass: FlutterAppauthPlugin +dev_dependencies: + flutter_lints: ^3.0.2 diff --git a/flutter_appauth_platform_interface/lib/src/authorization_token_request.dart b/flutter_appauth_platform_interface/lib/src/authorization_token_request.dart index 5c17485c..dad96b52 100644 --- a/flutter_appauth_platform_interface/lib/src/authorization_token_request.dart +++ b/flutter_appauth_platform_interface/lib/src/authorization_token_request.dart @@ -1,5 +1,4 @@ import 'authorization_parameters.dart'; -import 'authorization_service_configuration.dart'; import 'grant_types.dart'; import 'token_request.dart'; @@ -7,32 +6,22 @@ import 'token_request.dart'; class AuthorizationTokenRequest extends TokenRequest with AuthorizationParameters { AuthorizationTokenRequest( - String clientId, - String redirectUrl, { + super.clientId, + super.redirectUrl, { String? loginHint, - String? clientSecret, - List? scopes, - AuthorizationServiceConfiguration? serviceConfiguration, - Map? additionalParameters, - String? issuer, - String? discoveryUrl, + super.clientSecret, + super.scopes, + super.serviceConfiguration, + super.additionalParameters, + super.issuer, + super.discoveryUrl, List? promptValues, - bool allowInsecureConnections = false, + super.allowInsecureConnections, bool preferEphemeralSession = false, - String? nonce, + super.nonce, String? responseMode, }) : super( - clientId, - redirectUrl, - clientSecret: clientSecret, - discoveryUrl: discoveryUrl, - issuer: issuer, - scopes: scopes, grantType: GrantType.authorizationCode, - serviceConfiguration: serviceConfiguration, - additionalParameters: additionalParameters, - allowInsecureConnections: allowInsecureConnections, - nonce: nonce, ) { this.loginHint = loginHint; this.promptValues = promptValues; diff --git a/flutter_appauth_platform_interface/lib/src/errors.dart b/flutter_appauth_platform_interface/lib/src/errors.dart index 7d645994..fc5cc8c1 100644 --- a/flutter_appauth_platform_interface/lib/src/errors.dart +++ b/flutter_appauth_platform_interface/lib/src/errors.dart @@ -99,16 +99,13 @@ class FlutterAppAuthPlatformErrorDetails { /// user closing the browser. class FlutterAppAuthUserCancelledException extends PlatformException { FlutterAppAuthUserCancelledException({ - required String code, - String? message, + required super.code, + super.message, dynamic legacyDetails, - String? stacktrace, + super.stacktrace, required this.platformErrorDetails, }) : super( - code: code, - message: message, details: legacyDetails, - stacktrace: stacktrace, ); /// Details of the error from the underlying platform's AppAuth SDK. @@ -125,16 +122,13 @@ class FlutterAppAuthUserCancelledException extends PlatformException { /// plugin. class FlutterAppAuthPlatformException extends PlatformException { FlutterAppAuthPlatformException({ - required String code, - String? message, + required super.code, + super.message, dynamic legacyDetails, - String? stacktrace, + super.stacktrace, required this.platformErrorDetails, }) : super( - code: code, - message: message, details: legacyDetails, - stacktrace: stacktrace, ); /// Details of the error from the underlying platform's AppAuth SDK. diff --git a/flutter_appauth_platform_interface/pubspec.yaml b/flutter_appauth_platform_interface/pubspec.yaml index 9b04bd35..cc78a594 100644 --- a/flutter_appauth_platform_interface/pubspec.yaml +++ b/flutter_appauth_platform_interface/pubspec.yaml @@ -13,5 +13,6 @@ dependencies: plugin_platform_interface: ^2.0.0 dev_dependencies: + flutter_lints: ^3.0.2 flutter_test: sdk: flutter diff --git a/pubspec.yaml b/pubspec.yaml index 58241fa1..0f6227e6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,4 +3,5 @@ name: flutter_appauth_workspace environment: sdk: '>=3.0.0 <4.0.0' dev_dependencies: + flutter_lints: ^3.0.2 melos: ^6.1.0