mirror of
https://github.com/smmarty/friflex_flutter_starter.git
synced 2025-12-22 01:20:46 +00:00
fix(linter): улучшение правил анализа и линтинга (#37)
* fix(linter): улучшение правил анализа и линтинга, добавление исключений и ошибок * fix(tasks): исправления по ревью --------- Co-authored-by: petrovyuri <petrovyuri@example.com>
This commit is contained in:
@@ -9,8 +9,8 @@ import 'package:friflex_starter/di/di_container.dart';
|
||||
import 'package:friflex_starter/features/error/error_screen.dart';
|
||||
import 'package:friflex_starter/features/splash/splash_screen.dart';
|
||||
import 'package:friflex_starter/features/update/domain/state/cubit/update_cubit.dart';
|
||||
import 'package:friflex_starter/features/update/update_type.dart';
|
||||
import 'package:friflex_starter/features/update/update_routes.dart';
|
||||
import 'package:friflex_starter/features/update/update_type.dart';
|
||||
import 'package:friflex_starter/l10n/gen/app_localizations.dart';
|
||||
import 'package:friflex_starter/l10n/localization_notifier.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
@@ -136,7 +136,7 @@ class _App extends StatelessWidget {
|
||||
}
|
||||
return ThemeConsumer(
|
||||
builder: () => MediaQuery(
|
||||
key: ValueKey('prevent_rebuild'),
|
||||
key: const ValueKey('prevent_rebuild'),
|
||||
data: MediaQuery.of(
|
||||
context,
|
||||
).copyWith(textScaler: TextScaler.noScaling, boldText: false),
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:friflex_starter/di/di_container.dart';
|
||||
@@ -22,12 +24,19 @@ final class DependsProviders extends StatelessWidget {
|
||||
// Сюда добавляем глобальные блоки, inherited и т.д.
|
||||
Provider.value(value: diContainer), // Передаем контейнер зависимостей
|
||||
BlocProvider(
|
||||
create: (_) => UpdateCubit(diContainer.repositories.updatesRepository)
|
||||
..checkForUpdates(
|
||||
versionCode:
|
||||
'1.0.0', // TODO(yura): заменить на получение из diContainer
|
||||
platform: 'android',
|
||||
),
|
||||
create: (_) {
|
||||
final updateCubit = UpdateCubit(
|
||||
diContainer.repositories.updatesRepository,
|
||||
);
|
||||
unawaited(
|
||||
updateCubit.checkForUpdates(
|
||||
versionCode:
|
||||
'1.0.0', // TODO(yura): заменить на получение из diContainer
|
||||
platform: 'android',
|
||||
),
|
||||
);
|
||||
return updateCubit;
|
||||
},
|
||||
),
|
||||
],
|
||||
child: child,
|
||||
|
||||
@@ -46,20 +46,20 @@ class AppColors extends ThemeExtension<AppColors> with _$AppColorsTailorMixin {
|
||||
final Color infoSnackbarBackground;
|
||||
|
||||
/// Цвета светлой темы
|
||||
static final AppColors light = AppColors(
|
||||
static const AppColors light = AppColors(
|
||||
testColor: Colors.red,
|
||||
errorSnackbarBackground: const Color(0xFFD24720),
|
||||
successSnackbarBackground: const Color(0xFF6FB62C),
|
||||
infoSnackbarBackground: const Color.fromARGB(255, 220, 108, 77),
|
||||
itemTextColor: const Color(0xFFFAF3EB),
|
||||
errorSnackbarBackground: Color(0xFFD24720),
|
||||
successSnackbarBackground: Color(0xFF6FB62C),
|
||||
infoSnackbarBackground: Color.fromARGB(255, 220, 108, 77),
|
||||
itemTextColor: Color(0xFFFAF3EB),
|
||||
);
|
||||
|
||||
/// Цвета тёмной темы
|
||||
static final AppColors dark = AppColors(
|
||||
static const AppColors dark = AppColors(
|
||||
testColor: Colors.green,
|
||||
errorSnackbarBackground: const Color(0xFF638B8B),
|
||||
successSnackbarBackground: const Color(0xFF93C499),
|
||||
infoSnackbarBackground: const Color.fromARGB(255, 35, 147, 178),
|
||||
errorSnackbarBackground: Color(0xFF638B8B),
|
||||
successSnackbarBackground: Color(0xFF93C499),
|
||||
infoSnackbarBackground: Color.fromARGB(255, 35, 147, 178),
|
||||
itemTextColor: Colors.white,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ class _AppSnackBarState extends State<AppSnackBar>
|
||||
CurvedAnimation(parent: _animationController, curve: Curves.easeOut),
|
||||
);
|
||||
|
||||
_animationController.forward();
|
||||
unawaited(_animationController.forward());
|
||||
}
|
||||
|
||||
/// Запуск таймера для автоматического закрытия снекбара
|
||||
@@ -198,11 +198,13 @@ class _AppSnackBarState extends State<AppSnackBar>
|
||||
if (!mounted) return;
|
||||
|
||||
_dismissTimer?.cancel();
|
||||
_animationController.reverse().then((_) {
|
||||
if (mounted) {
|
||||
widget.onDismiss?.call();
|
||||
}
|
||||
});
|
||||
unawaited(
|
||||
_animationController.reverse().then((_) {
|
||||
if (mounted) {
|
||||
widget.onDismiss?.call();
|
||||
}
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -243,7 +245,7 @@ class _AppSnackBarState extends State<AppSnackBar>
|
||||
Flexible(
|
||||
child: Text(
|
||||
widget.message,
|
||||
style: TextStyle(color: Colors.white),
|
||||
style: const TextStyle(color: Colors.white),
|
||||
maxLines: 3,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
@@ -288,13 +290,21 @@ class _Icon extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return switch (type) {
|
||||
TypeSnackBar.success => Icon(
|
||||
TypeSnackBar.success => const Icon(
|
||||
Icons.check_circle,
|
||||
color: Colors.white,
|
||||
size: 32,
|
||||
),
|
||||
TypeSnackBar.error => Icon(Icons.error, color: Colors.white, size: 32),
|
||||
TypeSnackBar.info => Icon(Icons.info, color: Colors.white, size: 32),
|
||||
TypeSnackBar.error => const Icon(
|
||||
Icons.error,
|
||||
color: Colors.white,
|
||||
size: 32,
|
||||
),
|
||||
TypeSnackBar.info => const Icon(
|
||||
Icons.info,
|
||||
color: Colors.white,
|
||||
size: 32,
|
||||
),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:friflex_starter/app/ui_kit/app_box.dart';
|
||||
import 'package:friflex_starter/app/ui_kit/app_snackbar.dart';
|
||||
@@ -78,15 +80,17 @@ class _ComponentsScreenState extends State<ComponentsScreen> {
|
||||
final updateCubitState = context.read<UpdateCubit>().state;
|
||||
if (updateCubitState is UpdateSuccessState &&
|
||||
updateCubitState.updateInfo.updateType == UpdateType.soft) {
|
||||
SoftUpdateModal.show(
|
||||
context,
|
||||
updateEntity: updateCubitState.updateInfo,
|
||||
onUpdate: () {
|
||||
AppSnackBar.showSuccess(
|
||||
context: context,
|
||||
message: 'Начато обновление приложения',
|
||||
);
|
||||
},
|
||||
unawaited(
|
||||
SoftUpdateModal.show(
|
||||
context,
|
||||
updateEntity: updateCubitState.updateInfo,
|
||||
onUpdate: () {
|
||||
AppSnackBar.showSuccess(
|
||||
context: context,
|
||||
message: 'Начато обновление приложения',
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
@@ -95,7 +99,7 @@ class _ComponentsScreenState extends State<ComponentsScreen> {
|
||||
const HBox(16),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
context.pushNamed(UpdateRoutes.hardUpdateScreenName);
|
||||
unawaited(context.pushNamed(UpdateRoutes.hardUpdateScreenName));
|
||||
},
|
||||
child: const Text('Переход на экран Hard Update обновления'),
|
||||
),
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:friflex_starter/app/ui_kit/app_box.dart';
|
||||
import 'package:friflex_starter/app/app_context_ext.dart';
|
||||
import 'package:friflex_starter/app/ui_kit/app_box.dart';
|
||||
import 'package:friflex_starter/features/debug/debug_routes.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
@@ -35,42 +37,42 @@ class DebugScreen extends StatelessWidget {
|
||||
const HBox(16),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
context.pushNamed(DebugRoutes.iconsScreenName);
|
||||
unawaited(context.pushNamed(DebugRoutes.iconsScreenName));
|
||||
},
|
||||
child: const Text('Экран с иконками'),
|
||||
),
|
||||
const HBox(16),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
context.pushNamed(DebugRoutes.themeScreenName);
|
||||
unawaited(context.pushNamed(DebugRoutes.themeScreenName));
|
||||
},
|
||||
child: const Text('Экран настроек темы'),
|
||||
),
|
||||
const HBox(16),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
context.pushNamed(DebugRoutes.tokensScreenName);
|
||||
unawaited(context.pushNamed(DebugRoutes.tokensScreenName));
|
||||
},
|
||||
child: const Text('Экран с токенами'),
|
||||
),
|
||||
const HBox(16),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
context.pushNamed(DebugRoutes.uiKitScreenName);
|
||||
unawaited(context.pushNamed(DebugRoutes.uiKitScreenName));
|
||||
},
|
||||
child: const Text('Экран UI Kit'),
|
||||
),
|
||||
const HBox(16),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
context.pushNamed(DebugRoutes.langScreenName);
|
||||
unawaited(context.pushNamed(DebugRoutes.langScreenName));
|
||||
},
|
||||
child: const Text('Экран локализации'),
|
||||
),
|
||||
const HBox(16),
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
context.pushNamed(DebugRoutes.componentsScreenName);
|
||||
onPressed: () async {
|
||||
await context.pushNamed(DebugRoutes.componentsScreenName);
|
||||
},
|
||||
child: const Text('Экран компонентов'),
|
||||
),
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:friflex_starter/app/ui_kit/app_box.dart';
|
||||
import 'package:friflex_starter/features/main/presentation/main_routes.dart';
|
||||
@@ -23,7 +25,7 @@ class MainScreen extends StatelessWidget {
|
||||
ElevatedButton(
|
||||
onPressed: () {
|
||||
// Переход на экран с деталями
|
||||
context.pushNamed(MainRoutes.mainDetailScreenName);
|
||||
unawaited(context.pushNamed(MainRoutes.mainDetailScreenName));
|
||||
},
|
||||
child: const Text('Переход на экран с деталями'),
|
||||
),
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:friflex_starter/app/app_context_ext.dart';
|
||||
@@ -46,12 +48,14 @@ class _RootScreenState extends State<RootScreen> {
|
||||
// Проверяем только состояние успеха с доступной информацией об обновлении
|
||||
if (updateState is UpdateSuccessState &&
|
||||
updateState.updateInfo.updateType == UpdateType.soft) {
|
||||
SoftUpdateModal.show(
|
||||
context,
|
||||
updateEntity: updateState.updateInfo,
|
||||
onUpdate: () {
|
||||
// TODO(yura): реализовать логику обновления приложения
|
||||
},
|
||||
unawaited(
|
||||
SoftUpdateModal.show(
|
||||
context,
|
||||
updateEntity: updateState.updateInfo,
|
||||
onUpdate: () {
|
||||
// TODO(yura): реализовать логику обновления приложения
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
});
|
||||
@@ -64,7 +68,7 @@ class _RootScreenState extends State<RootScreen> {
|
||||
? FloatingActionButton(
|
||||
child: const Icon(Icons.bug_report),
|
||||
onPressed: () {
|
||||
context.pushNamed(DebugRoutes.debugScreenName);
|
||||
unawaited(context.pushNamed(DebugRoutes.debugScreenName));
|
||||
},
|
||||
)
|
||||
: null,
|
||||
|
||||
@@ -10,7 +10,7 @@ part 'update_state.dart';
|
||||
/// {@endtemplate}
|
||||
class UpdateCubit extends Cubit<UpdateState> {
|
||||
/// {@macro UpdateCubit}
|
||||
UpdateCubit(this._updatesRepository) : super(UpdateInitialState());
|
||||
UpdateCubit(this._updatesRepository) : super(const UpdateInitialState());
|
||||
|
||||
/// Репозиторий для проверки обновлений
|
||||
final IUpdateRepository _updatesRepository;
|
||||
@@ -23,7 +23,7 @@ class UpdateCubit extends Cubit<UpdateState> {
|
||||
required String platform,
|
||||
}) async {
|
||||
if (state is UpdateLoadingState) return;
|
||||
emit(UpdateLoadingState());
|
||||
emit(const UpdateLoadingState());
|
||||
try {
|
||||
final updateInfo = await _updatesRepository.checkForUpdates(
|
||||
versionCode: versionCode,
|
||||
|
||||
@@ -25,8 +25,8 @@ void _initErrorHandlers(IDebugService debugService) {
|
||||
|
||||
/// Метод для показа экрана ошибки
|
||||
void _showErrorScreen(Object error, StackTrace? stackTrace) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
AppRouter.rootNavigatorKey.currentState?.push(
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||
await AppRouter.rootNavigatorKey.currentState?.push(
|
||||
MaterialPageRoute(
|
||||
builder: (_) => ErrorScreen(error: error, stackTrace: stackTrace),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user