diff --git a/lib/data/database/hive_service.dart b/lib/data/database/hive_service.dart index 8281c06..dc2f9f0 100644 --- a/lib/data/database/hive_service.dart +++ b/lib/data/database/hive_service.dart @@ -11,6 +11,7 @@ import '/utils/transaction_utils.dart'; final _logger = Logger(); class HiveService { + static const String _settingsBox = 'settings'; static const String _categoryBox = 'categories'; static const String _tagBox = 'tags'; static const String _transactionBox = 'transactions'; @@ -35,6 +36,7 @@ class HiveService { // Открытие всех Box'ов await Future.wait([ + Hive.openBox(_settingsBox), Hive.openBox(_categoryBox), Hive.openBox(_tagBox), Hive.openBox(_transactionBox), diff --git a/lib/main.dart b/lib/main.dart index c0243d1..ea85b62 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -24,13 +24,18 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - bool _isDarkMode = false; + late final Box _settingsBox; + + @override + void initState() { + super.initState(); + _settingsBox = Hive.box('settings'); + } + + bool get _isDarkMode => _settingsBox.get('darkMode', defaultValue: false); - /// Переключает тему между светлой и темной void toggleTheme() { - setState(() { - _isDarkMode = !_isDarkMode; - }); + _settingsBox.put('darkMode', !_isDarkMode); } @override diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index 4bd6480..d0a643e 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'settings_page.dart'; /** * Главная страница приложения для управления бюджетом. @@ -51,6 +52,17 @@ class HomePage extends StatelessWidget { // Кнопки в правой части AppBar actions: [ + // Кнопка настроек + IconButton( + icon: const Icon(Icons.settings), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => const SettingsPage()), + ); + }, + tooltip: 'Настройки', + ), // Кнопка переключения темы IconButton( // Динамическая иконка - меняется в зависимости от темы diff --git a/lib/pages/settings_page.dart b/lib/pages/settings_page.dart new file mode 100644 index 0000000..cd4ce03 --- /dev/null +++ b/lib/pages/settings_page.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; +import 'package:hive_flutter/hive_flutter.dart'; + +class SettingsPage extends StatelessWidget { + const SettingsPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Настройки'), + ), + body: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ValueListenableBuilder( + valueListenable: Hive.box('settings').listenable(), + builder: (context, box, _) { + return SwitchListTile( + title: const Text('Темная тема'), + value: box.get('darkMode', defaultValue: false), + onChanged: (value) { + box.put('darkMode', value); + }, + ); + }, + ), + ], + ), + ), + ); + } +}