2025-11-17 11:51:42 +03:00
|
|
|
|
import 'dart:async';
|
|
|
|
|
|
|
2025-06-06 16:45:40 +03:00
|
|
|
|
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';
|
2025-09-26 08:21:42 +03:00
|
|
|
|
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:go_router/go_router.dart';
|
|
|
|
|
|
import 'package:provider/provider.dart';
|
2025-06-06 16:45:40 +03:00
|
|
|
|
|
2025-06-20 16:50:48 +03:00
|
|
|
|
/// {@template components_screen}
|
|
|
|
|
|
/// Экран для демонстрации и тестирования компонентов приложения.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// Отвечает за:
|
|
|
|
|
|
/// - Демонстрацию различных типов снекбаров (ошибка, успех, информация)
|
|
|
|
|
|
/// - Тестирование кастомных UI компонентов
|
|
|
|
|
|
/// - Предоставление примеров использования компонентов
|
|
|
|
|
|
/// - Валидацию корректности работы компонентов
|
2025-06-06 16:45:40 +03:00
|
|
|
|
/// {@endtemplate}
|
|
|
|
|
|
class ComponentsScreen extends StatefulWidget {
|
2025-06-20 16:50:48 +03:00
|
|
|
|
/// {@macro components_screen}
|
2025-06-06 16:45:40 +03:00
|
|
|
|
const ComponentsScreen({super.key});
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
State<ComponentsScreen> createState() => _ComponentsScreenState();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-20 16:50:48 +03:00
|
|
|
|
/// {@template components_screen_state}
|
|
|
|
|
|
/// Состояние экрана компонентов.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// Управляет отображением различных типов снекбаров
|
|
|
|
|
|
/// и демонстрирует их функциональность.
|
|
|
|
|
|
/// {@endtemplate}
|
2025-06-06 16:45:40 +03:00
|
|
|
|
class _ComponentsScreenState extends State<ComponentsScreen> {
|
2025-06-20 16:50:48 +03:00
|
|
|
|
/// {@macro components_screen_state}
|
|
|
|
|
|
_ComponentsScreenState();
|
|
|
|
|
|
|
2025-06-06 16:45:40 +03:00
|
|
|
|
@override
|
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
|
return Scaffold(
|
|
|
|
|
|
appBar: AppBar(title: const Text('Компоненты')),
|
|
|
|
|
|
body: Center(
|
|
|
|
|
|
child: Column(
|
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
|
children: [
|
|
|
|
|
|
const HBox(16),
|
|
|
|
|
|
ElevatedButton(
|
|
|
|
|
|
onPressed: () {
|
|
|
|
|
|
AppSnackBar.showError(
|
|
|
|
|
|
context,
|
|
|
|
|
|
message:
|
|
|
|
|
|
'Произошла ошибка, это просто длинное сообщение, для проверки, которое занимает 3 строчки',
|
|
|
|
|
|
);
|
|
|
|
|
|
},
|
|
|
|
|
|
child: const Text('Показать снекбар с ошибкой'),
|
|
|
|
|
|
),
|
|
|
|
|
|
const HBox(16),
|
|
|
|
|
|
ElevatedButton(
|
|
|
|
|
|
onPressed: () {
|
|
|
|
|
|
AppSnackBar.showSuccess(
|
|
|
|
|
|
context: context,
|
|
|
|
|
|
message:
|
|
|
|
|
|
'Все супер, это просто длинное сообщение, для проверки, которое занимает 3 строчки',
|
|
|
|
|
|
);
|
|
|
|
|
|
},
|
|
|
|
|
|
child: const Text('Показать снекбар с успехом'),
|
|
|
|
|
|
),
|
2025-06-07 19:03:13 +03:00
|
|
|
|
const HBox(16),
|
|
|
|
|
|
ElevatedButton(
|
|
|
|
|
|
onPressed: () {
|
|
|
|
|
|
AppSnackBar.showInfo(context, message: 'Это просто сообщение');
|
|
|
|
|
|
},
|
|
|
|
|
|
child: const Text('Показать снекбар с информацией'),
|
|
|
|
|
|
),
|
2025-09-26 08:21:42 +03:00
|
|
|
|
const HBox(16),
|
|
|
|
|
|
ElevatedButton(
|
|
|
|
|
|
onPressed: () {
|
|
|
|
|
|
final updateCubitState = context.read<UpdateCubit>().state;
|
|
|
|
|
|
if (updateCubitState is UpdateSuccessState &&
|
2025-11-17 12:49:07 +03:00
|
|
|
|
updateCubitState.updateInfo.updateType == .soft) {
|
2025-11-17 11:51:42 +03:00
|
|
|
|
unawaited(
|
|
|
|
|
|
SoftUpdateModal.show(
|
|
|
|
|
|
context,
|
|
|
|
|
|
updateEntity: updateCubitState.updateInfo,
|
|
|
|
|
|
onUpdate: () {
|
|
|
|
|
|
AppSnackBar.showSuccess(
|
|
|
|
|
|
context: context,
|
|
|
|
|
|
message: 'Начато обновление приложения',
|
|
|
|
|
|
);
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
2025-09-26 08:21:42 +03:00
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
child: const Text('Показать модальное окно обновления'),
|
|
|
|
|
|
),
|
|
|
|
|
|
const HBox(16),
|
|
|
|
|
|
ElevatedButton(
|
|
|
|
|
|
onPressed: () {
|
2025-11-17 11:51:42 +03:00
|
|
|
|
unawaited(context.pushNamed(UpdateRoutes.hardUpdateScreenName));
|
2025-09-26 08:21:42 +03:00
|
|
|
|
},
|
|
|
|
|
|
child: const Text('Переход на экран Hard Update обновления'),
|
|
|
|
|
|
),
|
2025-06-06 16:45:40 +03:00
|
|
|
|
],
|
|
|
|
|
|
),
|
|
|
|
|
|
),
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|