mirror of
https://github.com/smmarty/friflex_flutter_starter.git
synced 2026-02-05 03:32:18 +00:00
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:
64
.cursorrules
Normal file
64
.cursorrules
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# Правила для Cursor AI
|
||||||
|
|
||||||
|
## Соглашение о коммитах
|
||||||
|
|
||||||
|
При генерации сообщений коммитов ВСЕГДА используй следующий формат:
|
||||||
|
`<тип>(<контекст1>,<контекст2>,...): <короткое описание>`
|
||||||
|
|
||||||
|
Для Pull Request формат:
|
||||||
|
`<тип>(<контекст1>,<контекст2>,...): <короткое описание>`
|
||||||
|
|
||||||
|
Где:
|
||||||
|
- `<тип>` - тип коммита (см. ниже)
|
||||||
|
- `<контекст>` - модули/компоненты, которые изменяются (можно указать несколько через запятую)
|
||||||
|
- `<короткое описание>` - краткое описание изменений на русском языке
|
||||||
|
|
||||||
|
### Типы коммитов согласно convention:
|
||||||
|
|
||||||
|
- **feat** - новая функция
|
||||||
|
- **fix** - исправление ошибок
|
||||||
|
- **refactor** - изменение кода, которое не исправляет ошибку и не добавляет функции (рефакторинг кода)
|
||||||
|
- **build** - изменения, влияющие на систему сборки или внешние зависимости (примеры областей: android, ios, linux и так далее)
|
||||||
|
- **docs** - изменения только в документации
|
||||||
|
- **chore** - добавление/обновление/настройка инструментов и библиотек (пример: pubspec.yaml)
|
||||||
|
- **test** - добавление недостающих тестов или исправление существующих тестов
|
||||||
|
- **ci** - изменения в файлах конфигурации и скриптах CI (примеры областей: папка CI)
|
||||||
|
|
||||||
|
### Контекст (scope):
|
||||||
|
|
||||||
|
Указывай модуль или компонент, который изменяется. Можно указать несколько через запятую:
|
||||||
|
- `app` - основное приложение
|
||||||
|
- `di` - dependency injection
|
||||||
|
- `auth` - аутентификация
|
||||||
|
- `api` - API endpoints
|
||||||
|
- `db` - база данных
|
||||||
|
- `config` - конфигурация
|
||||||
|
- `i18n` - интернационализация
|
||||||
|
- `scripts` - скрипты
|
||||||
|
- `pubspec` - зависимости проекта
|
||||||
|
- `android`, `ios`, `linux` - платформы
|
||||||
|
- другие модули проекта
|
||||||
|
|
||||||
|
### Примеры правильных коммитов:
|
||||||
|
|
||||||
|
- `feat(app,di,auth): Добавить локальный репозиторий`
|
||||||
|
- `fix(api): Исправить валидацию запросов`
|
||||||
|
- `docs(i18n): Обновить руководство по генерации`
|
||||||
|
- `refactor(handler): Оптимизировать обработку запросов`
|
||||||
|
- `test(security): Добавить тесты для rate limiter`
|
||||||
|
- `chore(pubspec): Обновить зависимости`
|
||||||
|
|
||||||
|
## Язык
|
||||||
|
|
||||||
|
- Всегда отвечай на русском языке
|
||||||
|
- Коммиты пиши на русском языке
|
||||||
|
- Документацию веди на русском языке
|
||||||
|
- Язык описания PR - Русский
|
||||||
|
|
||||||
|
## Стиль кода
|
||||||
|
|
||||||
|
- Следуй Dart/Flutter conventions
|
||||||
|
- Используй осмысленные имена переменных и функций
|
||||||
|
- Добавляй комментарии к публичным функциям
|
||||||
|
- Группируй импорты (стандартные, внешние, внутренние)
|
||||||
|
|
||||||
24
README.md
24
README.md
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
# 🚀 Friflex Flutter Starter - Корпоративный шаблон
|
# 🚀 Friflex Flutter Starter - Корпоративный шаблон
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
Корпоративный стартовый шаблон для разработки масштабируемых Flutter-приложений
|
Корпоративный стартовый шаблон для разработки масштабируемых Flutter-приложений
|
||||||
@@ -24,6 +24,7 @@
|
|||||||
- 🌍 Поддержка интернационализации
|
- 🌍 Поддержка интернационализации
|
||||||
- 🎨 UI Kit и система токенов дизайна
|
- 🎨 UI Kit и система токенов дизайна
|
||||||
- 🔍 Инструменты отладки и мониторинга
|
- 🔍 Инструменты отладки и мониторинга
|
||||||
|
- ⚡ Современный Dart 3.10+ с dot shorthands
|
||||||
|
|
||||||
## 🎯 Для чего нужен стартер
|
## 🎯 Для чего нужен стартер
|
||||||
|
|
||||||
@@ -90,20 +91,27 @@ features/
|
|||||||
|
|
||||||
| Категория | Библиотека | Версия | Описание |
|
| Категория | Библиотека | Версия | Описание |
|
||||||
|-----------|------------|--------|----------|
|
|-----------|------------|--------|----------|
|
||||||
| 🧭 **Навигация** | [go_router](https://pub.dev/packages/go_router) | `16.2.4` | Декларативный роутинг |
|
| 🧭 **Навигация** | [go_router](https://pub.dev/packages/go_router) | `17.0.0` | Декларативный роутинг |
|
||||||
| 🔄 **State Management** | [flutter_bloc](https://pub.dev/packages/flutter_bloc) | `9.1.1` | Управление состоянием |
|
| 🔄 **State Management** | [flutter_bloc](https://pub.dev/packages/flutter_bloc) | `9.1.1` | Управление состоянием |
|
||||||
| 💉 **DI** | Custom InheritedWidget | - | Внедрение зависимостей |
|
| 💉 **DI** | Custom InheritedWidget | - | Внедрение зависимостей |
|
||||||
| 🎨 **Resources** | [flutter_gen](https://pub.dev/packages/flutter_gen) | `5.12.0` | Генерация ресурсов |
|
| 🎨 **Resources** | [flutter_gen](https://pub.dev/packages/flutter_gen) | `5.12.0` | Генерация ресурсов |
|
||||||
| 🌐 **HTTP** | [dio](https://pub.dev/packages/dio) | `5.9.0` | HTTP клиент |
|
| 🌐 **HTTP** | [dio](https://pub.dev/packages/dio) | `5.9.0` | HTTP клиент |
|
||||||
|
| 🎨 **SVG** | [flutter_svg](https://pub.dev/packages/flutter_svg) | `2.2.2` | Поддержка SVG |
|
||||||
|
| 🎬 **Animation** | [lottie](https://pub.dev/packages/lottie) | `3.3.2` | Анимации Lottie |
|
||||||
| 🔒 **Secure Storage** | [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) | - | Защищенное хранилище |
|
| 🔒 **Secure Storage** | [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) | - | Защищенное хранилище |
|
||||||
| 📊 **Logging** | [talker](https://pub.dev/packages/talker_flutter) | `5.0.1` | Логирование и отладка |
|
| 📊 **Logging** | [talker](https://pub.dev/packages/talker_flutter) | `5.0.2` | Логирование и отладка |
|
||||||
|
| 🎨 **Theme** | [theme_tailor](https://pub.dev/packages/theme_tailor) | `3.1.1` | Генерация тем |
|
||||||
|
| ⚙️ **Environment** | [envied](https://pub.dev/packages/envied) | `1.3.1` | Управление переменными окружения |
|
||||||
|
|
||||||
### 🔧 Инструменты разработки
|
### 🔧 Инструменты разработки
|
||||||
|
|
||||||
- **📝 Линтинг**: корпоративные правила кода
|
| Инструмент | Версия | Описание |
|
||||||
- **🏗️ Code Generation**: `build_runner` для генерации кода
|
|-----------|--------|----------|
|
||||||
- **🌍 Локализация**: `flutter_localizations` + `intl`
|
| **📝 Линтинг** | `flutter_lints: 6.0.0` | Корпоративные правила кода |
|
||||||
- **⚙️ Окружения**: `envied` для управления переменными
|
| **🏗️ Code Generation** | `build_runner: 2.10.3` | Генерация кода |
|
||||||
|
| **🌍 Локализация** | `intl: 0.20.2` | Интернационализация |
|
||||||
|
| **⚙️ Environment** | `envied: 1.3.1` + `envied_generator: 1.3.1` | Управление переменными окружения |
|
||||||
|
| **🎨 Theme Generator** | `theme_tailor: 3.1.1` | Генерация тем |
|
||||||
|
|
||||||
## 🗂️ Структура проекта
|
## 🗂️ Структура проекта
|
||||||
|
|
||||||
|
|||||||
@@ -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/splash/splash_screen.dart';
|
||||||
import 'package:friflex_starter/features/update/domain/state/cubit/update_cubit.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_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/gen/app_localizations.dart';
|
||||||
import 'package:friflex_starter/l10n/localization_notifier.dart';
|
import 'package:friflex_starter/l10n/localization_notifier.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
@@ -124,7 +123,7 @@ class _App extends StatelessWidget {
|
|||||||
child: BlocConsumer<UpdateCubit, UpdateState>(
|
child: BlocConsumer<UpdateCubit, UpdateState>(
|
||||||
listener: (context, state) {
|
listener: (context, state) {
|
||||||
if (state is UpdateSuccessState &&
|
if (state is UpdateSuccessState &&
|
||||||
state.updateInfo.updateType == UpdateType.hard &&
|
state.updateInfo.updateType == .hard &&
|
||||||
context.mounted) {
|
context.mounted) {
|
||||||
router.goNamed(UpdateRoutes.hardUpdateScreenName);
|
router.goNamed(UpdateRoutes.hardUpdateScreenName);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ class AppConfigDev implements IAppConfig {
|
|||||||
AppConfigDev();
|
AppConfigDev();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
AppEnv get env => AppEnv.dev;
|
AppEnv get env => .dev;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get name => 'AppConfigDev';
|
String get name => 'AppConfigDev';
|
||||||
@@ -67,7 +67,7 @@ class AppConfigProd implements IAppConfig {
|
|||||||
AppConfigProd();
|
AppConfigProd();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
AppEnv get env => AppEnv.prod;
|
AppEnv get env => .prod;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get name => 'AppConfigProd';
|
String get name => 'AppConfigProd';
|
||||||
@@ -93,7 +93,7 @@ class AppConfigStage implements IAppConfig {
|
|||||||
AppConfigStage();
|
AppConfigStage();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
AppEnv get env => AppEnv.stage;
|
AppEnv get env => .stage;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get name => 'AppConfigStage';
|
String get name => 'AppConfigStage';
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class AppColors extends ThemeExtension<AppColors> with _$AppColorsTailorMixin {
|
|||||||
testColor: Colors.red,
|
testColor: Colors.red,
|
||||||
errorSnackbarBackground: Color(0xFFD24720),
|
errorSnackbarBackground: Color(0xFFD24720),
|
||||||
successSnackbarBackground: Color(0xFF6FB62C),
|
successSnackbarBackground: Color(0xFF6FB62C),
|
||||||
infoSnackbarBackground: Color.fromARGB(255, 220, 108, 77),
|
infoSnackbarBackground: .fromARGB(255, 220, 108, 77),
|
||||||
itemTextColor: Color(0xFFFAF3EB),
|
itemTextColor: Color(0xFFFAF3EB),
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ class AppColors extends ThemeExtension<AppColors> with _$AppColorsTailorMixin {
|
|||||||
testColor: Colors.green,
|
testColor: Colors.green,
|
||||||
errorSnackbarBackground: Color(0xFF638B8B),
|
errorSnackbarBackground: Color(0xFF638B8B),
|
||||||
successSnackbarBackground: Color(0xFF93C499),
|
successSnackbarBackground: Color(0xFF93C499),
|
||||||
infoSnackbarBackground: Color.fromARGB(255, 35, 147, 178),
|
infoSnackbarBackground: .fromARGB(255, 35, 147, 178),
|
||||||
itemTextColor: Colors.white,
|
itemTextColor: Colors.white,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ class AppSnackBar extends StatefulWidget {
|
|||||||
_show(
|
_show(
|
||||||
context: context,
|
context: context,
|
||||||
message: message,
|
message: message,
|
||||||
type: TypeSnackBar.error,
|
type: .error,
|
||||||
displayDuration: displayDuration,
|
displayDuration: displayDuration,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -81,7 +81,7 @@ class AppSnackBar extends StatefulWidget {
|
|||||||
_show(
|
_show(
|
||||||
context: context,
|
context: context,
|
||||||
message: message,
|
message: message,
|
||||||
type: TypeSnackBar.info,
|
type: .info,
|
||||||
displayDuration: displayDuration,
|
displayDuration: displayDuration,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -99,7 +99,7 @@ class AppSnackBar extends StatefulWidget {
|
|||||||
_show(
|
_show(
|
||||||
context: context,
|
context: context,
|
||||||
message: message,
|
message: message,
|
||||||
type: TypeSnackBar.success,
|
type: .success,
|
||||||
displayDuration: displayDuration,
|
displayDuration: displayDuration,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -266,9 +266,9 @@ class _AppSnackBarState extends State<AppSnackBar>
|
|||||||
/// [TypeSnackBar.error] - цвет ошибки
|
/// [TypeSnackBar.error] - цвет ошибки
|
||||||
Color _getBackgroundColor(TypeSnackBar type) {
|
Color _getBackgroundColor(TypeSnackBar type) {
|
||||||
return switch (type) {
|
return switch (type) {
|
||||||
TypeSnackBar.success => context.appColors.successSnackbarBackground,
|
.success => context.appColors.successSnackbarBackground,
|
||||||
TypeSnackBar.error => context.appColors.errorSnackbarBackground,
|
.error => context.appColors.errorSnackbarBackground,
|
||||||
TypeSnackBar.info => context.appColors.infoSnackbarBackground,
|
.info => context.appColors.infoSnackbarBackground,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -290,17 +290,17 @@ class _Icon extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return switch (type) {
|
return switch (type) {
|
||||||
TypeSnackBar.success => const Icon(
|
.success => const Icon(
|
||||||
Icons.check_circle,
|
Icons.check_circle,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
size: 32,
|
size: 32,
|
||||||
),
|
),
|
||||||
TypeSnackBar.error => const Icon(
|
.error => const Icon(
|
||||||
Icons.error,
|
Icons.error,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
size: 32,
|
size: 32,
|
||||||
),
|
),
|
||||||
TypeSnackBar.info => const Icon(
|
.info => const Icon(
|
||||||
Icons.info,
|
Icons.info,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
size: 32,
|
size: 32,
|
||||||
|
|||||||
@@ -41,9 +41,9 @@ final class DiContainer {
|
|||||||
}) async {
|
}) async {
|
||||||
// Инициализация конфигурации приложения
|
// Инициализация конфигурации приложения
|
||||||
appConfig = switch (env) {
|
appConfig = switch (env) {
|
||||||
AppEnv.dev => AppConfigDev(),
|
.dev => AppConfigDev(),
|
||||||
AppEnv.prod => AppConfigProd(),
|
.prod => AppConfigProd(),
|
||||||
AppEnv.stage => AppConfigStage(),
|
.stage => AppConfigStage(),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Инициализация HTTP клиента
|
// Инициализация HTTP клиента
|
||||||
|
|||||||
@@ -155,9 +155,9 @@ final class DiRepositories {
|
|||||||
}) {
|
}) {
|
||||||
try {
|
try {
|
||||||
final repo = switch (environment) {
|
final repo = switch (environment) {
|
||||||
AppEnv.dev => mockFactory(),
|
.dev => mockFactory(),
|
||||||
AppEnv.prod => mainFactory(),
|
.prod => mainFactory(),
|
||||||
AppEnv.stage =>
|
.stage =>
|
||||||
_mockReposToSwitch.contains(T) ? mockFactory() : mainFactory(),
|
_mockReposToSwitch.contains(T) ? mockFactory() : mainFactory(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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/domain/state/cubit/update_cubit.dart';
|
||||||
import 'package:friflex_starter/features/update/presentation/components/soft_modal_sheet.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_routes.dart';
|
||||||
import 'package:friflex_starter/features/update/update_type.dart';
|
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
@@ -79,7 +78,7 @@ class _ComponentsScreenState extends State<ComponentsScreen> {
|
|||||||
onPressed: () {
|
onPressed: () {
|
||||||
final updateCubitState = context.read<UpdateCubit>().state;
|
final updateCubitState = context.read<UpdateCubit>().state;
|
||||||
if (updateCubitState is UpdateSuccessState &&
|
if (updateCubitState is UpdateSuccessState &&
|
||||||
updateCubitState.updateInfo.updateType == UpdateType.soft) {
|
updateCubitState.updateInfo.updateType == .soft) {
|
||||||
unawaited(
|
unawaited(
|
||||||
SoftUpdateModal.show(
|
SoftUpdateModal.show(
|
||||||
context,
|
context,
|
||||||
|
|||||||
@@ -3,11 +3,9 @@ import 'dart:async';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:friflex_starter/app/app_context_ext.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/debug/debug_routes.dart';
|
||||||
import 'package:friflex_starter/features/update/domain/state/cubit/update_cubit.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/presentation/components/soft_modal_sheet.dart';
|
||||||
import 'package:friflex_starter/features/update/update_type.dart';
|
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
|
|
||||||
/// {@template root_screen}
|
/// {@template root_screen}
|
||||||
@@ -47,7 +45,7 @@ class _RootScreenState extends State<RootScreen> {
|
|||||||
|
|
||||||
// Проверяем только состояние успеха с доступной информацией об обновлении
|
// Проверяем только состояние успеха с доступной информацией об обновлении
|
||||||
if (updateState is UpdateSuccessState &&
|
if (updateState is UpdateSuccessState &&
|
||||||
updateState.updateInfo.updateType == UpdateType.soft) {
|
updateState.updateInfo.updateType == .soft) {
|
||||||
unawaited(
|
unawaited(
|
||||||
SoftUpdateModal.show(
|
SoftUpdateModal.show(
|
||||||
context,
|
context,
|
||||||
@@ -64,7 +62,7 @@ class _RootScreenState extends State<RootScreen> {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
floatingActionButton: context.di.env != AppEnv.prod
|
floatingActionButton: context.di.env != .prod
|
||||||
? FloatingActionButton(
|
? FloatingActionButton(
|
||||||
child: const Icon(Icons.bug_report),
|
child: const Icon(Icons.bug_report),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
import 'package:friflex_starter/features/update/domain/entity/update_entity.dart';
|
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/domain/repository/i_update_repository.dart';
|
||||||
import 'package:friflex_starter/features/update/update_type.dart';
|
|
||||||
|
|
||||||
/// Мок обновления обязательное, можно использовать для тестирования
|
/// Мок обновления обязательное, можно использовать для тестирования
|
||||||
const mockHardUpdateEntity = UpdateEntity(
|
const mockHardUpdateEntity = UpdateEntity(
|
||||||
availableVersion: '2.0.0',
|
availableVersion: '2.0.0',
|
||||||
updateUrl: 'https://example.com/update',
|
updateUrl: 'https://example.com/update',
|
||||||
updateType: UpdateType.hard,
|
updateType: .hard,
|
||||||
whatIsNew: 'Добавлены новые функции и исправлены ошибки.',
|
whatIsNew: 'Добавлены новые функции и исправлены ошибки.',
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -14,7 +13,7 @@ const mockHardUpdateEntity = UpdateEntity(
|
|||||||
const mockSoftUpdateEntity = UpdateEntity(
|
const mockSoftUpdateEntity = UpdateEntity(
|
||||||
availableVersion: '2.0.0',
|
availableVersion: '2.0.0',
|
||||||
updateUrl: 'https://example.com/update',
|
updateUrl: 'https://example.com/update',
|
||||||
updateType: UpdateType.soft,
|
updateType: .soft,
|
||||||
whatIsNew: 'Добавлены новые функции и исправлены ошибки.',
|
whatIsNew: 'Добавлены новые функции и исправлены ошибки.',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:friflex_starter/app/app_env.dart';
|
|
||||||
import 'package:friflex_starter/runner/app_runner.dart';
|
import 'package:friflex_starter/runner/app_runner.dart';
|
||||||
|
|
||||||
void main() => AppRunner(AppEnv.prod).run();
|
void main() => AppRunner(.prod).run();
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:friflex_starter/app/app_env.dart';
|
|
||||||
import 'package:friflex_starter/runner/app_runner.dart';
|
import 'package:friflex_starter/runner/app_runner.dart';
|
||||||
|
|
||||||
void main() => AppRunner(AppEnv.dev).run();
|
void main() => AppRunner(.dev).run();
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:friflex_starter/app/app_env.dart';
|
|
||||||
import 'package:friflex_starter/runner/app_runner.dart';
|
import 'package:friflex_starter/runner/app_runner.dart';
|
||||||
|
|
||||||
void main() => AppRunner(AppEnv.prod).run();
|
void main() => AppRunner(.prod).run();
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:friflex_starter/app/app_env.dart';
|
|
||||||
import 'package:friflex_starter/runner/app_runner.dart';
|
import 'package:friflex_starter/runner/app_runner.dart';
|
||||||
|
|
||||||
void main() => AppRunner(AppEnv.stage).run();
|
void main() => AppRunner(.stage).run();
|
||||||
|
|||||||
@@ -1273,5 +1273,5 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.3"
|
version: "3.1.3"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.9.2 <4.0.0"
|
dart: ">=3.10.0 <4.0.0"
|
||||||
flutter: ">=3.35.5"
|
flutter: ">=3.38.1"
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
|||||||
version: 0.0.1+1
|
version: 0.0.1+1
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ^3.9.2
|
sdk: ">=3.10.0 <4.0.0"
|
||||||
flutter: ">=3.35.5"
|
flutter: ">=3.38.1"
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
|
|||||||
Reference in New Issue
Block a user