import 'dart:io'; import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:mnemo_cards/flags.dart'; import 'package:mnemo_cards/widgets/header.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:url_launcher/url_launcher.dart'; import '../di/locator.dart'; import '../features/analytics/analytics.dart'; import '../theme/themes.dart'; import '../widgets/big_back_button.dart'; import '../widgets/shared_pref_button.dart'; import '../widgets/simple_tile.dart'; import '../widgets/slider.dart'; import '../widgets/switch_tile.dart'; import '../widgets/text_button.dart'; @RoutePage() class SettingsPage extends StatelessWidget { @override Widget build(BuildContext context) { Analytics.settingsPageOpened(locator.userManager.userStateHolder.user); return Scaffold( body: SafeArea( child: Column( children: [ Header( 'Настройки', popText: 'назад', hasPopButton: true, ), SizedBox( height: 8.h, ), Expanded( child: Padding( padding: EdgeInsets.symmetric(horizontal: 10.0.w), child: Column( mainAxisAlignment: MainAxisAlignment.end, children: [ Divider( height: 1, color: borderGray.withOpacity(0.2), ), SharedPrefButton.builder( spKey: 'dark_theme', builder: (enabled, _) => AbsorbPointer( child: SwitchTile( text: 'Темная тема', value: enabled ?? false, ), ), setOnTap: (v) { final darkTheme = !(v ?? false); themeNotifier.value = darkTheme ? ThemeMode.dark : ThemeMode.light; return darkTheme; }, ), Divider( height: 1, color: borderGray.withOpacity(0.2), ), SharedPrefButton.builder( spKey: 'sound_on', builder: (enabled, _) => AbsorbPointer( child: SwitchTile( text: 'Звук', value: enabled ?? false, ), ), setOnTap: (v) => !(v ?? false), ), Divider( height: 1, color: borderGray.withOpacity(0.2), ), SharedPrefButton.builder( spKey: 'auto_play_sound_view', builder: (enabled, _) => AbsorbPointer( child: SwitchTile( text: 'Авто воспроизведение при просмотре', value: enabled ?? false, ), ), setOnTap: (v) => !(v ?? false), ), Divider( height: 1, color: borderGray.withOpacity(0.2), ), SharedPrefButton.builder( spKey: 'auto_play_sound_tests', builder: (enabled, _) => AbsorbPointer( child: SwitchTile( text: 'Авто воспроизведение в тестах', value: enabled ?? false, ), ), setOnTap: (v) => !(v ?? false), ), Divider( height: 1, color: borderGray.withOpacity(0.2), ), SimpleTile.text( text: 'Скорость чтения', trail: SharedPrefButton.builder( spKey: 'sound_speed', builder: (v, s) => MnemoSlider( onChanged: (value) => s(value), value: v ?? 1.0, ), shouldRebuild: (v) => false, ), ), Divider( height: 1, color: borderGray.withOpacity(0.2), ), if (ADMIN_BUILD) SharedPrefButton.builder( spKey: 'show_admin', builder: (enabled, _) => AbsorbPointer( child: SwitchTile( text: 'Show admin', value: enabled ?? false, ), ), setOnTap: (v) => !(v ?? false), ), ], ), ), ), Column( children: [ Padding( padding: EdgeInsets.only(left: 10.0.w, right: 10.w, top: 32.h), child: LinkButton( 'Политика конфиденциальности', () { launchUrl( Uri.parse( 'https://www.freeprivacypolicy.com/live/1c2bce51-86c6-4a36-b226-b6c6f50ebf0f'), ); }, ), ), const BigBackButton(), ], ), ], ), ), ); } Future clearAndExit() async { final sp = await SharedPreferences.getInstance(); sp.clear(); exit(0); } const SettingsPage(); }