Files
Qlyra/lib/frontend/screens/profile/komet_settings_screen.dart
T

156 lines
6.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:material_symbols_icons/symbols.dart';
import '../../widgets/connection_status.dart';
import '../../../core/config/komet_settings.dart';
import '../../../main.dart';
import '../../widgets/section_header.dart';
import '../../widgets/settings_card.dart';
class KometSettingsScreen extends StatelessWidget {
const KometSettingsScreen({super.key});
@override
Widget build(BuildContext context) {
final cs = Theme.of(context).colorScheme;
return Scaffold(
backgroundColor: cs.surface,
appBar: ConnectionTitleBar(
titleText: 'Komet',
backgroundColor: cs.surface,
),
body: SafeArea(
top: false,
child: ListView(
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.fromLTRB(16, 12, 16, 120),
children: [
const SectionHeader(
'Сообщения',
padding: EdgeInsets.fromLTRB(8, 0, 8, 8),
fontSize: 14,
),
SettingsCard(
children: [
ValueListenableBuilder<bool>(
valueListenable: KometSettings.viewDeleted,
builder: (context, value, _) => SettingsToggleTile(
icon: Symbols.delete_history,
label: 'View deleted message',
subtitle: 'Показывать удалённые сообщения',
value: value,
onChanged: KometSettings.setViewDeleted,
),
),
ValueListenableBuilder<bool>(
valueListenable: KometSettings.viewRedacted,
builder: (context, value, _) => SettingsToggleTile(
icon: Symbols.history_edu,
label: 'View redacted message history',
subtitle: 'Показывать историю у редактированных сообщений',
value: value,
onChanged: KometSettings.setViewRedacted,
),
),
ValueListenableBuilder<bool>(
valueListenable: KometSettings.fullTimestamp,
builder: (context, value, _) => SettingsToggleTile(
icon: Symbols.schedule,
label: 'View full timestamp',
subtitle: 'Показывать время в секундах у сообщений',
value: value,
onChanged: KometSettings.setFullTimestamp,
),
),
],
),
const SizedBox(height: 20),
const SectionHeader(
'Папки',
padding: EdgeInsets.fromLTRB(8, 0, 8, 8),
fontSize: 14,
),
SettingsCard(
children: [
ValueListenableBuilder<bool>(
valueListenable: KometSettings.hideAllChatsFolder,
builder: (context, value, _) => SettingsToggleTile(
icon: Symbols.folder_off,
label: 'Hide "All" folder',
subtitle:
'Скрыть папку «Все», когда есть другие папки. '
'Чаты сортируются только по вашим папкам',
value: value,
onChanged: KometSettings.setHideAllChatsFolder,
),
),
ValueListenableBuilder<bool>(
valueListenable: KometSettings.showHiddenChats,
builder: (context, value, _) => SettingsToggleTile(
icon: Symbols.visibility_lock,
label: 'Show hidden chats',
subtitle:
'Показывать скрытые чаты (например, от групповых '
'звонков), которые обычно не отображаются в списке',
value: value,
onChanged: KometSettings.setShowHiddenChats,
),
),
],
),
const SizedBox(height: 20),
const SectionHeader(
'Ghost Mode',
padding: EdgeInsets.fromLTRB(8, 0, 8, 8),
fontSize: 14,
),
SettingsCard(
children: [
ValueListenableBuilder<bool>(
valueListenable: KometSettings.ghostMode,
builder: (context, value, _) => SettingsToggleTile(
icon: Symbols.visibility_off,
label: 'Ghost Mode',
subtitle: 'Вас не видно в сети',
value: value,
onChanged: _setGhostMode,
),
),
ValueListenableBuilder<bool>(
valueListenable: KometSettings.antiRead,
builder: (context, value, _) => SettingsToggleTile(
icon: Symbols.mark_chat_read,
label: 'Anti read',
subtitle: 'Нечиталка сообщений',
value: value,
onChanged: KometSettings.setAntiRead,
),
),
ValueListenableBuilder<bool>(
valueListenable: KometSettings.selfOnlineCheck,
builder: (context, value, _) => SettingsToggleTile(
icon: Symbols.radar,
label: 'Self Online Check',
subtitle:
'Каждые ~10 секунд сверяет, когда вы были онлайн. '
'Полезно для проверки ghost mode',
value: value,
onChanged: KometSettings.setSelfOnlineCheck,
),
),
],
),
],
),
),
);
}
Future<void> _setGhostMode(bool value) async {
await KometSettings.setGhostMode(value);
api.sendPing(interactive: !value);
}
}