83 lines
3.0 KiB
Dart
83 lines
3.0 KiB
Dart
import 'package:flutter/cupertino.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:flutter/services.dart';
|
||
import 'package:get/get.dart';
|
||
import 'package:sp_util/sp_util.dart';
|
||
import 'package:dreampad/app/shared/constants/constants.dart';
|
||
|
||
class ThemeService {
|
||
void setTheme(ThemeMode themeMode) {
|
||
SpUtil.putString(Constant.theme, themeMode.value);
|
||
Get.changeThemeMode(themeMode);
|
||
}
|
||
|
||
ThemeMode getThemeMode() {
|
||
final String theme = SpUtil.getString(Constant.theme) ?? 'Light';
|
||
switch (theme) {
|
||
case 'Dark':
|
||
return ThemeMode.dark;
|
||
case 'Light':
|
||
return ThemeMode.light;
|
||
default:
|
||
return ThemeMode.system;
|
||
}
|
||
}
|
||
|
||
ThemeData getTheme({bool isDarkMode = false}) {
|
||
return ThemeData(
|
||
fontFamily: 'alph-m',
|
||
primaryColor: isDarkMode ? Colours.dark_app_main : Colours.app_main,
|
||
colorScheme: ColorScheme.fromSwatch().copyWith(
|
||
brightness: isDarkMode ? Brightness.dark : Brightness.light,
|
||
secondary: isDarkMode ? Colours.dark_app_main : Colours.app_main,
|
||
error: isDarkMode ? Colours.dark_red : Colours.red,
|
||
),
|
||
// Tab指示器颜色
|
||
indicatorColor: isDarkMode ? Colours.dark_app_main : Colours.app_main,
|
||
// 页面背景色
|
||
scaffoldBackgroundColor:
|
||
isDarkMode ? Colours.dark_bg_color : Colors.white,
|
||
// 主要用于Material背景色
|
||
canvasColor: isDarkMode ? Colours.dark_material_bg : Colors.white,
|
||
// 文字选择色(输入框选择文字等)
|
||
// 稳定版:1.23 变更(https://flutter.dev/docs/release/breaking-changes/text-selection-theme)
|
||
textSelectionTheme: TextSelectionThemeData(
|
||
selectionColor: Colours.app_main.withAlpha(70),
|
||
selectionHandleColor: Colours.app_main,
|
||
cursorColor: Colours.app_main,
|
||
),
|
||
textTheme: TextTheme(
|
||
// TextField输入文字颜色
|
||
titleMedium: isDarkMode ? TextStyles.textDark : TextStyles.text,
|
||
// Text文字样式
|
||
bodyMedium: isDarkMode ? TextStyles.textDark : TextStyles.text,
|
||
titleSmall:
|
||
isDarkMode ? TextStyles.textDarkGray12 : TextStyles.textGray12,
|
||
),
|
||
inputDecorationTheme: InputDecorationTheme(
|
||
hintStyle:
|
||
isDarkMode ? TextStyles.textHint14 : TextStyles.textDarkGray14,
|
||
),
|
||
appBarTheme: AppBarTheme(
|
||
elevation: 0.0,
|
||
color: isDarkMode ? Colours.dark_bg_color : Colors.white,
|
||
systemOverlayStyle:
|
||
isDarkMode ? SystemUiOverlayStyle.light : SystemUiOverlayStyle.dark,
|
||
),
|
||
dividerTheme: DividerThemeData(
|
||
color: isDarkMode ? Colours.dark_line : Colours.line,
|
||
space: 0.6,
|
||
thickness: 0.6),
|
||
cupertinoOverrideTheme: CupertinoThemeData(
|
||
brightness: isDarkMode ? Brightness.dark : Brightness.light,
|
||
),
|
||
visualDensity: VisualDensity
|
||
.standard, // https://github.com/flutter/flutter/issues/77142
|
||
);
|
||
}
|
||
}
|
||
|
||
extension ThemeModeExtension on ThemeMode {
|
||
String get value => <String>['System', 'Light', 'Dark'][index];
|
||
}
|