156 lines
5.3 KiB
Dart
156 lines
5.3 KiB
Dart
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),
|
||
),
|
||
);
|
||
}
|
||
}
|