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 => ['System', 'Light', 'Dark'][index]; }