mirror of
https://github.com/smmarty/friflex_flutter_starter.git
synced 2025-12-22 09:30:45 +00:00
34 lines
878 B
Dart
34 lines
878 B
Dart
|
|
import 'package:flutter/material.dart';
|
||
|
|
import 'package:provider/provider.dart';
|
||
|
|
|
||
|
|
typedef ThemeBuilder = Widget Function();
|
||
|
|
|
||
|
|
/// Виджет для подписки на изменение темы приложения
|
||
|
|
class ThemeConsumer extends StatelessWidget {
|
||
|
|
const ThemeConsumer({super.key, required this.builder});
|
||
|
|
|
||
|
|
final ThemeBuilder builder;
|
||
|
|
|
||
|
|
@override
|
||
|
|
Widget build(BuildContext context) {
|
||
|
|
return Consumer<ThemeNotifier>(
|
||
|
|
builder: (_, __, ___) {
|
||
|
|
return builder();
|
||
|
|
},
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Класс для управления темой приложения
|
||
|
|
final class ThemeNotifier extends ChangeNotifier {
|
||
|
|
ThemeMode _themeMode = ThemeMode.system;
|
||
|
|
|
||
|
|
ThemeMode get themeMode => _themeMode;
|
||
|
|
|
||
|
|
void changeTheme() {
|
||
|
|
_themeMode =
|
||
|
|
_themeMode == ThemeMode.light ? ThemeMode.dark : ThemeMode.light;
|
||
|
|
notifyListeners();
|
||
|
|
}
|
||
|
|
}
|