91 lines
3.5 KiB
Dart
91 lines
3.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'settings_page.dart';
|
|
|
|
/**
|
|
* Главная страница приложения для управления бюджетом.
|
|
*
|
|
* Этот виджет является основным экраном приложения и содержит:
|
|
* - AppBar с заголовком и кнопкой настроек
|
|
* - Основной контент с приветственным сообщением
|
|
*
|
|
* Особенности реализации:
|
|
* 1. Наследуется от StatelessWidget, так как не содержит собственного состояния
|
|
* 2. Использует Material Design через Scaffold
|
|
* 3. Управление темой вынесено в SettingsService
|
|
*/
|
|
class HomePage extends StatelessWidget {
|
|
/// Конструктор виджета
|
|
///
|
|
/// @param key - опциональный ключ для идентификации виджета
|
|
const HomePage({super.key});
|
|
|
|
/**
|
|
* Основной метод построения интерфейса виджета.
|
|
*
|
|
* Возвращает Scaffold - базовую структуру страницы Material Design,
|
|
* которая включает:
|
|
* 1. AppBar (верхнюю панель)
|
|
* 2. Body (основное содержимое)
|
|
*/
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
// Верхняя панель приложения
|
|
appBar: AppBar(
|
|
// Заголовок приложения
|
|
title: const Text('Budget App'),
|
|
|
|
// Кнопки в правой части AppBar
|
|
actions: [
|
|
// Кнопка настроек
|
|
IconButton(
|
|
icon: const Icon(Icons.settings),
|
|
onPressed: () {
|
|
Navigator.push(
|
|
context,
|
|
MaterialPageRoute(builder: (context) => const SettingsPage()),
|
|
);
|
|
},
|
|
tooltip: 'Настройки',
|
|
),
|
|
// Кнопка переключения темы
|
|
IconButton(
|
|
// Динамическая иконка - меняется в зависимости от темы
|
|
icon: Icon(isDarkMode ? Icons.light_mode : Icons.dark_mode),
|
|
|
|
// Обработчик нажатия - вызывает переданный колбек
|
|
onPressed: onThemeToggle,
|
|
|
|
// Подсказка при долгом нажатии
|
|
tooltip: 'Переключить тему',
|
|
),
|
|
],
|
|
),
|
|
|
|
// Основное содержимое страницы
|
|
body: const Center(
|
|
// Вертикальное расположение элементов
|
|
child: Column(
|
|
// Выравнивание по центру по вертикали
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
|
|
// Дочерние виджеты колонки
|
|
children: [
|
|
// Иконка кошелька
|
|
Icon(Icons.account_balance_wallet, size: 64),
|
|
|
|
// Отступ между элементами
|
|
SizedBox(height: 16),
|
|
|
|
// Приветственный текст
|
|
Text(
|
|
'Добро пожаловать в Budget App!',
|
|
style: TextStyle(fontSize: 24),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|