theme_provider.dart 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import 'dart:ui';
  2. import 'package:flustars/flustars.dart';
  3. import 'package:flutter/cupertino.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:liftmanager/common/common.dart';
  6. import 'package:liftmanager/common/themes.dart';
  7. import 'package:liftmanager/res/resources.dart';
  8. class ThemeProvider extends ChangeNotifier {
  9. static const Map<Themes, String> themes = {
  10. Themes.DARK: "Dark", Themes.LIGHT : "Light", Themes.SYSTEM : "System"
  11. };
  12. void syncTheme(){
  13. String theme = SpUtil.getString(Constant.theme);
  14. if (theme.isNotEmpty && theme != themes[Themes.SYSTEM]){
  15. notifyListeners();
  16. }
  17. }
  18. void setTheme(Themes theme) {
  19. SpUtil.putString(Constant.theme, themes[theme]);
  20. notifyListeners();
  21. }
  22. getTheme({bool isDarkMode: false}) {
  23. String theme = SpUtil.getString(Constant.theme);
  24. switch(theme){
  25. case "Dark":
  26. isDarkMode = true;
  27. break;
  28. case "Light":
  29. isDarkMode = false;
  30. break;
  31. default:
  32. break;
  33. }
  34. return ThemeData(
  35. errorColor: isDarkMode ? Colours.dark_red : Colours.red,
  36. brightness: isDarkMode ? Brightness.dark : Brightness.light,
  37. primaryColor: isDarkMode ? Colours.dark_app_main : Colours.app_main,
  38. accentColor: isDarkMode ? Colours.dark_app_main : Colours.app_main,
  39. // Tab指示器颜色
  40. indicatorColor: isDarkMode ? Colours.dark_app_main : Colours.app_main,
  41. // 页面背景色
  42. scaffoldBackgroundColor: isDarkMode ? Colours.dark_bg_color : Colors.white,
  43. // 主要用于Material背景色
  44. canvasColor: isDarkMode ? Colours.dark_material_bg : Colors.white,
  45. // 文字选择色(输入框复制粘贴菜单)
  46. textSelectionColor: Colours.app_main.withAlpha(70),
  47. textSelectionHandleColor: Colours.app_main,
  48. textTheme: TextTheme(
  49. // TextField输入文字颜色
  50. subhead: isDarkMode ? TextStyles.textDark : TextStyles.text,
  51. // Text文字样式
  52. body1: isDarkMode ? TextStyles.textDark : TextStyles.text,
  53. subtitle: isDarkMode ? TextStyles.textDarkGray12 : TextStyles.textGray12,
  54. ),
  55. inputDecorationTheme: InputDecorationTheme(
  56. hintStyle: isDarkMode ? TextStyles.textHint14 : TextStyles.textDarkGray14,
  57. ),
  58. appBarTheme: AppBarTheme(
  59. elevation: 0.0,
  60. color: isDarkMode ? Colours.dark_bg_color : Colors.white,
  61. brightness: isDarkMode ? Brightness.dark : Brightness.light,
  62. ),
  63. dividerTheme: DividerThemeData(
  64. color: isDarkMode ? Colours.dark_line : Colours.line,
  65. space: 0.6,
  66. thickness: 0.6
  67. ),
  68. cupertinoOverrideTheme: CupertinoThemeData(
  69. brightness: isDarkMode ? Brightness.dark : Brightness.light,
  70. )
  71. );
  72. }
  73. }