initial commit

This commit is contained in:
2025-11-28 23:58:41 +03:00
commit 013690061c
77 changed files with 2337 additions and 0 deletions

View File

@@ -0,0 +1,100 @@
import 'dart:ui';
import 'package:base_project/storage/storage_keys.dart';
import 'package:base_project/storage/storage_service.dart';
import 'package:base_project/theme/theme_data.dart';
import 'package:base_project/theme/theme_schema.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
class ThemeManager extends ChangeNotifier {
late ThemeSchema theme;
late ThemeMode themeMode;
PlatformDispatcher dispatcher = SchedulerBinding.instance.platformDispatcher;
ThemeManager(){
init();
}
void init(){
themeMode = ThemeModeUtils.fromString(
StorageService.getValue( StorageServiceValueType.string, StorageKeys.theme) ?? ThemeMode.system.toRawString()
);
dispatcher.onPlatformBrightnessChanged = _onBrightnessChanged;
_setCurrentTheme();
}
void changeThemeMode( ThemeMode themeMode ){
StorageService.setValue(StorageServiceValueType.string, StorageKeys.theme, themeMode.toRawString());
this.themeMode = themeMode;
_setCurrentTheme();
notifyListeners();
}
void _onBrightnessChanged (){
if( themeMode != ThemeMode.system ) return;
if( dispatcher.platformBrightness == Brightness.light ){
theme = LightTheme();
}else{
theme = DarkTheme();
}
notifyListeners();
}
void _setCurrentTheme(){
if( themeMode == ThemeMode.system ){
theme = dispatcher.platformBrightness == Brightness.light ? LightTheme() : DarkTheme();
}else {
theme = themeMode == ThemeMode.light ? LightTheme() : DarkTheme();
}
SystemChrome.setSystemUIOverlayStyle(
SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarIconBrightness: theme.brightness == Brightness.light ? Brightness.dark : Brightness.light
)
);
}
static ThemeSchema getTheme( BuildContext context, { bool listen = true } ){
return listen ? context.watch<ThemeManager>().theme : context.read<ThemeManager>().theme;
}
}
class ThemeModeUtils {
ThemeModeUtils._();
static ThemeMode fromString( String themeModeString ){
Map<String, ThemeMode> data = {
'light': ThemeMode.light,
'dark': ThemeMode.dark,
'system': ThemeMode.system
};
return data[themeModeString]!;
}
}
extension ThemeModeExtention on ThemeMode {
String toRawString(){
return toString().split('.').last;
}
}