Files
friflex_flutter_starter/lib/app/theme/theme_notifier.dart
Yuri Petrov 6500b917c5 refactor(app): обновить структуру приложения и удалить устаревшие провайдеры (#44)
* refactor(app): обновить структуру приложения и удалить устаревшие провайдеры
* refactor(runner): упростить обработку ошибок и улучшить логирование времени инициализации
* refactor(runner): улучшить порядок инициализации приложения и обработку ошибок
* refactor(app): исправить контекст MediaQuery для предотвращения перерисовки
* refactor(pp): удалить главный виджет приложения и заменить его на AppRoot
* docs(copilot-instructions): уточнить правила проведения Code Review на русском языке
* refactor(linter): добавить правило avoid_catches_without_on_clauses для улучшения обработки исключений

---------

Co-authored-by: petrovyuri <petrovyuri@example.com>
2025-12-11 21:18:24 +03:00

60 lines
2.3 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
/// Тип функции для построения виджета с учетом темы
typedef ThemeBuilder = Widget Function(BuildContext context);
/// {@template theme_consumer}
/// Виджет для подписки на изменения темы приложения.
///
/// Автоматически перестраивает дочерние виджеты при изменении темы,
/// обеспечивая реактивность интерфейса к изменениям настроек темы.
/// {@endtemplate}
class ThemeConsumer extends StatelessWidget {
/// {@macro theme_consumer}
const ThemeConsumer({required this.builder, super.key});
/// Функция для построения виджета с учетом текущей темы
final ThemeBuilder builder;
@override
Widget build(BuildContext context) {
return Consumer<ThemeNotifier>(
builder: (context, _, _) {
return builder(context);
},
);
}
}
/// {@template theme_notifier}
/// Класс для управления темой приложения.
///
/// Отвечает за:
/// - Хранение текущего режима темы (светлая/темная/системная)
/// - Уведомление подписчиков об изменениях темы
/// - Переключение между режимами темы
/// {@endtemplate}
final class ThemeNotifier extends ChangeNotifier {
/// {@macro theme_notifier}
ThemeNotifier();
/// Текущий режим темы приложения
/// По умолчанию используется системная тема
ThemeMode _themeMode = ThemeMode.system;
/// Получение текущего режима темы
ThemeMode get themeMode => _themeMode;
/// Метод для переключения темы приложения.
///
/// Переключает между светлой и темной темой.
/// Если текущая тема светлая, переключает на темную и наоборот.
void changeTheme() {
_themeMode = _themeMode == ThemeMode.light
? ThemeMode.dark
: ThemeMode.light;
notifyListeners();
}
}