159 lines
5.1 KiB
Dart
159 lines
5.1 KiB
Dart
import 'package:auto_route/auto_route.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||
import 'package:remever/common/functions.dart';
|
||
import 'package:remever/common/resources.dart';
|
||
import 'package:remever/common/storage.dart';
|
||
import 'package:remever/common/widgets/typography.dart';
|
||
import 'package:remever/common/widgets/wspace.dart';
|
||
import 'package:remever/components/extensions/context.dart';
|
||
import 'package:remever/gen/assets.gen.dart';
|
||
import 'package:remever/router.gr.dart';
|
||
import 'package:remever/screens/dialogs/alert_dialog.dart';
|
||
import 'package:remever/screens/settings/cubit/settings_cubit.dart';
|
||
import 'package:remever/widgets/primary_button.dart';
|
||
|
||
class InitialSettingsState extends StatelessWidget {
|
||
const InitialSettingsState({super.key});
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
return Scaffold(
|
||
backgroundColor: AppColors.bg,
|
||
appBar: _buildAppBar(context),
|
||
body: Padding(
|
||
padding: EdgeInsets.all(16.r),
|
||
child: Column(
|
||
children: [
|
||
_buildSettingsItem(
|
||
context,
|
||
Assets.icons.settingsProfile,
|
||
'Профиль',
|
||
SettingsCubitType.profile,
|
||
),
|
||
HSpace(8),
|
||
_buildSettingsItem(
|
||
context,
|
||
Assets.icons.settingsNotification,
|
||
'Уведомления',
|
||
SettingsCubitType.notifications,
|
||
),
|
||
HSpace(8),
|
||
_buildSettingsItem(
|
||
context,
|
||
Assets.icons.settingsFaq,
|
||
'FAQ',
|
||
SettingsCubitType.faq,
|
||
),
|
||
HSpace(8),
|
||
_buildSettingsItem(
|
||
context,
|
||
Assets.icons.settingsAbout,
|
||
'О приложении',
|
||
SettingsCubitType.about,
|
||
),
|
||
const Spacer(),
|
||
_buildContactDeveloperButton(),
|
||
],
|
||
),
|
||
),
|
||
);
|
||
}
|
||
|
||
/// AppBar экрана настроек
|
||
AppBar _buildAppBar(BuildContext context) {
|
||
return AppBar(
|
||
toolbarHeight: 66.h,
|
||
backgroundColor: AppColors.white,
|
||
shadowColor: Colors.transparent,
|
||
centerTitle: true,
|
||
leadingWidth: 0,
|
||
title: AppTypography('Настройки', type: SemiBold20px()),
|
||
actions: [
|
||
IconButton(
|
||
onPressed: () async {
|
||
final res = await showCuperModalBottomSheet<bool>(
|
||
context: context,
|
||
height: 262.h,
|
||
builder:
|
||
(_) => const AlertInfoDialog(
|
||
title: 'Вы уверены что хотите выйти из своего профиля?',
|
||
acceptTitle: 'Выйти',
|
||
declineTitle: 'Отменить',
|
||
),
|
||
);
|
||
|
||
if (res != null && res) {
|
||
authSecStorage.delete(key: StorageKeys.accessToken);
|
||
authSecStorage.delete(key: StorageKeys.refreshToken);
|
||
|
||
context.replaceRoute(SplashRoute());
|
||
}
|
||
},
|
||
icon: Assets.icons.settingsExit.image(height: 24.h, width: 24.w),
|
||
color: Colors.black,
|
||
),
|
||
],
|
||
);
|
||
}
|
||
|
||
/// Общий метод для построения пункта меню
|
||
Widget _buildSettingsItem(
|
||
BuildContext context,
|
||
AssetGenImage icon,
|
||
String title,
|
||
SettingsCubitType cubitType,
|
||
) {
|
||
return GestureDetector(
|
||
onTap: () => _navigateToSection(context, cubitType),
|
||
child: Container(
|
||
width: double.infinity,
|
||
decoration: BoxDecoration(
|
||
color: AppColors.white,
|
||
borderRadius: BorderRadius.circular(12.r),
|
||
),
|
||
margin: EdgeInsets.zero,
|
||
padding: EdgeInsets.symmetric(vertical: 16.r, horizontal: 12.r),
|
||
child: Row(
|
||
children: [
|
||
icon.image(height: 24.h, width: 24.w),
|
||
WSpace(8),
|
||
AppTypography(title, type: Regular16px()),
|
||
],
|
||
),
|
||
),
|
||
);
|
||
}
|
||
|
||
/// Метод для навигации к разделу через Cubit
|
||
void _navigateToSection(BuildContext context, SettingsCubitType cubitType) {
|
||
switch (cubitType) {
|
||
case SettingsCubitType.initial:
|
||
context.read<SettingsCubit>().toInitialState();
|
||
case SettingsCubitType.profile:
|
||
context.read<SettingsCubit>().toProfileState();
|
||
case SettingsCubitType.notifications:
|
||
context.read<SettingsCubit>().toNotificationsState();
|
||
case SettingsCubitType.faq:
|
||
context.read<SettingsCubit>().toFaqState();
|
||
case SettingsCubitType.about:
|
||
context.read<SettingsCubit>().toAboutState();
|
||
}
|
||
}
|
||
|
||
/// Кнопка "Написать разработчику"
|
||
Widget _buildContactDeveloperButton() {
|
||
return PrimaryButton(
|
||
child: AppTypography(
|
||
'Написать разработчику',
|
||
color: AppColors.white,
|
||
type: Medium14px(),
|
||
),
|
||
onTap: () {},
|
||
);
|
||
}
|
||
}
|
||
|
||
/// Перечисление типов состояний для SettingsCubit
|
||
enum SettingsCubitType { initial, profile, notifications, faq, about }
|