Chepuhagram/lib/presentation/screens/settings_screen.dart

156 lines
5.3 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:chepuhagram/presentation/screens/account_settings_screen.dart';
import 'package:chepuhagram/presentation/screens/login_screen.dart';
import 'package:chepuhagram/presentation/screens/privacy_settings_menu_screen.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '/logic/auth_provider.dart';
import '/core/theme_manager.dart';
class SettingsScreen extends StatelessWidget {
const SettingsScreen({super.key});
@override
Widget build(BuildContext context) {
final themeProv = context.watch<ThemeProvider>();
final authProv = context.watch<AuthProvider>();
final accountEmail = authProv.email?.isNotEmpty == true
? authProv.email!
: authProv.username?.isNotEmpty == true
? '@${authProv.username!}'
: 'Не указано';
return Scaffold(
appBar: AppBar(title: const Text("Настройки")),
body: Column(
children: [
// Секция Профиля
UserAccountsDrawerHeader(
accountName: Text(authProv.displayName),
accountEmail: Text(accountEmail),
currentAccountPicture: const CircleAvatar(
child: Icon(Icons.person, size: 40),
),
decoration: const BoxDecoration(color: Colors.transparent),
),
const Divider(),
ListTile(
leading: const Icon(Icons.person_outline),
title: const Text('Аккаунт'),
subtitle: const Text('Имя, телефон, почта, информация о себе'),
trailing: const Icon(Icons.chevron_right),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => const AccountSettingsScreen(),
),
);
},
),
const Divider(),
ListTile(
leading: const Icon(Icons.shield_outlined),
title: const Text('Конфиденциальность'),
subtitle: const Text('Безопасность и видимость данных профиля'),
trailing: const Icon(Icons.chevron_right),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => const PrivacySettingsMenuScreen(),
),
);
},
),
const Divider(),
SwitchListTile(
secondary: const Icon(Icons.dark_mode),
title: const Text("Ночной режим"),
value: themeProv.themeMode == ThemeMode.dark,
onChanged: (val) => themeProv.toggleTheme(val),
),
// Выбор цвета акцента
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Icon(Icons.palette_outlined),
SizedBox(width: 10),
const Text("Цвет темы"),
Spacer(),
_colorCircle(context, const Color(0xFF24A1DE), themeProv),
_colorCircle(context, const Color(0xFF3E8E7E), themeProv),
_colorCircle(context, const Color(0xFF8E3E7E), themeProv),
_colorCircle(context, const Color(0xFFFF9800), themeProv),
_colorCircle(context, const Color(0xFFF44336), themeProv),
],
),
],
),
),
const Divider(),
// Выход
ListTile(
leading: const Icon(Icons.exit_to_app, color: Colors.red),
title: const Text(
"Выйти из аккаунта",
style: TextStyle(color: Colors.red),
),
onTap: () async {
await authProv.logout();
if (context.mounted) {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (_) => const LoginScreen()),
);
}
},
),
const Spacer(),
const Center(
child: Text(
"Chepuhagram for Android v1.0.0",
style: TextStyle(color: Colors.grey, fontSize: 12),
),
),
const Center(
child: Text(
"Made by ArturKarasevich",
style: TextStyle(color: Colors.grey, fontSize: 12),
),
),
SizedBox(height: 10,)
],
),
);
}
Widget _colorCircle(BuildContext context, Color color, ThemeProvider prov) {
bool isSelected = prov.accentColor == color;
return GestureDetector(
onTap: () => prov.updateAccentColor(color),
child: Container(
padding: const EdgeInsets.all(2),
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: isSelected ? color : Colors.transparent,
width: 2,
),
),
child: CircleAvatar(backgroundColor: color, radius: 15),
),
);
}
}