chore(app): обновление flutter и пакетов (#38)

* chore(pubspec,di): Обновить версии SDK и исправить использование AppEnv

* chore(readme): Обновить версии Flutter и Dart, добавить новые библиотеки

---------

Co-authored-by: petrovyuri <petrovyuri@example.com>
This commit is contained in:
Yuri Petrov
2025-11-17 12:49:07 +03:00
committed by GitHub
parent d9c45eb57e
commit 454f3b7929
17 changed files with 114 additions and 51 deletions

View File

@@ -10,7 +10,6 @@ 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_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';
@@ -124,7 +123,7 @@ class _App extends StatelessWidget {
child: BlocConsumer<UpdateCubit, UpdateState>(
listener: (context, state) {
if (state is UpdateSuccessState &&
state.updateInfo.updateType == UpdateType.hard &&
state.updateInfo.updateType == .hard &&
context.mounted) {
router.goNamed(UpdateRoutes.hardUpdateScreenName);
}

View File

@@ -41,7 +41,7 @@ class AppConfigDev implements IAppConfig {
AppConfigDev();
@override
AppEnv get env => AppEnv.dev;
AppEnv get env => .dev;
@override
String get name => 'AppConfigDev';
@@ -67,7 +67,7 @@ class AppConfigProd implements IAppConfig {
AppConfigProd();
@override
AppEnv get env => AppEnv.prod;
AppEnv get env => .prod;
@override
String get name => 'AppConfigProd';
@@ -93,7 +93,7 @@ class AppConfigStage implements IAppConfig {
AppConfigStage();
@override
AppEnv get env => AppEnv.stage;
AppEnv get env => .stage;
@override
String get name => 'AppConfigStage';

View File

@@ -50,7 +50,7 @@ class AppColors extends ThemeExtension<AppColors> with _$AppColorsTailorMixin {
testColor: Colors.red,
errorSnackbarBackground: Color(0xFFD24720),
successSnackbarBackground: Color(0xFF6FB62C),
infoSnackbarBackground: Color.fromARGB(255, 220, 108, 77),
infoSnackbarBackground: .fromARGB(255, 220, 108, 77),
itemTextColor: Color(0xFFFAF3EB),
);
@@ -59,7 +59,7 @@ class AppColors extends ThemeExtension<AppColors> with _$AppColorsTailorMixin {
testColor: Colors.green,
errorSnackbarBackground: Color(0xFF638B8B),
successSnackbarBackground: Color(0xFF93C499),
infoSnackbarBackground: Color.fromARGB(255, 35, 147, 178),
infoSnackbarBackground: .fromARGB(255, 35, 147, 178),
itemTextColor: Colors.white,
);
}

View File

@@ -63,7 +63,7 @@ class AppSnackBar extends StatefulWidget {
_show(
context: context,
message: message,
type: TypeSnackBar.error,
type: .error,
displayDuration: displayDuration,
);
}
@@ -81,7 +81,7 @@ class AppSnackBar extends StatefulWidget {
_show(
context: context,
message: message,
type: TypeSnackBar.info,
type: .info,
displayDuration: displayDuration,
);
}
@@ -99,7 +99,7 @@ class AppSnackBar extends StatefulWidget {
_show(
context: context,
message: message,
type: TypeSnackBar.success,
type: .success,
displayDuration: displayDuration,
);
}
@@ -266,9 +266,9 @@ class _AppSnackBarState extends State<AppSnackBar>
/// [TypeSnackBar.error] - цвет ошибки
Color _getBackgroundColor(TypeSnackBar type) {
return switch (type) {
TypeSnackBar.success => context.appColors.successSnackbarBackground,
TypeSnackBar.error => context.appColors.errorSnackbarBackground,
TypeSnackBar.info => context.appColors.infoSnackbarBackground,
.success => context.appColors.successSnackbarBackground,
.error => context.appColors.errorSnackbarBackground,
.info => context.appColors.infoSnackbarBackground,
};
}
}
@@ -290,17 +290,17 @@ class _Icon extends StatelessWidget {
@override
Widget build(BuildContext context) {
return switch (type) {
TypeSnackBar.success => const Icon(
.success => const Icon(
Icons.check_circle,
color: Colors.white,
size: 32,
),
TypeSnackBar.error => const Icon(
.error => const Icon(
Icons.error,
color: Colors.white,
size: 32,
),
TypeSnackBar.info => const Icon(
.info => const Icon(
Icons.info,
color: Colors.white,
size: 32,

View File

@@ -41,9 +41,9 @@ final class DiContainer {
}) async {
// Инициализация конфигурации приложения
appConfig = switch (env) {
AppEnv.dev => AppConfigDev(),
AppEnv.prod => AppConfigProd(),
AppEnv.stage => AppConfigStage(),
.dev => AppConfigDev(),
.prod => AppConfigProd(),
.stage => AppConfigStage(),
};
// Инициализация HTTP клиента

View File

@@ -155,9 +155,9 @@ final class DiRepositories {
}) {
try {
final repo = switch (environment) {
AppEnv.dev => mockFactory(),
AppEnv.prod => mainFactory(),
AppEnv.stage =>
.dev => mockFactory(),
.prod => mainFactory(),
.stage =>
_mockReposToSwitch.contains(T) ? mockFactory() : mainFactory(),
};

View File

@@ -6,7 +6,6 @@ import 'package:friflex_starter/app/ui_kit/app_snackbar.dart';
import 'package:friflex_starter/features/update/domain/state/cubit/update_cubit.dart';
import 'package:friflex_starter/features/update/presentation/components/soft_modal_sheet.dart';
import 'package:friflex_starter/features/update/update_routes.dart';
import 'package:friflex_starter/features/update/update_type.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
@@ -79,7 +78,7 @@ class _ComponentsScreenState extends State<ComponentsScreen> {
onPressed: () {
final updateCubitState = context.read<UpdateCubit>().state;
if (updateCubitState is UpdateSuccessState &&
updateCubitState.updateInfo.updateType == UpdateType.soft) {
updateCubitState.updateInfo.updateType == .soft) {
unawaited(
SoftUpdateModal.show(
context,

View File

@@ -3,11 +3,9 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:friflex_starter/app/app_context_ext.dart';
import 'package:friflex_starter/app/app_env.dart';
import 'package:friflex_starter/features/debug/debug_routes.dart';
import 'package:friflex_starter/features/update/domain/state/cubit/update_cubit.dart';
import 'package:friflex_starter/features/update/presentation/components/soft_modal_sheet.dart';
import 'package:friflex_starter/features/update/update_type.dart';
import 'package:go_router/go_router.dart';
/// {@template root_screen}
@@ -47,7 +45,7 @@ class _RootScreenState extends State<RootScreen> {
// Проверяем только состояние успеха с доступной информацией об обновлении
if (updateState is UpdateSuccessState &&
updateState.updateInfo.updateType == UpdateType.soft) {
updateState.updateInfo.updateType == .soft) {
unawaited(
SoftUpdateModal.show(
context,
@@ -64,7 +62,7 @@ class _RootScreenState extends State<RootScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: context.di.env != AppEnv.prod
floatingActionButton: context.di.env != .prod
? FloatingActionButton(
child: const Icon(Icons.bug_report),
onPressed: () {

View File

@@ -1,12 +1,11 @@
import 'package:friflex_starter/features/update/domain/entity/update_entity.dart';
import 'package:friflex_starter/features/update/domain/repository/i_update_repository.dart';
import 'package:friflex_starter/features/update/update_type.dart';
/// Мок обновления обязательное, можно использовать для тестирования
const mockHardUpdateEntity = UpdateEntity(
availableVersion: '2.0.0',
updateUrl: 'https://example.com/update',
updateType: UpdateType.hard,
updateType: .hard,
whatIsNew: 'Добавлены новые функции и исправлены ошибки.',
);
@@ -14,7 +13,7 @@ const mockHardUpdateEntity = UpdateEntity(
const mockSoftUpdateEntity = UpdateEntity(
availableVersion: '2.0.0',
updateUrl: 'https://example.com/update',
updateType: UpdateType.soft,
updateType: .soft,
whatIsNew: 'Добавлены новые функции и исправлены ошибки.',
);

View File

@@ -1,4 +1,3 @@
import 'package:friflex_starter/app/app_env.dart';
import 'package:friflex_starter/runner/app_runner.dart';
void main() => AppRunner(AppEnv.prod).run();
void main() => AppRunner(.prod).run();

View File

@@ -1,4 +1,3 @@
import 'package:friflex_starter/app/app_env.dart';
import 'package:friflex_starter/runner/app_runner.dart';
void main() => AppRunner(AppEnv.dev).run();
void main() => AppRunner(.dev).run();

View File

@@ -1,4 +1,3 @@
import 'package:friflex_starter/app/app_env.dart';
import 'package:friflex_starter/runner/app_runner.dart';
void main() => AppRunner(AppEnv.prod).run();
void main() => AppRunner(.prod).run();

View File

@@ -1,4 +1,3 @@
import 'package:friflex_starter/app/app_env.dart';
import 'package:friflex_starter/runner/app_runner.dart';
void main() => AppRunner(AppEnv.stage).run();
void main() => AppRunner(.stage).run();