theme_provider.dart 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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",
  11. Themes.LIGHT: "Light",
  12. Themes.SYSTEM: "System"
  13. };
  14. void syncTheme() {
  15. String theme = SpUtil.getString(Constant.theme);
  16. if (theme.isNotEmpty && theme != themes[Themes.SYSTEM]) {
  17. notifyListeners();
  18. }
  19. }
  20. void setTheme(Themes theme) {
  21. SpUtil.putString(Constant.theme, themes[theme]);
  22. notifyListeners();
  23. }
  24. getTheme({bool isDarkMode: false}) {
  25. String theme = SpUtil.getString(Constant.theme);
  26. switch (theme) {
  27. case "Dark":
  28. isDarkMode = true;
  29. break;
  30. case "Light":
  31. isDarkMode = false;
  32. break;
  33. default:
  34. break;
  35. }
  36. ///取消暗黑模式,因为全局未适配
  37. isDarkMode = false;
  38. return ThemeData(
  39. errorColor: isDarkMode ? Colours.dark_red : Colours.red,
  40. brightness: isDarkMode ? Brightness.dark : Brightness.light,
  41. primaryColor: isDarkMode ? Colours.dark_app_main : Colours.app_main,
  42. accentColor: isDarkMode ? Colours.dark_app_main : Colours.app_main,
  43. // Tab指示器颜色
  44. indicatorColor: isDarkMode ? Colours.dark_app_main : Colours.app_main,
  45. // 页面背景色
  46. scaffoldBackgroundColor:
  47. isDarkMode ? Colours.dark_bg_color : Colors.white,
  48. // 主要用于Material背景色
  49. canvasColor: isDarkMode ? Colours.dark_material_bg : Colors.white,
  50. // 文字选择色(输入框复制粘贴菜单)
  51. textSelectionColor: Colours.app_main.withAlpha(70),
  52. textSelectionHandleColor: Colours.app_main,
  53. textTheme: TextTheme(
  54. // TextField输入文字颜色
  55. subhead: isDarkMode ? TextStyles.textDark : TextStyles.text,
  56. // Text文字样式
  57. body1: isDarkMode ? TextStyles.textDark : TextStyles.text,
  58. subtitle:
  59. isDarkMode ? TextStyles.textDarkGray12 : TextStyles.textGray12,
  60. ),
  61. inputDecorationTheme: InputDecorationTheme(
  62. hintStyle:
  63. isDarkMode ? TextStyles.textHint14 : TextStyles.textDarkGray14,
  64. ),
  65. appBarTheme: AppBarTheme(
  66. elevation: 0.0,
  67. color: isDarkMode ? Colours.dark_bg_color : Colors.white,
  68. brightness: isDarkMode ? Brightness.dark : Brightness.light,
  69. ),
  70. dividerTheme: DividerThemeData(
  71. color: isDarkMode ? Colours.dark_line : Colours.line,
  72. space: 0.6,
  73. thickness: 0.6),
  74. cupertinoOverrideTheme: CupertinoThemeData(
  75. brightness: isDarkMode ? Brightness.dark : Brightness.light,
  76. ));
  77. }
  78. }