From c6d4700892d7cc41a961d9969ae3a9b15dd40055 Mon Sep 17 00:00:00 2001 From: PetrovY Date: Wed, 28 May 2025 16:38:56 +0300 Subject: [PATCH] =?UTF-8?q?refactor(linter):=20=D0=9F=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B9=D1=82=D0=B8=20=D0=BD=D0=B0=20friflex=5Flinter,=20=D0=BE?= =?UTF-8?q?=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82=D1=8C=20=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- analysis_options.yaml | 83 ++++++++++++++++- .../aurora/app_services/analysis_options.yaml | 90 ++++++++++++++++++- .../aurora/app_services/lib/app_services.dart | 2 +- app_services/aurora/app_services/pubspec.yaml | 7 +- .../base/app_services/analysis_options.yaml | 90 ++++++++++++++++++- .../base/app_services/lib/app_services.dart | 2 +- app_services/base/app_services/pubspec.yaml | 7 +- .../i_app_services/analysis_options.yaml | 83 ++++++++++++++++- .../i_app_services/lib/i_app_services.dart | 2 +- app_services/i_app_services/pubspec.yaml | 7 +- .../web/app_services/analysis_options.yaml | 90 ++++++++++++++++++- .../web/app_services/lib/app_services.dart | 2 +- app_services/web/app_services/pubspec.yaml | 7 +- lib/app/app.dart | 10 +-- lib/app/app_config/app_config.dart | 1 - lib/app/app_config/app_config.g.dart | 60 +++++++------ lib/app/app_providers.dart | 5 +- lib/app/depends_providers.dart | 2 +- lib/app/http/app_http_client.dart | 4 +- lib/app/theme/theme_notifier.dart | 9 +- lib/di/di_container.dart | 22 ++--- lib/di/di_repositories.dart | 3 +- lib/di/di_services.dart | 12 +-- lib/di/di_typedefs.dart | 7 +- .../data/repository/auth_mock_repository.dart | 2 +- .../auth/data/repository/auth_repository.dart | 4 +- .../presentation/screens/auth_screen.dart | 8 +- lib/features/debug/debug_routes.dart | 64 ++++++------- lib/features/debug/debug_service.dart | 21 +++-- lib/features/debug/i_debug_service.dart | 12 +-- lib/features/debug/screens/debug_screen.dart | 6 +- lib/features/debug/screens/icons_screen.dart | 4 +- lib/features/debug/screens/lang_screen.dart | 12 +-- lib/features/debug/screens/theme_screen.dart | 4 +- lib/features/debug/screens/tokens_screen.dart | 8 +- lib/features/debug/screens/ui_kit_screen.dart | 8 +- lib/features/error/error_screen.dart | 9 +- .../data/repository/main_mock_repository.dart | 4 +- .../main/data/repository/main_repository.dart | 4 +- .../domain/repository/i_main_repository.dart | 4 +- .../main/presentation/main_routes.dart | 33 ++++--- .../screens/main_detail_screen.dart | 8 +- .../presentation/screens/main_screen.dart | 4 +- .../repository/profile_mock_repository.dart | 2 +- .../data/repository/profile_repository.dart | 4 +- .../profile/domain/bloc/profile_event.dart | 2 +- .../profile/domain/bloc/profile_state.dart | 8 +- .../profile/presentation/profile_routes.dart | 25 +++--- .../presentation/screens/profile_screen.dart | 9 +- lib/features/root/root_screen.dart | 5 +- lib/features/splash/splash_screen.dart | 4 +- lib/l10n/gen/app_localizations.dart | 37 ++++---- lib/l10n/localization_notifier.dart | 4 +- lib/router/app_router.dart | 4 +- lib/runner/app_runner.dart | 16 +--- lib/runner/timer_runner.dart | 7 +- lib/targets/prod.dart | 1 - lib/targets/stage.dart | 1 - pubspec.lock | 74 +++++++-------- pubspec.yaml | 27 +++--- test/widget_test.dart | 1 + 61 files changed, 691 insertions(+), 366 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 45d8890..122f5f7 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,10 +1,89 @@ -include: package:friflex_lint_rules/analysis_options.yaml +include: package:flutter_lints/flutter.yaml + +# Включает правила из: +# - package:lints/core.yaml: основные правила критических проблем +# - package:lints/recommended.yaml: рекомендуемые правила для чистого кода +# - package:flutter_lints/flutter.yaml: специфичные правила для Flutter analyzer: exclude: + - "android/**" + - "assets/**" + - "build/**" + - "config/**" + - "core/**" + - "res/**" + - "ios/**" - "**/*.g.dart" + - "**/*.config.dart" + - "**/*.gen.dart" - "**/*.freezed.dart" + - "**/generated/*" + - "**/*.gr.dart" - "**/*.yaml" - "app_services/aurora/**" - "/app_services/aurora/**" - - "**/app_services/aurora/**" \ No newline at end of file + - "**/app_services/aurora/**" + - "**/*.lock.dart" +errors: + # Переопределения уровней ошибок (error/warning/info) + avoid_dynamic_calls: error # Запрещает использование dynamic для вызовов методов + avoid_returning_null_for_future: error # Запрещает возврат null вместо Future + avoid_slow_async_io: warning # Предупреждает о медленных асинхронных операциях ввода/вывода + avoid_type_to_string: warning # Предупреждает о неправильном использовании toString() для типов + cancel_subscriptions: error # Требует отмены подписок, предотвращает утечки памяти + close_sinks: error # Требует закрытия sink-ов, предотвращает утечки ресурсов + comment_references: warning # Проверяет корректность ссылок в комментариях + always_declare_return_types: error # Требует явного указания возвращаемых типов методов + always_require_non_null_named_parameters: warning # Требует использования @required для ненулевых параметров + avoid_bool_literals_in_conditional_expressions: warning # Запрещает избыточные булевы литералы в условных выражениях + avoid_return_types_on_setters: warning # Запрещает возвращаемые типы для сеттеров + avoid_returning_null: error # Запрещает возврат null + avoid_setters_without_getters: error # Требует создания геттера при наличии сеттера + avoid_void_async: error # Запрещает использование void для асинхронных функций + constant_identifier_names: error # Проверяет правильность именования констант + unnecessary_new: warning # Запрещает избыточное использование ключевого слова new + use_decorated_box: warning # Рекомендует использовать DecoratedBox вместо Container + use_colored_box: warning # Рекомендует использовать ColoredBox вместо Container с цветом + +linter: + rules: + # Нестандартные правила или правила с измененными значениями + always_put_required_named_parameters_first: true # Требовать размещать обязательные именованные параметры первыми + avoid_catches_without_on_clauses: true # Избегать catch без указания типа исключения + avoid_catching_errors: true # Избегать перехвата ошибок типа Error + avoid_equals_and_hash_code_on_mutable_classes: true # Избегать equals и hashCode в изменяемых классах + avoid_escaping_inner_quotes: true # Избегать экранирования внутренних кавычек + avoid_field_initializers_in_const_classes: true # Избегать инициализаторов полей в константных классах + avoid_implementing_value_types: true # Избегать реализации интерфейсов значимых типов + avoid_multiple_declarations_per_line: false # Разрешать несколько объявлений в одной строке + avoid_positional_boolean_parameters: true # Избегать позиционных булевых параметров + avoid_private_typedef_functions: true # Избегать приватных typedef-функций + avoid_redundant_argument_values: true # Избегать избыточных значений аргументов + avoid_returning_this: true # Избегать возврата this + cascade_invocations: true # Использовать каскадные вызовы + deprecated_consistency: true # Поддерживать согласованность устаревших элементов + do_not_use_environment: false # Разрешить использование Environment + leading_newlines_in_multiline_strings: true # Начинать многострочные строки с новой строки + no_runtimeType_toString: true # Не использовать runtimeType.toString() + one_member_abstracts: false # Разрешать абстрактные классы с одним методом + only_throw_errors: true # Выбрасывать только объекты Error + parameter_assignments: true # Запрещать присваивание значений параметрам + prefer_asserts_with_message: true # Использовать сообщения с assert + prefer_constructors_over_static_methods: true # Предпочитать конструкторы статическим методам + prefer_final_in_for_each: true # Использовать final в for-each циклах + prefer_final_locals: true # Использовать final для локальных переменных + public_member_api_docs: false # Не требовать документацию для всех публичных членов + require_trailing_commas: true # Требовать запятые в конце для улучшения форматирования + sort_constructors_first: true # Требовать размещать конструкторы первыми + sort_pub_dependencies: false # Не требовать сортировки зависимостей в pubspec + sort_unnamed_constructors_first: false # Не требовать размещать безымянные конструкторы первыми + use_is_even_rather_than_modulo: true # Использовать isEven вместо % 2 == 0 + use_late_for_private_fields_and_variables: false # Не требовать late для приватных полей + use_setters_to_change_properties: true # Использовать сеттеры для изменения свойств + use_string_buffers: true # Использовать StringBuffer для сложной конкатенации + use_to_and_as_if_applicable: true # Использовать методы to и as при применимости + no_literal_bool_comparisons: true # Запрещать сравнения с литералами true/false + use_key_in_widget_constructors: true # Обязательное указание ключа для stateful/stateless widgets + always_use_package_imports: true # Всегда использовать package: импорты + diff --git a/app_services/aurora/app_services/analysis_options.yaml b/app_services/aurora/app_services/analysis_options.yaml index 6e32909..122f5f7 100644 --- a/app_services/aurora/app_services/analysis_options.yaml +++ b/app_services/aurora/app_services/analysis_options.yaml @@ -1 +1,89 @@ -include: package:friflex_lint_rules/analysis_options.yaml \ No newline at end of file +include: package:flutter_lints/flutter.yaml + +# Включает правила из: +# - package:lints/core.yaml: основные правила критических проблем +# - package:lints/recommended.yaml: рекомендуемые правила для чистого кода +# - package:flutter_lints/flutter.yaml: специфичные правила для Flutter + +analyzer: + exclude: + - "android/**" + - "assets/**" + - "build/**" + - "config/**" + - "core/**" + - "res/**" + - "ios/**" + - "**/*.g.dart" + - "**/*.config.dart" + - "**/*.gen.dart" + - "**/*.freezed.dart" + - "**/generated/*" + - "**/*.gr.dart" + - "**/*.yaml" + - "app_services/aurora/**" + - "/app_services/aurora/**" + - "**/app_services/aurora/**" + - "**/*.lock.dart" +errors: + # Переопределения уровней ошибок (error/warning/info) + avoid_dynamic_calls: error # Запрещает использование dynamic для вызовов методов + avoid_returning_null_for_future: error # Запрещает возврат null вместо Future + avoid_slow_async_io: warning # Предупреждает о медленных асинхронных операциях ввода/вывода + avoid_type_to_string: warning # Предупреждает о неправильном использовании toString() для типов + cancel_subscriptions: error # Требует отмены подписок, предотвращает утечки памяти + close_sinks: error # Требует закрытия sink-ов, предотвращает утечки ресурсов + comment_references: warning # Проверяет корректность ссылок в комментариях + always_declare_return_types: error # Требует явного указания возвращаемых типов методов + always_require_non_null_named_parameters: warning # Требует использования @required для ненулевых параметров + avoid_bool_literals_in_conditional_expressions: warning # Запрещает избыточные булевы литералы в условных выражениях + avoid_return_types_on_setters: warning # Запрещает возвращаемые типы для сеттеров + avoid_returning_null: error # Запрещает возврат null + avoid_setters_without_getters: error # Требует создания геттера при наличии сеттера + avoid_void_async: error # Запрещает использование void для асинхронных функций + constant_identifier_names: error # Проверяет правильность именования констант + unnecessary_new: warning # Запрещает избыточное использование ключевого слова new + use_decorated_box: warning # Рекомендует использовать DecoratedBox вместо Container + use_colored_box: warning # Рекомендует использовать ColoredBox вместо Container с цветом + +linter: + rules: + # Нестандартные правила или правила с измененными значениями + always_put_required_named_parameters_first: true # Требовать размещать обязательные именованные параметры первыми + avoid_catches_without_on_clauses: true # Избегать catch без указания типа исключения + avoid_catching_errors: true # Избегать перехвата ошибок типа Error + avoid_equals_and_hash_code_on_mutable_classes: true # Избегать equals и hashCode в изменяемых классах + avoid_escaping_inner_quotes: true # Избегать экранирования внутренних кавычек + avoid_field_initializers_in_const_classes: true # Избегать инициализаторов полей в константных классах + avoid_implementing_value_types: true # Избегать реализации интерфейсов значимых типов + avoid_multiple_declarations_per_line: false # Разрешать несколько объявлений в одной строке + avoid_positional_boolean_parameters: true # Избегать позиционных булевых параметров + avoid_private_typedef_functions: true # Избегать приватных typedef-функций + avoid_redundant_argument_values: true # Избегать избыточных значений аргументов + avoid_returning_this: true # Избегать возврата this + cascade_invocations: true # Использовать каскадные вызовы + deprecated_consistency: true # Поддерживать согласованность устаревших элементов + do_not_use_environment: false # Разрешить использование Environment + leading_newlines_in_multiline_strings: true # Начинать многострочные строки с новой строки + no_runtimeType_toString: true # Не использовать runtimeType.toString() + one_member_abstracts: false # Разрешать абстрактные классы с одним методом + only_throw_errors: true # Выбрасывать только объекты Error + parameter_assignments: true # Запрещать присваивание значений параметрам + prefer_asserts_with_message: true # Использовать сообщения с assert + prefer_constructors_over_static_methods: true # Предпочитать конструкторы статическим методам + prefer_final_in_for_each: true # Использовать final в for-each циклах + prefer_final_locals: true # Использовать final для локальных переменных + public_member_api_docs: false # Не требовать документацию для всех публичных членов + require_trailing_commas: true # Требовать запятые в конце для улучшения форматирования + sort_constructors_first: true # Требовать размещать конструкторы первыми + sort_pub_dependencies: false # Не требовать сортировки зависимостей в pubspec + sort_unnamed_constructors_first: false # Не требовать размещать безымянные конструкторы первыми + use_is_even_rather_than_modulo: true # Использовать isEven вместо % 2 == 0 + use_late_for_private_fields_and_variables: false # Не требовать late для приватных полей + use_setters_to_change_properties: true # Использовать сеттеры для изменения свойств + use_string_buffers: true # Использовать StringBuffer для сложной конкатенации + use_to_and_as_if_applicable: true # Использовать методы to и as при применимости + no_literal_bool_comparisons: true # Запрещать сравнения с литералами true/false + use_key_in_widget_constructors: true # Обязательное указание ключа для stateful/stateless widgets + always_use_package_imports: true # Всегда использовать package: импорты + diff --git a/app_services/aurora/app_services/lib/app_services.dart b/app_services/aurora/app_services/lib/app_services.dart index 7b6c1ee..a2dadb6 100644 --- a/app_services/aurora/app_services/lib/app_services.dart +++ b/app_services/aurora/app_services/lib/app_services.dart @@ -1,4 +1,4 @@ -library app_services; +library; export 'src/app_path_provider.dart'; export 'src/app_secure_storage.dart'; diff --git a/app_services/aurora/app_services/pubspec.yaml b/app_services/aurora/app_services/pubspec.yaml index f9aa9ca..4f34f2b 100644 --- a/app_services/aurora/app_services/pubspec.yaml +++ b/app_services/aurora/app_services/pubspec.yaml @@ -4,8 +4,7 @@ version: 0.0.1 publish_to: none environment: - sdk: ^3.6.0 - flutter: ">=3.24.0" + sdk: ^3.8.0 dependencies: @@ -32,6 +31,4 @@ dependencies: path: ../../i_app_services dev_dependencies: - friflex_lint_rules: - hosted: https://pub.friflex.com - version: 4.0.1 + flutter_lints: 6.0.0 diff --git a/app_services/base/app_services/analysis_options.yaml b/app_services/base/app_services/analysis_options.yaml index 6e32909..122f5f7 100644 --- a/app_services/base/app_services/analysis_options.yaml +++ b/app_services/base/app_services/analysis_options.yaml @@ -1 +1,89 @@ -include: package:friflex_lint_rules/analysis_options.yaml \ No newline at end of file +include: package:flutter_lints/flutter.yaml + +# Включает правила из: +# - package:lints/core.yaml: основные правила критических проблем +# - package:lints/recommended.yaml: рекомендуемые правила для чистого кода +# - package:flutter_lints/flutter.yaml: специфичные правила для Flutter + +analyzer: + exclude: + - "android/**" + - "assets/**" + - "build/**" + - "config/**" + - "core/**" + - "res/**" + - "ios/**" + - "**/*.g.dart" + - "**/*.config.dart" + - "**/*.gen.dart" + - "**/*.freezed.dart" + - "**/generated/*" + - "**/*.gr.dart" + - "**/*.yaml" + - "app_services/aurora/**" + - "/app_services/aurora/**" + - "**/app_services/aurora/**" + - "**/*.lock.dart" +errors: + # Переопределения уровней ошибок (error/warning/info) + avoid_dynamic_calls: error # Запрещает использование dynamic для вызовов методов + avoid_returning_null_for_future: error # Запрещает возврат null вместо Future + avoid_slow_async_io: warning # Предупреждает о медленных асинхронных операциях ввода/вывода + avoid_type_to_string: warning # Предупреждает о неправильном использовании toString() для типов + cancel_subscriptions: error # Требует отмены подписок, предотвращает утечки памяти + close_sinks: error # Требует закрытия sink-ов, предотвращает утечки ресурсов + comment_references: warning # Проверяет корректность ссылок в комментариях + always_declare_return_types: error # Требует явного указания возвращаемых типов методов + always_require_non_null_named_parameters: warning # Требует использования @required для ненулевых параметров + avoid_bool_literals_in_conditional_expressions: warning # Запрещает избыточные булевы литералы в условных выражениях + avoid_return_types_on_setters: warning # Запрещает возвращаемые типы для сеттеров + avoid_returning_null: error # Запрещает возврат null + avoid_setters_without_getters: error # Требует создания геттера при наличии сеттера + avoid_void_async: error # Запрещает использование void для асинхронных функций + constant_identifier_names: error # Проверяет правильность именования констант + unnecessary_new: warning # Запрещает избыточное использование ключевого слова new + use_decorated_box: warning # Рекомендует использовать DecoratedBox вместо Container + use_colored_box: warning # Рекомендует использовать ColoredBox вместо Container с цветом + +linter: + rules: + # Нестандартные правила или правила с измененными значениями + always_put_required_named_parameters_first: true # Требовать размещать обязательные именованные параметры первыми + avoid_catches_without_on_clauses: true # Избегать catch без указания типа исключения + avoid_catching_errors: true # Избегать перехвата ошибок типа Error + avoid_equals_and_hash_code_on_mutable_classes: true # Избегать equals и hashCode в изменяемых классах + avoid_escaping_inner_quotes: true # Избегать экранирования внутренних кавычек + avoid_field_initializers_in_const_classes: true # Избегать инициализаторов полей в константных классах + avoid_implementing_value_types: true # Избегать реализации интерфейсов значимых типов + avoid_multiple_declarations_per_line: false # Разрешать несколько объявлений в одной строке + avoid_positional_boolean_parameters: true # Избегать позиционных булевых параметров + avoid_private_typedef_functions: true # Избегать приватных typedef-функций + avoid_redundant_argument_values: true # Избегать избыточных значений аргументов + avoid_returning_this: true # Избегать возврата this + cascade_invocations: true # Использовать каскадные вызовы + deprecated_consistency: true # Поддерживать согласованность устаревших элементов + do_not_use_environment: false # Разрешить использование Environment + leading_newlines_in_multiline_strings: true # Начинать многострочные строки с новой строки + no_runtimeType_toString: true # Не использовать runtimeType.toString() + one_member_abstracts: false # Разрешать абстрактные классы с одним методом + only_throw_errors: true # Выбрасывать только объекты Error + parameter_assignments: true # Запрещать присваивание значений параметрам + prefer_asserts_with_message: true # Использовать сообщения с assert + prefer_constructors_over_static_methods: true # Предпочитать конструкторы статическим методам + prefer_final_in_for_each: true # Использовать final в for-each циклах + prefer_final_locals: true # Использовать final для локальных переменных + public_member_api_docs: false # Не требовать документацию для всех публичных членов + require_trailing_commas: true # Требовать запятые в конце для улучшения форматирования + sort_constructors_first: true # Требовать размещать конструкторы первыми + sort_pub_dependencies: false # Не требовать сортировки зависимостей в pubspec + sort_unnamed_constructors_first: false # Не требовать размещать безымянные конструкторы первыми + use_is_even_rather_than_modulo: true # Использовать isEven вместо % 2 == 0 + use_late_for_private_fields_and_variables: false # Не требовать late для приватных полей + use_setters_to_change_properties: true # Использовать сеттеры для изменения свойств + use_string_buffers: true # Использовать StringBuffer для сложной конкатенации + use_to_and_as_if_applicable: true # Использовать методы to и as при применимости + no_literal_bool_comparisons: true # Запрещать сравнения с литералами true/false + use_key_in_widget_constructors: true # Обязательное указание ключа для stateful/stateless widgets + always_use_package_imports: true # Всегда использовать package: импорты + diff --git a/app_services/base/app_services/lib/app_services.dart b/app_services/base/app_services/lib/app_services.dart index 7b6c1ee..a2dadb6 100644 --- a/app_services/base/app_services/lib/app_services.dart +++ b/app_services/base/app_services/lib/app_services.dart @@ -1,4 +1,4 @@ -library app_services; +library; export 'src/app_path_provider.dart'; export 'src/app_secure_storage.dart'; diff --git a/app_services/base/app_services/pubspec.yaml b/app_services/base/app_services/pubspec.yaml index cbb15bb..6e7ccc9 100644 --- a/app_services/base/app_services/pubspec.yaml +++ b/app_services/base/app_services/pubspec.yaml @@ -4,8 +4,7 @@ version: 0.0.1 publish_to: none environment: - sdk: ^3.6.0 - flutter: ">=3.24.0" + sdk: ^3.8.0 dependencies: flutter: @@ -25,6 +24,4 @@ dependencies: path: ../../i_app_services dev_dependencies: - friflex_lint_rules: - hosted: https://pub.friflex.com - version: 4.0.1 + flutter_lints: 6.0.0 diff --git a/app_services/i_app_services/analysis_options.yaml b/app_services/i_app_services/analysis_options.yaml index 45d8890..122f5f7 100644 --- a/app_services/i_app_services/analysis_options.yaml +++ b/app_services/i_app_services/analysis_options.yaml @@ -1,10 +1,89 @@ -include: package:friflex_lint_rules/analysis_options.yaml +include: package:flutter_lints/flutter.yaml + +# Включает правила из: +# - package:lints/core.yaml: основные правила критических проблем +# - package:lints/recommended.yaml: рекомендуемые правила для чистого кода +# - package:flutter_lints/flutter.yaml: специфичные правила для Flutter analyzer: exclude: + - "android/**" + - "assets/**" + - "build/**" + - "config/**" + - "core/**" + - "res/**" + - "ios/**" - "**/*.g.dart" + - "**/*.config.dart" + - "**/*.gen.dart" - "**/*.freezed.dart" + - "**/generated/*" + - "**/*.gr.dart" - "**/*.yaml" - "app_services/aurora/**" - "/app_services/aurora/**" - - "**/app_services/aurora/**" \ No newline at end of file + - "**/app_services/aurora/**" + - "**/*.lock.dart" +errors: + # Переопределения уровней ошибок (error/warning/info) + avoid_dynamic_calls: error # Запрещает использование dynamic для вызовов методов + avoid_returning_null_for_future: error # Запрещает возврат null вместо Future + avoid_slow_async_io: warning # Предупреждает о медленных асинхронных операциях ввода/вывода + avoid_type_to_string: warning # Предупреждает о неправильном использовании toString() для типов + cancel_subscriptions: error # Требует отмены подписок, предотвращает утечки памяти + close_sinks: error # Требует закрытия sink-ов, предотвращает утечки ресурсов + comment_references: warning # Проверяет корректность ссылок в комментариях + always_declare_return_types: error # Требует явного указания возвращаемых типов методов + always_require_non_null_named_parameters: warning # Требует использования @required для ненулевых параметров + avoid_bool_literals_in_conditional_expressions: warning # Запрещает избыточные булевы литералы в условных выражениях + avoid_return_types_on_setters: warning # Запрещает возвращаемые типы для сеттеров + avoid_returning_null: error # Запрещает возврат null + avoid_setters_without_getters: error # Требует создания геттера при наличии сеттера + avoid_void_async: error # Запрещает использование void для асинхронных функций + constant_identifier_names: error # Проверяет правильность именования констант + unnecessary_new: warning # Запрещает избыточное использование ключевого слова new + use_decorated_box: warning # Рекомендует использовать DecoratedBox вместо Container + use_colored_box: warning # Рекомендует использовать ColoredBox вместо Container с цветом + +linter: + rules: + # Нестандартные правила или правила с измененными значениями + always_put_required_named_parameters_first: true # Требовать размещать обязательные именованные параметры первыми + avoid_catches_without_on_clauses: true # Избегать catch без указания типа исключения + avoid_catching_errors: true # Избегать перехвата ошибок типа Error + avoid_equals_and_hash_code_on_mutable_classes: true # Избегать equals и hashCode в изменяемых классах + avoid_escaping_inner_quotes: true # Избегать экранирования внутренних кавычек + avoid_field_initializers_in_const_classes: true # Избегать инициализаторов полей в константных классах + avoid_implementing_value_types: true # Избегать реализации интерфейсов значимых типов + avoid_multiple_declarations_per_line: false # Разрешать несколько объявлений в одной строке + avoid_positional_boolean_parameters: true # Избегать позиционных булевых параметров + avoid_private_typedef_functions: true # Избегать приватных typedef-функций + avoid_redundant_argument_values: true # Избегать избыточных значений аргументов + avoid_returning_this: true # Избегать возврата this + cascade_invocations: true # Использовать каскадные вызовы + deprecated_consistency: true # Поддерживать согласованность устаревших элементов + do_not_use_environment: false # Разрешить использование Environment + leading_newlines_in_multiline_strings: true # Начинать многострочные строки с новой строки + no_runtimeType_toString: true # Не использовать runtimeType.toString() + one_member_abstracts: false # Разрешать абстрактные классы с одним методом + only_throw_errors: true # Выбрасывать только объекты Error + parameter_assignments: true # Запрещать присваивание значений параметрам + prefer_asserts_with_message: true # Использовать сообщения с assert + prefer_constructors_over_static_methods: true # Предпочитать конструкторы статическим методам + prefer_final_in_for_each: true # Использовать final в for-each циклах + prefer_final_locals: true # Использовать final для локальных переменных + public_member_api_docs: false # Не требовать документацию для всех публичных членов + require_trailing_commas: true # Требовать запятые в конце для улучшения форматирования + sort_constructors_first: true # Требовать размещать конструкторы первыми + sort_pub_dependencies: false # Не требовать сортировки зависимостей в pubspec + sort_unnamed_constructors_first: false # Не требовать размещать безымянные конструкторы первыми + use_is_even_rather_than_modulo: true # Использовать isEven вместо % 2 == 0 + use_late_for_private_fields_and_variables: false # Не требовать late для приватных полей + use_setters_to_change_properties: true # Использовать сеттеры для изменения свойств + use_string_buffers: true # Использовать StringBuffer для сложной конкатенации + use_to_and_as_if_applicable: true # Использовать методы to и as при применимости + no_literal_bool_comparisons: true # Запрещать сравнения с литералами true/false + use_key_in_widget_constructors: true # Обязательное указание ключа для stateful/stateless widgets + always_use_package_imports: true # Всегда использовать package: импорты + diff --git a/app_services/i_app_services/lib/i_app_services.dart b/app_services/i_app_services/lib/i_app_services.dart index 887d570..036bc78 100644 --- a/app_services/i_app_services/lib/i_app_services.dart +++ b/app_services/i_app_services/lib/i_app_services.dart @@ -1,4 +1,4 @@ -library i_app_services; +library; export 'src/i_path_provider.dart'; export 'src/i_secure_storage.dart'; diff --git a/app_services/i_app_services/pubspec.yaml b/app_services/i_app_services/pubspec.yaml index 8ef39b2..94228d0 100644 --- a/app_services/i_app_services/pubspec.yaml +++ b/app_services/i_app_services/pubspec.yaml @@ -4,14 +4,11 @@ version: 0.0.1 publish_to: "none" environment: - sdk: ^3.5.0 - flutter: ^3.24.0 + sdk: ^3.8.0 dependencies: flutter: sdk: flutter dev_dependencies: - friflex_lint_rules: - hosted: https://pub.friflex.com - version: 4.0.1 + flutter_lints: 6.0.0 diff --git a/app_services/web/app_services/analysis_options.yaml b/app_services/web/app_services/analysis_options.yaml index 6e32909..122f5f7 100644 --- a/app_services/web/app_services/analysis_options.yaml +++ b/app_services/web/app_services/analysis_options.yaml @@ -1 +1,89 @@ -include: package:friflex_lint_rules/analysis_options.yaml \ No newline at end of file +include: package:flutter_lints/flutter.yaml + +# Включает правила из: +# - package:lints/core.yaml: основные правила критических проблем +# - package:lints/recommended.yaml: рекомендуемые правила для чистого кода +# - package:flutter_lints/flutter.yaml: специфичные правила для Flutter + +analyzer: + exclude: + - "android/**" + - "assets/**" + - "build/**" + - "config/**" + - "core/**" + - "res/**" + - "ios/**" + - "**/*.g.dart" + - "**/*.config.dart" + - "**/*.gen.dart" + - "**/*.freezed.dart" + - "**/generated/*" + - "**/*.gr.dart" + - "**/*.yaml" + - "app_services/aurora/**" + - "/app_services/aurora/**" + - "**/app_services/aurora/**" + - "**/*.lock.dart" +errors: + # Переопределения уровней ошибок (error/warning/info) + avoid_dynamic_calls: error # Запрещает использование dynamic для вызовов методов + avoid_returning_null_for_future: error # Запрещает возврат null вместо Future + avoid_slow_async_io: warning # Предупреждает о медленных асинхронных операциях ввода/вывода + avoid_type_to_string: warning # Предупреждает о неправильном использовании toString() для типов + cancel_subscriptions: error # Требует отмены подписок, предотвращает утечки памяти + close_sinks: error # Требует закрытия sink-ов, предотвращает утечки ресурсов + comment_references: warning # Проверяет корректность ссылок в комментариях + always_declare_return_types: error # Требует явного указания возвращаемых типов методов + always_require_non_null_named_parameters: warning # Требует использования @required для ненулевых параметров + avoid_bool_literals_in_conditional_expressions: warning # Запрещает избыточные булевы литералы в условных выражениях + avoid_return_types_on_setters: warning # Запрещает возвращаемые типы для сеттеров + avoid_returning_null: error # Запрещает возврат null + avoid_setters_without_getters: error # Требует создания геттера при наличии сеттера + avoid_void_async: error # Запрещает использование void для асинхронных функций + constant_identifier_names: error # Проверяет правильность именования констант + unnecessary_new: warning # Запрещает избыточное использование ключевого слова new + use_decorated_box: warning # Рекомендует использовать DecoratedBox вместо Container + use_colored_box: warning # Рекомендует использовать ColoredBox вместо Container с цветом + +linter: + rules: + # Нестандартные правила или правила с измененными значениями + always_put_required_named_parameters_first: true # Требовать размещать обязательные именованные параметры первыми + avoid_catches_without_on_clauses: true # Избегать catch без указания типа исключения + avoid_catching_errors: true # Избегать перехвата ошибок типа Error + avoid_equals_and_hash_code_on_mutable_classes: true # Избегать equals и hashCode в изменяемых классах + avoid_escaping_inner_quotes: true # Избегать экранирования внутренних кавычек + avoid_field_initializers_in_const_classes: true # Избегать инициализаторов полей в константных классах + avoid_implementing_value_types: true # Избегать реализации интерфейсов значимых типов + avoid_multiple_declarations_per_line: false # Разрешать несколько объявлений в одной строке + avoid_positional_boolean_parameters: true # Избегать позиционных булевых параметров + avoid_private_typedef_functions: true # Избегать приватных typedef-функций + avoid_redundant_argument_values: true # Избегать избыточных значений аргументов + avoid_returning_this: true # Избегать возврата this + cascade_invocations: true # Использовать каскадные вызовы + deprecated_consistency: true # Поддерживать согласованность устаревших элементов + do_not_use_environment: false # Разрешить использование Environment + leading_newlines_in_multiline_strings: true # Начинать многострочные строки с новой строки + no_runtimeType_toString: true # Не использовать runtimeType.toString() + one_member_abstracts: false # Разрешать абстрактные классы с одним методом + only_throw_errors: true # Выбрасывать только объекты Error + parameter_assignments: true # Запрещать присваивание значений параметрам + prefer_asserts_with_message: true # Использовать сообщения с assert + prefer_constructors_over_static_methods: true # Предпочитать конструкторы статическим методам + prefer_final_in_for_each: true # Использовать final в for-each циклах + prefer_final_locals: true # Использовать final для локальных переменных + public_member_api_docs: false # Не требовать документацию для всех публичных членов + require_trailing_commas: true # Требовать запятые в конце для улучшения форматирования + sort_constructors_first: true # Требовать размещать конструкторы первыми + sort_pub_dependencies: false # Не требовать сортировки зависимостей в pubspec + sort_unnamed_constructors_first: false # Не требовать размещать безымянные конструкторы первыми + use_is_even_rather_than_modulo: true # Использовать isEven вместо % 2 == 0 + use_late_for_private_fields_and_variables: false # Не требовать late для приватных полей + use_setters_to_change_properties: true # Использовать сеттеры для изменения свойств + use_string_buffers: true # Использовать StringBuffer для сложной конкатенации + use_to_and_as_if_applicable: true # Использовать методы to и as при применимости + no_literal_bool_comparisons: true # Запрещать сравнения с литералами true/false + use_key_in_widget_constructors: true # Обязательное указание ключа для stateful/stateless widgets + always_use_package_imports: true # Всегда использовать package: импорты + diff --git a/app_services/web/app_services/lib/app_services.dart b/app_services/web/app_services/lib/app_services.dart index 7b6c1ee..a2dadb6 100644 --- a/app_services/web/app_services/lib/app_services.dart +++ b/app_services/web/app_services/lib/app_services.dart @@ -1,4 +1,4 @@ -library app_services; +library; export 'src/app_path_provider.dart'; export 'src/app_secure_storage.dart'; diff --git a/app_services/web/app_services/pubspec.yaml b/app_services/web/app_services/pubspec.yaml index e6f9dec..53c5e3a 100644 --- a/app_services/web/app_services/pubspec.yaml +++ b/app_services/web/app_services/pubspec.yaml @@ -4,8 +4,7 @@ version: 0.0.1 publish_to: none environment: - sdk: ^3.6.0 - flutter: ">=3.24.0" + sdk: ^3.8.0 dependencies: flutter: @@ -22,6 +21,4 @@ dependencies: path: ../../i_app_services dev_dependencies: - friflex_lint_rules: - hosted: https://pub.friflex.com - version: 4.0.1 + flutter_lints: 6.0.0 diff --git a/lib/app/app.dart b/lib/app/app.dart index 5b73234..2ec31a7 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -14,14 +14,12 @@ import 'package:go_router/go_router.dart'; /// Класс приложения class App extends StatefulWidget { - const App({ - super.key, - required this.router, - required this.initDependencies, - }); + const App({required this.router, required this.initDependencies, super.key}); + /// Роутер приложения final GoRouter router; - /// Функция для инициализации зависимостей + + /// Функция для инициализации зависимостей final Future Function() initDependencies; @override diff --git a/lib/app/app_config/app_config.dart b/lib/app/app_config/app_config.dart index 649c23e..201e316 100644 --- a/lib/app/app_config/app_config.dart +++ b/lib/app/app_config/app_config.dart @@ -2,7 +2,6 @@ import 'package:envied/envied.dart'; import 'package:friflex_starter/app/app_config/i_app_config.dart'; import 'package:friflex_starter/app/app_env.dart'; - part 'app_config.g.dart'; /// Класс для реализации конфигурации с моковыми данными diff --git a/lib/app/app_config/app_config.g.dart b/lib/app/app_config/app_config.g.dart index 31bfec1..2f1d5dd 100644 --- a/lib/app/app_config/app_config.g.dart +++ b/lib/app/app_config/app_config.g.dart @@ -24,11 +24,13 @@ final class _Dev { 502170444, ]; - static final String secretKey = String.fromCharCodes(List.generate( - _envieddatasecretKey.length, - (int i) => i, - growable: false, - ).map((int i) => _envieddatasecretKey[i] ^ _enviedkeysecretKey[i])); + static final String secretKey = String.fromCharCodes( + List.generate( + _envieddatasecretKey.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatasecretKey[i] ^ _enviedkeysecretKey[i]), + ); } // coverage:ignore-file @@ -65,11 +67,13 @@ final class _Prod { 2999310307, ]; - static final String baseUrl = String.fromCharCodes(List.generate( - _envieddatabaseUrl.length, - (int i) => i, - growable: false, - ).map((int i) => _envieddatabaseUrl[i] ^ _enviedkeybaseUrl[i])); + static final String baseUrl = String.fromCharCodes( + List.generate( + _envieddatabaseUrl.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatabaseUrl[i] ^ _enviedkeybaseUrl[i]), + ); static const List _enviedkeysecretKey = [ 4268709792, @@ -85,11 +89,13 @@ final class _Prod { 2677812202, ]; - static final String secretKey = String.fromCharCodes(List.generate( - _envieddatasecretKey.length, - (int i) => i, - growable: false, - ).map((int i) => _envieddatasecretKey[i] ^ _enviedkeysecretKey[i])); + static final String secretKey = String.fromCharCodes( + List.generate( + _envieddatasecretKey.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatasecretKey[i] ^ _enviedkeysecretKey[i]), + ); } // coverage:ignore-file @@ -128,11 +134,13 @@ final class _Stage { 206487528, ]; - static final String baseUrl = String.fromCharCodes(List.generate( - _envieddatabaseUrl.length, - (int i) => i, - growable: false, - ).map((int i) => _envieddatabaseUrl[i] ^ _enviedkeybaseUrl[i])); + static final String baseUrl = String.fromCharCodes( + List.generate( + _envieddatabaseUrl.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatabaseUrl[i] ^ _enviedkeybaseUrl[i]), + ); static const List _enviedkeysecretKey = [ 1473916388, @@ -150,9 +158,11 @@ final class _Stage { 317937294, ]; - static final String secretKey = String.fromCharCodes(List.generate( - _envieddatasecretKey.length, - (int i) => i, - growable: false, - ).map((int i) => _envieddatasecretKey[i] ^ _enviedkeysecretKey[i])); + static final String secretKey = String.fromCharCodes( + List.generate( + _envieddatasecretKey.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatasecretKey[i] ^ _enviedkeysecretKey[i]), + ); } diff --git a/lib/app/app_providers.dart b/lib/app/app_providers.dart index 41496ff..fede8c4 100644 --- a/lib/app/app_providers.dart +++ b/lib/app/app_providers.dart @@ -5,10 +5,7 @@ import 'package:provider/provider.dart'; /// Класс для добавления провайдеров темы и локализации final class AppProviders extends StatelessWidget { - const AppProviders({ - super.key, - required this.child, - }); + const AppProviders({required this.child, super.key}); final Widget child; diff --git a/lib/app/depends_providers.dart b/lib/app/depends_providers.dart index a05e512..d8d5229 100644 --- a/lib/app/depends_providers.dart +++ b/lib/app/depends_providers.dart @@ -5,9 +5,9 @@ import 'package:provider/provider.dart'; /// Класс для внедрения глобальных зависимостей final class DependsProviders extends StatelessWidget { const DependsProviders({ - super.key, required this.child, required this.diContainer, + super.key, }); final Widget child; diff --git a/lib/app/http/app_http_client.dart b/lib/app/http/app_http_client.dart index d3e528c..614aced 100644 --- a/lib/app/http/app_http_client.dart +++ b/lib/app/http/app_http_client.dart @@ -25,9 +25,7 @@ final class AppHttpClient implements IHttpClient { ..connectTimeout = const Duration(seconds: 5) ..sendTimeout = const Duration(seconds: 7) ..receiveTimeout = const Duration(seconds: 10) - ..headers = { - 'Content-Type': 'application/json', - }; + ..headers = {'Content-Type': 'application/json'}; debugService.log('HTTP client created'); _httpClient.interceptors.add(debugService.dioLogger); } diff --git a/lib/app/theme/theme_notifier.dart b/lib/app/theme/theme_notifier.dart index a53ab66..3b09daa 100644 --- a/lib/app/theme/theme_notifier.dart +++ b/lib/app/theme/theme_notifier.dart @@ -5,14 +5,14 @@ typedef ThemeBuilder = Widget Function(); /// Виджет для подписки на изменение темы приложения class ThemeConsumer extends StatelessWidget { - const ThemeConsumer({super.key, required this.builder}); + const ThemeConsumer({required this.builder, super.key}); final ThemeBuilder builder; @override Widget build(BuildContext context) { return Consumer( - builder: (_, __, ___) { + builder: (_, _, _) { return builder(); }, ); @@ -26,8 +26,9 @@ final class ThemeNotifier extends ChangeNotifier { ThemeMode get themeMode => _themeMode; void changeTheme() { - _themeMode = - _themeMode == ThemeMode.light ? ThemeMode.dark : ThemeMode.light; + _themeMode = _themeMode == ThemeMode.light + ? ThemeMode.dark + : ThemeMode.light; notifyListeners(); } } diff --git a/lib/di/di_container.dart b/lib/di/di_container.dart index 437567e..76b6244 100644 --- a/lib/di/di_container.dart +++ b/lib/di/di_container.dart @@ -16,7 +16,7 @@ import 'package:friflex_starter/features/debug/i_debug_service.dart'; final class DiContainer { /// {@macro dependencies_container} DiContainer({required this.env, required IDebugService dService}) - : debugService = dService; + : debugService = dService; final AppEnv env; /// Сервис для отладки, получаем из конструктора @@ -44,30 +44,20 @@ final class DiContainer { appConfig = switch (env) { AppEnv.dev => AppConfigDev(), AppEnv.prod => AppConfigProd(), - AppEnv.stage => AppConfigStage() + AppEnv.stage => AppConfigStage(), }; // Инициализация HTTP клиента - httpClientFactory = (debugService, appConfig) => AppHttpClient( - debugService: debugService, - appConfig: appConfig, - ); + httpClientFactory = (debugService, appConfig) => + AppHttpClient(debugService: debugService, appConfig: appConfig); // Инициализация сервисов services = DiServices() - ..init( - onProgress: onProgress, - onError: onError, - diContainer: this, - ); + ..init(onProgress: onProgress, onError: onError, diContainer: this); // throw Exception('Тестовая - ошибка инициализации зависимостей'); // Инициализация репозиториев repositories = DiRepositories() - ..init( - onProgress: onProgress, - onError: onError, - diContainer: this, - ); + ..init(onProgress: onProgress, onError: onError, diContainer: this); onComplete('Инициализация зависимостей завершена!'); } diff --git a/lib/di/di_repositories.dart b/lib/di/di_repositories.dart index 4d01b24..289ae17 100644 --- a/lib/di/di_repositories.dart +++ b/lib/di/di_repositories.dart @@ -40,7 +40,6 @@ final class DiRepositories { /// Интерфейс для работы с репозиторием профиля late final IProfileRepository profileRepository; - /// Метод для инициализации репозиториев в приложении /// /// Принимает: @@ -116,7 +115,7 @@ final class DiRepositories { stackTrace, ); } - + onProgress( 'Инициализация репозиториев завершена! Было подменено репозиториев - ${_mockReposToSwitch.length} (${_mockReposToSwitch.join(', ')})', ); diff --git a/lib/di/di_services.dart b/lib/di/di_services.dart index 72ac073..de1c714 100644 --- a/lib/di/di_services.dart +++ b/lib/di/di_services.dart @@ -26,11 +26,7 @@ final class DiServices { pathProvider = const AppPathProvider(); onProgress(AppPathProvider.name); } on Object catch (error, stackTrace) { - onError( - 'Ошибка инициализации ${IPathProvider.name}', - error, - stackTrace, - ); + onError('Ошибка инициализации ${IPathProvider.name}', error, stackTrace); } try { secureStorage = AppSecureStorage( @@ -38,11 +34,7 @@ final class DiServices { ); onProgress(AppSecureStorage.name); } on Object catch (error, stackTrace) { - onError( - 'Ошибка инициализации ${ISecureStorage.name}', - error, - stackTrace, - ); + onError('Ошибка инициализации ${ISecureStorage.name}', error, stackTrace); } onProgress('Инициализация сервисов завершена!'); diff --git a/lib/di/di_typedefs.dart b/lib/di/di_typedefs.dart index 8cf3a9b..5663001 100644 --- a/lib/di/di_typedefs.dart +++ b/lib/di/di_typedefs.dart @@ -1,9 +1,6 @@ /// Обратный вызов при ошибки инициализации -typedef OnError = void Function( - String message, - Object error, [ - StackTrace? stackTrace, -]); +typedef OnError = + void Function(String message, Object error, [StackTrace? stackTrace]); /// Обратный вызов при прогрессе typedef OnProgress = void Function(String name); diff --git a/lib/features/auth/data/repository/auth_mock_repository.dart b/lib/features/auth/data/repository/auth_mock_repository.dart index 11a4a62..df2cd5f 100644 --- a/lib/features/auth/data/repository/auth_mock_repository.dart +++ b/lib/features/auth/data/repository/auth_mock_repository.dart @@ -1,4 +1,4 @@ -import '../../domain/repository/i_auth_repository.dart'; +import 'package:friflex_starter/features/auth/domain/repository/i_auth_repository.dart'; /// {@template AuthMockRepository} /// Mock реализация репозитория авторизации diff --git a/lib/features/auth/data/repository/auth_repository.dart b/lib/features/auth/data/repository/auth_repository.dart index 38d85ec..dcdc3cf 100644 --- a/lib/features/auth/data/repository/auth_repository.dart +++ b/lib/features/auth/data/repository/auth_repository.dart @@ -1,14 +1,14 @@ import 'package:friflex_starter/app/http/i_http_client.dart'; -import '../../domain/repository/i_auth_repository.dart'; +import 'package:friflex_starter/features/auth/domain/repository/i_auth_repository.dart'; /// {@template AuthRepository} /// Реализация репозитория авторизации /// {@endtemplate} final class AuthRepository implements IAuthRepository { - final IHttpClient httpClient; AuthRepository({required this.httpClient}); + final IHttpClient httpClient; @override String get name => 'AuthRepository'; diff --git a/lib/features/auth/presentation/screens/auth_screen.dart b/lib/features/auth/presentation/screens/auth_screen.dart index 813e7b3..2386c4d 100644 --- a/lib/features/auth/presentation/screens/auth_screen.dart +++ b/lib/features/auth/presentation/screens/auth_screen.dart @@ -10,12 +10,8 @@ class AuthScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('AuthScreen'), - ), - body: const Center( - child: Text('AuthScreen'), - ), + appBar: AppBar(title: const Text('AuthScreen')), + body: const Center(child: Text('AuthScreen')), ); } } diff --git a/lib/features/debug/debug_routes.dart b/lib/features/debug/debug_routes.dart index 06e4836..8674c4b 100644 --- a/lib/features/debug/debug_routes.dart +++ b/lib/features/debug/debug_routes.dart @@ -32,36 +32,36 @@ abstract final class DebugRoutes { /// Принимает: /// - [routes] - вложенные роуты static GoRoute buildRoutes({List routes = const []}) => GoRoute( - path: debugScreenPath, - name: debugScreenName, - builder: (context, state) => const DebugScreen(), - routes: [ - ...routes, - GoRoute( - path: tokensScreenPath, - name: tokensScreenName, - builder: (context, state) => const TokensScreen(), - ), - GoRoute( - path: uiKitScreenPath, - name: uiKitScreenName, - builder: (context, state) => const UiKitScreen(), - ), - GoRoute( - path: iconsScreenPath, - name: iconsScreenName, - builder: (context, state) => const IconsScreen(), - ), - GoRoute( - path: themeScreenPath, - name: themeScreenName, - builder: (context, state) => const ThemeScreen(), - ), - GoRoute( - path: langScreenPath, - name: langScreenName, - builder: (context, state) => const LangScreen(), - ), - ], - ); + path: debugScreenPath, + name: debugScreenName, + builder: (context, state) => const DebugScreen(), + routes: [ + ...routes, + GoRoute( + path: tokensScreenPath, + name: tokensScreenName, + builder: (context, state) => const TokensScreen(), + ), + GoRoute( + path: uiKitScreenPath, + name: uiKitScreenName, + builder: (context, state) => const UiKitScreen(), + ), + GoRoute( + path: iconsScreenPath, + name: iconsScreenName, + builder: (context, state) => const IconsScreen(), + ), + GoRoute( + path: themeScreenPath, + name: themeScreenName, + builder: (context, state) => const ThemeScreen(), + ), + GoRoute( + path: langScreenPath, + name: langScreenName, + builder: (context, state) => const LangScreen(), + ), + ], + ); } diff --git a/lib/features/debug/debug_service.dart b/lib/features/debug/debug_service.dart index ae96cbd..72f8ba6 100644 --- a/lib/features/debug/debug_service.dart +++ b/lib/features/debug/debug_service.dart @@ -62,15 +62,17 @@ class DebugService implements IDebugService { Map? args, StackTrace? stackTrace, }) { - final logMessage = - message is Function ? Function.apply(message, []) as Object : message; + final logMessage = message is Function + ? Function.apply(message, []) as Object + : message; _talker.error(logMessage, error, stackTrace); } @override void log(Object message, {Object? logLevel, Map? args}) { - final logMessage = - message is Function ? Function.apply(message, []) as Object : message; + final logMessage = message is Function + ? Function.apply(message, []) as Object + : message; _talker.log(logMessage); } @@ -80,14 +82,17 @@ class DebugService implements IDebugService { Object? logLevel, Map? args, }) { - final logMessage = - message is Function ? Function.apply(message, []) as Object : message; + final logMessage = message is Function + ? Function.apply(message, []) as Object + : message; _talker.warning(logMessage); } @override - Future openDebugScreen(BuildContext context, - {bool useRootNavigator = false,}) async { + Future openDebugScreen( + BuildContext context, { + bool useRootNavigator = false, + }) async { await Navigator.of(context).push( MaterialPageRoute(builder: (context) => TalkerScreen(talker: _talker)), ); diff --git a/lib/features/debug/i_debug_service.dart b/lib/features/debug/i_debug_service.dart index 9136670..3ad9854 100644 --- a/lib/features/debug/i_debug_service.dart +++ b/lib/features/debug/i_debug_service.dart @@ -14,11 +14,7 @@ abstract interface class IDebugService { dynamic get blocObserver; /// Метод для логирования сообщений - void log( - Object message, { - Object logLevel, - Map? args, - }); + void log(Object message, {Object logLevel, Map? args}); /// Метод для логирования предупреждений void logWarning( @@ -37,11 +33,7 @@ abstract interface class IDebugService { }); /// Метод для обработки ошибок - void logDebug( - Object message, { - Object logLevel, - Map? args, - }); + void logDebug(Object message, {Object logLevel, Map? args}); /// Метод для открытия окна отладки /// diff --git a/lib/features/debug/screens/debug_screen.dart b/lib/features/debug/screens/debug_screen.dart index 655e97b..cbe97b0 100644 --- a/lib/features/debug/screens/debug_screen.dart +++ b/lib/features/debug/screens/debug_screen.dart @@ -5,7 +5,7 @@ import 'package:friflex_starter/features/debug/debug_routes.dart'; import 'package:go_router/go_router.dart'; class DebugScreen extends StatelessWidget { - const DebugScreen({Key? key}) : super(key: key); + const DebugScreen({super.key}); @override Widget build(BuildContext context) { @@ -15,9 +15,7 @@ class DebugScreen extends StatelessWidget { child: ListView( padding: const EdgeInsets.all(16), children: [ - Text( - 'Окружение: ${context.di.appConfig.env.name}', - ), + Text('Окружение: ${context.di.appConfig.env.name}'), const HBox(22), Text( 'Реализация AppServices: ${context.di.services.secureStorage.nameImpl}', diff --git a/lib/features/debug/screens/icons_screen.dart b/lib/features/debug/screens/icons_screen.dart index e62c52b..826731d 100644 --- a/lib/features/debug/screens/icons_screen.dart +++ b/lib/features/debug/screens/icons_screen.dart @@ -12,9 +12,7 @@ class IconsScreen extends StatelessWidget { @override Widget build(BuildContext context) { final iconList = Assets.icons.values - .map( - (icon) => _ItemIcon(icon: icon.svg(), name: icon.path), - ) + .map((icon) => _ItemIcon(icon: icon.svg(), name: icon.path)) .toList(); return Scaffold( appBar: AppBar(title: const Text('Иконки')), diff --git a/lib/features/debug/screens/lang_screen.dart b/lib/features/debug/screens/lang_screen.dart index 54893dc..f8f91a0 100644 --- a/lib/features/debug/screens/lang_screen.dart +++ b/lib/features/debug/screens/lang_screen.dart @@ -22,18 +22,14 @@ class LangScreen extends StatelessWidget { const SizedBox(height: 16), ElevatedButton( onPressed: () { - context.localization.changeLocal( - const Locale('ru', 'RU'), - ); + context.localization.changeLocal(const Locale('ru', 'RU')); }, child: const Text('Сменить язык на Rусский'), ), const SizedBox(height: 16), ElevatedButton( onPressed: () { - context.localization.changeLocal( - const Locale('en', 'EN'), - ); + context.localization.changeLocal(const Locale('en', 'EN')); }, child: const Text('Сменить язык на Английский'), ), @@ -54,9 +50,7 @@ class LangScreen extends StatelessWidget { ), ), const SizedBox(height: 16), - Text( - 'Текущий язык: ${context.l10n.localeName}', - ), + Text('Текущий язык: ${context.l10n.localeName}'), ], ), ), diff --git a/lib/features/debug/screens/theme_screen.dart b/lib/features/debug/screens/theme_screen.dart index 02f1dc7..a847651 100644 --- a/lib/features/debug/screens/theme_screen.dart +++ b/lib/features/debug/screens/theme_screen.dart @@ -29,9 +29,7 @@ class ThemeScreen extends StatelessWidget { child: const SizedBox(height: 100, width: 100), ), const SizedBox(height: 16), - Text( - 'Текущая тема: ${context.theme.themeMode}', - ), + Text('Текущая тема: ${context.theme.themeMode}'), ], ), ), diff --git a/lib/features/debug/screens/tokens_screen.dart b/lib/features/debug/screens/tokens_screen.dart index 5cf696c..3c39b67 100644 --- a/lib/features/debug/screens/tokens_screen.dart +++ b/lib/features/debug/screens/tokens_screen.dart @@ -15,13 +15,9 @@ class TokensScreen extends StatelessWidget { child: ListView( padding: const EdgeInsets.all(16), children: const [ - Text( - 'Access Token: ', - ), + Text('Access Token: '), SizedBox(height: 16), - Text( - 'Refresh Token: ', - ), + Text('Refresh Token: '), SizedBox(height: 16), ], ), diff --git a/lib/features/debug/screens/ui_kit_screen.dart b/lib/features/debug/screens/ui_kit_screen.dart index 2394732..929f8a9 100644 --- a/lib/features/debug/screens/ui_kit_screen.dart +++ b/lib/features/debug/screens/ui_kit_screen.dart @@ -11,16 +11,12 @@ class UiKitScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('UI Kit Screen'), - ), + appBar: AppBar(title: const Text('UI Kit Screen')), body: Center( child: ListView( padding: const EdgeInsets.all(16), children: const [ - Text( - 'UI Kit Screen', - ), + Text('UI Kit Screen'), SizedBox(height: 16), // Здесь можно добавить другие компоненты UI Kit ], diff --git a/lib/features/error/error_screen.dart b/lib/features/error/error_screen.dart index db157ba..c44c16e 100644 --- a/lib/features/error/error_screen.dart +++ b/lib/features/error/error_screen.dart @@ -6,9 +6,9 @@ import 'package:flutter/material.dart'; class ErrorScreen extends StatelessWidget { /// {@macro ErrorScreen} const ErrorScreen({ - super.key, required this.error, required this.stackTrace, + super.key, this.onRetry, }); @@ -31,14 +31,11 @@ class ErrorScreen extends StatelessWidget { child: const Text('Перезагрузить приложение'), ), const SizedBox(height: 16), - Text( - ''' + Text(''' Что-то пошло не так, попробуйте перезагрузить приложение error: $error stackTrace: $stackTrace - ''', - textAlign: TextAlign.center, - ), + ''', textAlign: TextAlign.center), ], ), ), diff --git a/lib/features/main/data/repository/main_mock_repository.dart b/lib/features/main/data/repository/main_mock_repository.dart index 9eada70..839a6fe 100644 --- a/lib/features/main/data/repository/main_mock_repository.dart +++ b/lib/features/main/data/repository/main_mock_repository.dart @@ -1,4 +1,4 @@ -import '../../domain/repository/i_main_repository.dart'; +import 'package:friflex_starter/features/main/domain/repository/i_main_repository.dart'; /// {@template MainMockRepository} /// @@ -6,4 +6,4 @@ import '../../domain/repository/i_main_repository.dart'; final class MainMockRepository implements IMainRepository { @override String get name => 'MainMockRepository'; -} \ No newline at end of file +} diff --git a/lib/features/main/data/repository/main_repository.dart b/lib/features/main/data/repository/main_repository.dart index 68778e5..10d35e7 100644 --- a/lib/features/main/data/repository/main_repository.dart +++ b/lib/features/main/data/repository/main_repository.dart @@ -1,14 +1,14 @@ import 'package:friflex_starter/app/http/i_http_client.dart'; -import '../../domain/repository/i_main_repository.dart'; +import 'package:friflex_starter/features/main/domain/repository/i_main_repository.dart'; /// {@template MainRepository} /// /// {@endtemplate} final class MainRepository implements IMainRepository { - final IHttpClient httpClient; MainRepository({required this.httpClient}); + final IHttpClient httpClient; @override String get name => 'MainRepository'; diff --git a/lib/features/main/domain/repository/i_main_repository.dart b/lib/features/main/domain/repository/i_main_repository.dart index aa3afb9..6309b97 100644 --- a/lib/features/main/domain/repository/i_main_repository.dart +++ b/lib/features/main/domain/repository/i_main_repository.dart @@ -1,6 +1,6 @@ import 'package:friflex_starter/di/di_base_repo.dart'; /// {@template IMainRepository} -/// +/// /// {@endtemplate} -abstract interface class IMainRepository with DiBaseRepo{} \ No newline at end of file +abstract interface class IMainRepository with DiBaseRepo {} diff --git a/lib/features/main/presentation/main_routes.dart b/lib/features/main/presentation/main_routes.dart index 560f265..c485ec9 100644 --- a/lib/features/main/presentation/main_routes.dart +++ b/lib/features/main/presentation/main_routes.dart @@ -23,25 +23,24 @@ abstract final class MainRoutes { static StatefulShellBranch buildShellBranch({ List routes = const [], List? observers, - }) => - StatefulShellBranch( - initialLocation: _mainScreenPath, - observers: observers, + }) => StatefulShellBranch( + initialLocation: _mainScreenPath, + observers: observers, + routes: [ + ...routes, + GoRoute( + path: _mainScreenPath, + name: mainScreenName, + builder: (context, state) => const MainScreen(), routes: [ - ...routes, + // Пример вложенного роута для главного экрана GoRoute( - path: _mainScreenPath, - name: mainScreenName, - builder: (context, state) => const MainScreen(), - routes: [ - // Пример вложенного роута для главного экрана - GoRoute( - path: _mainDetailScreenPath, - name: mainDetailScreenName, - builder: (context, state) => const MainDetailScreen(), - ), - ], + path: _mainDetailScreenPath, + name: mainDetailScreenName, + builder: (context, state) => const MainDetailScreen(), ), ], - ); + ), + ], + ); } diff --git a/lib/features/main/presentation/screens/main_detail_screen.dart b/lib/features/main/presentation/screens/main_detail_screen.dart index 06ac0be..5da7360 100644 --- a/lib/features/main/presentation/screens/main_detail_screen.dart +++ b/lib/features/main/presentation/screens/main_detail_screen.dart @@ -10,12 +10,8 @@ class MainDetailScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Main Detail Screen'), - ), - body: const Center( - child: Text('Вложенный экран'), - ), + appBar: AppBar(title: const Text('Main Detail Screen')), + body: const Center(child: Text('Вложенный экран')), ); } } diff --git a/lib/features/main/presentation/screens/main_screen.dart b/lib/features/main/presentation/screens/main_screen.dart index f20f2bd..ab65296 100644 --- a/lib/features/main/presentation/screens/main_screen.dart +++ b/lib/features/main/presentation/screens/main_screen.dart @@ -13,9 +13,7 @@ class MainScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Main Screen'), - ), + appBar: AppBar(title: const Text('Main Screen')), body: Center( child: Column( mainAxisSize: MainAxisSize.min, diff --git a/lib/features/profile/data/repository/profile_mock_repository.dart b/lib/features/profile/data/repository/profile_mock_repository.dart index 76c09a5..7406455 100644 --- a/lib/features/profile/data/repository/profile_mock_repository.dart +++ b/lib/features/profile/data/repository/profile_mock_repository.dart @@ -1,4 +1,4 @@ -import '../../domain/repository/i_profile_repository.dart'; +import 'package:friflex_starter/features/profile/domain/repository/i_profile_repository.dart'; /// {@template ProfileMockRepository} /// diff --git a/lib/features/profile/data/repository/profile_repository.dart b/lib/features/profile/data/repository/profile_repository.dart index c1e8b84..388c798 100644 --- a/lib/features/profile/data/repository/profile_repository.dart +++ b/lib/features/profile/data/repository/profile_repository.dart @@ -1,14 +1,14 @@ import 'package:friflex_starter/app/http/i_http_client.dart'; -import '../../domain/repository/i_profile_repository.dart'; +import 'package:friflex_starter/features/profile/domain/repository/i_profile_repository.dart'; /// {@template ProfileRepository} /// /// {@endtemplate} final class ProfileRepository implements IProfileRepository { - final IHttpClient httpClient; ProfileRepository({required this.httpClient}); + final IHttpClient httpClient; @override String get name => 'ProfileRepository'; diff --git a/lib/features/profile/domain/bloc/profile_event.dart b/lib/features/profile/domain/bloc/profile_event.dart index 88f7f40..f58668e 100644 --- a/lib/features/profile/domain/bloc/profile_event.dart +++ b/lib/features/profile/domain/bloc/profile_event.dart @@ -8,9 +8,9 @@ sealed class ProfileEvent extends Equatable { } final class ProfileFetchProfileEvent extends ProfileEvent { - final String id; const ProfileFetchProfileEvent({required this.id}); + final String id; @override List get props => [id]; diff --git a/lib/features/profile/domain/bloc/profile_state.dart b/lib/features/profile/domain/bloc/profile_state.dart index c368b35..4cd4808 100644 --- a/lib/features/profile/domain/bloc/profile_state.dart +++ b/lib/features/profile/domain/bloc/profile_state.dart @@ -12,24 +12,24 @@ final class ProfileInitialState extends ProfileState {} final class ProfileWaitingState extends ProfileState {} final class ProfileErrorState extends ProfileState { - final String message; - final Object error; - final StackTrace? stackTrace; const ProfileErrorState({ required this.message, required this.error, this.stackTrace, }); + final String message; + final Object error; + final StackTrace? stackTrace; @override List get props => [message, error]; } final class ProfileSuccessState extends ProfileState { - final Object data; const ProfileSuccessState({required this.data}); + final Object data; @override List get props => [data]; diff --git a/lib/features/profile/presentation/profile_routes.dart b/lib/features/profile/presentation/profile_routes.dart index 870ba22..665aee9 100644 --- a/lib/features/profile/presentation/profile_routes.dart +++ b/lib/features/profile/presentation/profile_routes.dart @@ -16,17 +16,16 @@ abstract final class ProfileRoutes { static StatefulShellBranch buildShellBranch({ List routes = const [], List? observers, - }) => - StatefulShellBranch( - initialLocation: _profileScreenPath, - observers: observers, - routes: [ - GoRoute( - path: _profileScreenPath, - name: profileScreenName, - builder: (context, state) => const ProfileScreen(), - routes: routes, - ), - ], - ); + }) => StatefulShellBranch( + initialLocation: _profileScreenPath, + observers: observers, + routes: [ + GoRoute( + path: _profileScreenPath, + name: profileScreenName, + builder: (context, state) => const ProfileScreen(), + routes: routes, + ), + ], + ); } diff --git a/lib/features/profile/presentation/screens/profile_screen.dart b/lib/features/profile/presentation/screens/profile_screen.dart index d04b362..081e943 100644 --- a/lib/features/profile/presentation/screens/profile_screen.dart +++ b/lib/features/profile/presentation/screens/profile_screen.dart @@ -15,8 +15,9 @@ class ProfileScreen extends StatelessWidget { // и вызываем событие ProfileFetchProfileEvent // Или любые другие события, которые вам нужны return BlocProvider( - create: (context) => ProfileBloc(profileRepository) - ..add(const ProfileFetchProfileEvent(id: '1')), + create: (context) => + ProfileBloc(profileRepository) + ..add(const ProfileFetchProfileEvent(id: '1')), child: const _ProfileScreenView(), ); } @@ -29,9 +30,7 @@ class _ProfileScreenView extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Profile'), - ), + appBar: AppBar(title: const Text('Profile')), body: Center( child: BlocBuilder( builder: (context, state) { diff --git a/lib/features/root/root_screen.dart b/lib/features/root/root_screen.dart index c75f831..f97332f 100644 --- a/lib/features/root/root_screen.dart +++ b/lib/features/root/root_screen.dart @@ -10,10 +10,7 @@ class RootScreen extends StatelessWidget { /// /// Принимает: /// - [navigationShell] - текущая ветка навигации - const RootScreen({ - super.key, - required this.navigationShell, - }); + const RootScreen({required this.navigationShell, super.key}); /// Текущая ветка навигации final StatefulNavigationShell navigationShell; diff --git a/lib/features/splash/splash_screen.dart b/lib/features/splash/splash_screen.dart index 2bec9bb..71eebc1 100644 --- a/lib/features/splash/splash_screen.dart +++ b/lib/features/splash/splash_screen.dart @@ -11,8 +11,6 @@ class SplashScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return Center( - child: Assets.lottie.splash.lottie(), - ); + return Center(child: Assets.lottie.splash.lottie()); } } diff --git a/lib/l10n/gen/app_localizations.dart b/lib/l10n/gen/app_localizations.dart index ef6441b..6d42317 100644 --- a/lib/l10n/gen/app_localizations.dart +++ b/lib/l10n/gen/app_localizations.dart @@ -62,7 +62,8 @@ import 'app_localizations_ru.dart'; /// be consistent with the languages listed in the AppLocalizations.supportedLocales /// property. abstract class AppLocalizations { - AppLocalizations(String locale) : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + AppLocalizations(String locale) + : localeName = intl.Intl.canonicalizedLocale(locale.toString()); final String localeName; @@ -70,7 +71,8 @@ abstract class AppLocalizations { return Localizations.of(context, AppLocalizations); } - static const LocalizationsDelegate delegate = _AppLocalizationsDelegate(); + static const LocalizationsDelegate delegate = + _AppLocalizationsDelegate(); /// A list of this localizations delegate along with the default localizations /// delegates. @@ -82,17 +84,18 @@ abstract class AppLocalizations { /// Additional delegates can be added by appending to this list in /// MaterialApp. This list does not have to be used at all if a custom list /// of delegates is preferred or required. - static const List> localizationsDelegates = >[ - delegate, - GlobalMaterialLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ]; + static const List> localizationsDelegates = + >[ + delegate, + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ]; /// A list of this localizations delegate's supported locales. static const List supportedLocales = [ Locale('en'), - Locale('ru') + Locale('ru'), ]; /// The conventional newborn programmer greeting @@ -102,7 +105,8 @@ abstract class AppLocalizations { String get helloWorld; } -class _AppLocalizationsDelegate extends LocalizationsDelegate { +class _AppLocalizationsDelegate + extends LocalizationsDelegate { const _AppLocalizationsDelegate(); @override @@ -111,25 +115,26 @@ class _AppLocalizationsDelegate extends LocalizationsDelegate } @override - bool isSupported(Locale locale) => ['en', 'ru'].contains(locale.languageCode); + bool isSupported(Locale locale) => + ['en', 'ru'].contains(locale.languageCode); @override bool shouldReload(_AppLocalizationsDelegate old) => false; } AppLocalizations lookupAppLocalizations(Locale locale) { - - // Lookup logic when only language code is specified. switch (locale.languageCode) { - case 'en': return AppLocalizationsEn(); - case 'ru': return AppLocalizationsRu(); + case 'en': + return AppLocalizationsEn(); + case 'ru': + return AppLocalizationsRu(); } throw FlutterError( 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' 'an issue with the localizations generation tool. Please file an issue ' 'on GitHub with a reproducible sample app and the gen-l10n configuration ' - 'that was used.' + 'that was used.', ); } diff --git a/lib/l10n/localization_notifier.dart b/lib/l10n/localization_notifier.dart index 7c47b95..51fac24 100644 --- a/lib/l10n/localization_notifier.dart +++ b/lib/l10n/localization_notifier.dart @@ -5,14 +5,14 @@ typedef LocalizationBuilder = Widget Function(); /// Виджет для перестройки виджета в зависимости от локализации class LocalizationConsumer extends StatelessWidget { - const LocalizationConsumer({super.key, required this.builder}); + const LocalizationConsumer({required this.builder, super.key}); final LocalizationBuilder builder; @override Widget build(BuildContext context) { return Consumer( - builder: (_, __, ___) { + builder: (_, _, _) { return builder(); }, ); diff --git a/lib/router/app_router.dart b/lib/router/app_router.dart index 317156d..8c0d15f 100644 --- a/lib/router/app_router.dart +++ b/lib/router/app_router.dart @@ -26,9 +26,7 @@ class AppRouter { return GoRouter( navigatorKey: rootNavigatorKey, initialLocation: initialLocation, - observers: [ - debugService.routeObserver, - ], + observers: [debugService.routeObserver], routes: [ StatefulShellRoute.indexedStack( parentNavigatorKey: rootNavigatorKey, diff --git a/lib/runner/app_runner.dart b/lib/runner/app_runner.dart index d3b45d2..f983349 100644 --- a/lib/runner/app_runner.dart +++ b/lib/runner/app_runner.dart @@ -105,9 +105,7 @@ class AppRunner { /// выполняется до запуска приложения Future _initApp() async { // Запрет на поворот экрана - await SystemChrome.setPreferredOrientations( - [DeviceOrientation.portraitUp], - ); + await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); // Заморозка первого кадра (сплеш) WidgetsBinding.instance.deferFirstFrame(); @@ -131,10 +129,7 @@ class AppRunner { // TODO(yura): Удалить после проверки await Future.delayed(const Duration(seconds: 3)); debugService.log(() => 'Тип сборки: ${env.name}'); - final diContainer = DiContainer( - env: env, - dService: debugService, - ); + final diContainer = DiContainer(env: env, dService: debugService); await diContainer.init( onProgress: (name) => timerRunner.logOnProgress(name), onComplete: (name) { @@ -142,11 +137,8 @@ class AppRunner { ..logOnComplete(name) ..stop(); }, - onError: (message, error, [stackTrace]) => debugService.logError( - message, - error: error, - stackTrace: stackTrace, - ), + onError: (message, error, [stackTrace]) => + debugService.logError(message, error: error, stackTrace: stackTrace), ); //throw Exception('Test error'); return diContainer; diff --git a/lib/runner/timer_runner.dart b/lib/runner/timer_runner.dart index ba99236..be54608 100644 --- a/lib/runner/timer_runner.dart +++ b/lib/runner/timer_runner.dart @@ -36,15 +36,10 @@ class TimerRunner { _debugService.log( '$message, прогресс: ${_stopwatch.elapsedMilliseconds} мс', ); - } /// Метод для обработки прогресса инициализации зависимостей - void logOnError( - String message, - Object error, [ - StackTrace? stackTrace, - ]) { + void logOnError(String message, Object error, [StackTrace? stackTrace]) { _debugService.logError(() => message, error: error, stackTrace: stackTrace); } } diff --git a/lib/targets/prod.dart b/lib/targets/prod.dart index 37ff7f0..6e22de4 100644 --- a/lib/targets/prod.dart +++ b/lib/targets/prod.dart @@ -1,4 +1,3 @@ - import 'package:friflex_starter/app/app_env.dart'; import 'package:friflex_starter/runner/app_runner.dart'; diff --git a/lib/targets/stage.dart b/lib/targets/stage.dart index 151e7cb..c943134 100644 --- a/lib/targets/stage.dart +++ b/lib/targets/stage.dart @@ -1,4 +1,3 @@ - import 'package:friflex_starter/app/app_env.dart'; import 'package:friflex_starter/runner/app_runner.dart'; diff --git a/pubspec.lock b/pubspec.lock index 50b0d52..0b112ef 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -57,10 +57,10 @@ packages: dependency: transitive description: name: async - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.12.0" + version: "2.13.0" bloc: dependency: transitive description: @@ -281,10 +281,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" ffi: dependency: transitive description: @@ -318,10 +318,10 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: "1046d719fbdf230330d3443187cc33cc11963d15c9089f6cc56faa42a4c5f0cc" + sha256: cf51747952201a455a1c840f8171d273be009b932c75093020f9af64f2123e38 url: "https://pub.dev" source: hosted - version: "9.1.0" + version: "9.1.1" flutter_gen: dependency: "direct dev" description: @@ -347,13 +347,13 @@ packages: source: hosted version: "5.10.0" flutter_lints: - dependency: transitive + dependency: "direct dev" description: name: flutter_lints - sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "6.0.0" flutter_localizations: dependency: "direct main" description: flutter @@ -425,14 +425,6 @@ packages: description: flutter source: sdk version: "0.0.0" - friflex_lint_rules: - dependency: "direct dev" - description: - name: friflex_lint_rules - sha256: "27c92a58f63313a2d512db812ecbddc8f671c86af13b2e52d8fd27cf2ee5b731" - url: "https://pub.friflex.com" - source: hosted - version: "4.0.1" frontend_server_client: dependency: transitive description: @@ -453,10 +445,10 @@ packages: dependency: "direct main" description: name: go_router - sha256: "2b9ba6d4c247457c35a6622f1dee6aab6694a4e15237ff7c32320345044112b6" + sha256: "0b1e06223bee260dee31a171fb1153e306907563a0b0225e8c1733211911429a" url: "https://pub.dev" source: hosted - version: "15.1.1" + version: "15.1.2" graphs: dependency: transitive description: @@ -524,10 +516,10 @@ packages: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.20.2" io: dependency: transitive description: @@ -556,10 +548,10 @@ packages: dependency: transitive description: name: leak_tracker - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "10.0.8" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: @@ -580,10 +572,10 @@ packages: dependency: transitive description: name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "6.0.0" logging: dependency: transitive description: @@ -764,10 +756,10 @@ packages: dependency: "direct main" description: name: provider - sha256: "489024f942069c2920c844ee18bb3d467c69e48955a4f32d1677f71be103e310" + sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "6.1.5" pub_semver: dependency: transitive description: @@ -945,42 +937,42 @@ packages: dependency: transitive description: name: talker - sha256: cbea2c5a10a3d9225e58b5fef4092d6ec00f1fcda43f92a33dfbab1ea7ffca79 + sha256: a664f5eae5284e94aa8c535e0400ab71a78fa2480ad18a7344dec928b5c56805 url: "https://pub.dev" source: hosted - version: "4.7.2" + version: "4.8.0" talker_bloc_logger: dependency: "direct main" description: name: talker_bloc_logger - sha256: e4ad2c2c9878e745b9a5f930c7006f04b808f2f1d07005de9e14836b99faa3ed + sha256: "1af998d6cbafba00f66bbf49d77132275d3b113c6ac53ce0dc9d9981206f9cea" url: "https://pub.dev" source: hosted - version: "4.7.2" + version: "4.8.0" talker_dio_logger: dependency: "direct main" description: name: talker_dio_logger - sha256: "81127ef1afa516e6ce8a83a4b692ca2c8d9ef2e7bf4e4de89526abe4c843826a" + sha256: "296a20ce600ccca7801deb5a530c28d03500c520f25f1e40c3bae727f63dd5eb" url: "https://pub.dev" source: hosted - version: "4.7.2" + version: "4.8.0" talker_flutter: dependency: "direct main" description: name: talker_flutter - sha256: "113b8402fcb546c4c11a099cbcd39bf835df2586573ef6655ce1f94b2f841e40" + sha256: "480c51bba7ac0dcab23be5e9545214a43179625bc5f787326248e94af8316aee" url: "https://pub.dev" source: hosted - version: "4.7.2" + version: "4.8.0" talker_logger: dependency: "direct main" description: name: talker_logger - sha256: "416b4d726358764c68c2de23c11bf9f146f2608ac244ec2ed9da741f89c49a6e" + sha256: b5d0bd04229eeccdf765cabf73e964ee28528c749104b56867c8d2eb764a45ee url: "https://pub.dev" source: hosted - version: "4.7.2" + version: "4.8.0" term_glyph: dependency: transitive description: @@ -1097,10 +1089,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 url: "https://pub.dev" source: hosted - version: "14.3.1" + version: "15.0.0" watcher: dependency: transitive description: @@ -1166,5 +1158,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.7.0 <4.0.0" - flutter: ">=3.27.0" + dart: ">=3.8.0 <4.0.0" + flutter: ">=3.32.0" diff --git a/pubspec.yaml b/pubspec.yaml index cf57f8c..c17ae56 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,29 +6,29 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.6.0 - flutter: ">=3.24.0" + sdk: ^3.8.0 + flutter: ">=3.32.0" dependencies: flutter: sdk: flutter cupertino_icons: 1.0.8 envied: 1.1.1 - go_router: 15.1.1 - flutter_bloc: 9.1.0 - provider: 6.1.4 + go_router: 15.1.2 + flutter_bloc: 9.1.1 + provider: 6.1.5 dio: 5.8.0+1 - intl: 0.19.0 + intl: 0.20.2 flutter_svg: 2.1.0 flutter_localizations: sdk: flutter lottie: 3.3.1 # Пакеты для отладки - talker_flutter: 4.7.2 - talker_dio_logger: 4.7.2 - talker_bloc_logger: 4.7.2 - talker_logger: 4.7.2 + talker_flutter: 4.8.0 + talker_dio_logger: 4.8.0 + talker_bloc_logger: 4.8.0 + talker_logger: 4.8.0 equatable: 2.0.7 @@ -46,13 +46,11 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - friflex_lint_rules: - hosted: https://pub.friflex.com - version: 4.0.1 envied_generator: 1.1.1 build_runner: 2.4.15 flutter_gen_runner: 5.10.0 flutter_gen: 5.10.0 + flutter_lints: 6.0.0 flutter: uses-material-design: true @@ -77,7 +75,6 @@ flutter: weight: 400 flutter_gen: - integrations: flutter_svg: true - lottie: true \ No newline at end of file + lottie: true diff --git a/test/widget_test.dart b/test/widget_test.dart index e69de29..8b13789 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -0,0 +1 @@ +