theme.dart 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. import 'package:flutter/material.dart';
  2. enum ThemeType {
  3. light,
  4. dark,
  5. }
  6. ThemeType themeTypeFromString(String name) {
  7. ThemeType themeType = ThemeType.light;
  8. if (name == "dark") {
  9. themeType = ThemeType.dark;
  10. }
  11. return themeType;
  12. }
  13. String themeTypeToString(ThemeType ty) {
  14. switch (ty) {
  15. case ThemeType.light:
  16. return "light";
  17. case ThemeType.dark:
  18. return "dark";
  19. }
  20. }
  21. //Color Pallettes
  22. const _black = Color(0xff000000);
  23. const _white = Color(0xFFFFFFFF);
  24. class AppTheme {
  25. ThemeType ty;
  26. bool isDark;
  27. late Color surface; //
  28. late Color hover;
  29. late Color selector;
  30. late Color red;
  31. late Color yellow;
  32. late Color green;
  33. late Color shader1;
  34. late Color shader2;
  35. late Color shader3;
  36. late Color shader4;
  37. late Color shader5;
  38. late Color shader6;
  39. late Color shader7;
  40. late Color bg1;
  41. late Color bg2;
  42. late Color bg3;
  43. late Color bg4;
  44. late Color tint1;
  45. late Color tint2;
  46. late Color tint3;
  47. late Color tint4;
  48. late Color tint5;
  49. late Color tint6;
  50. late Color tint7;
  51. late Color tint8;
  52. late Color tint9;
  53. late Color textColor;
  54. late Color iconColor;
  55. late Color disableIconColor;
  56. late Color main1;
  57. late Color main2;
  58. late Color shadowColor;
  59. /// Default constructor
  60. AppTheme({required this.ty, this.isDark = false});
  61. factory AppTheme.fromName({required String name}) {
  62. return AppTheme.fromType(themeTypeFromString(name));
  63. }
  64. /// fromType factory constructor
  65. factory AppTheme.fromType(ThemeType themeType) {
  66. switch (themeType) {
  67. case ThemeType.light:
  68. return AppTheme(ty: themeType, isDark: false)
  69. ..surface = Colors.white
  70. ..hover = const Color(0xFFe0f8ff) //
  71. ..selector = const Color(0xfff2fcff)
  72. ..red = const Color(0xfffb006d)
  73. ..yellow = const Color(0xffffd667)
  74. ..green = const Color(0xff66cf80)
  75. ..shader1 = const Color(0xff333333)
  76. ..shader2 = const Color(0xff4f4f4f)
  77. ..shader3 = const Color(0xff828282)
  78. ..shader4 = const Color(0xffbdbdbd)
  79. ..shader5 = const Color(0xffe0e0e0)
  80. ..shader6 = const Color(0xfff2f2f2)
  81. ..shader7 = const Color(0xffffffff)
  82. ..bg1 = const Color(0xfff7f8fc)
  83. ..bg2 = const Color(0xffedeef2)
  84. ..bg3 = const Color(0xffe2e4eb)
  85. ..bg4 = const Color(0xff2c144b)
  86. ..tint1 = const Color(0xffe8e0ff)
  87. ..tint2 = const Color(0xffffe7fd)
  88. ..tint3 = const Color(0xffffe7ee)
  89. ..tint4 = const Color(0xffffefe3)
  90. ..tint5 = const Color(0xfffff2cd)
  91. ..tint6 = const Color(0xfff5ffdc)
  92. ..tint7 = const Color(0xffddffd6)
  93. ..tint8 = const Color(0xffdefff1)
  94. ..tint9 = const Color(0xffdefff1)
  95. ..main1 = const Color(0xff00bcf0)
  96. ..main2 = const Color(0xff00b7ea)
  97. ..textColor = _black
  98. ..iconColor = _black
  99. ..shadowColor = _black
  100. ..disableIconColor = const Color(0xffbdbdbd);
  101. case ThemeType.dark:
  102. return AppTheme(ty: themeType, isDark: true)
  103. ..surface = const Color(0xff292929)
  104. ..hover = const Color(0xff1f1f1f)
  105. ..selector = const Color(0xff333333)
  106. ..red = const Color(0xfffb006d)
  107. ..yellow = const Color(0xffffd667)
  108. ..green = const Color(0xff66cf80)
  109. ..shader1 = _white
  110. ..shader2 = const Color(0xffffffff)
  111. ..shader3 = const Color(0xff828282)
  112. ..shader4 = const Color(0xffbdbdbd)
  113. ..shader5 = _white
  114. ..shader6 = _black
  115. ..shader7 = _black
  116. ..bg1 = _black
  117. ..bg2 = _black
  118. ..bg3 = const Color(0xff4f4f4f)
  119. ..bg4 = const Color(0xff2c144b)
  120. ..tint1 = const Color(0xffc3adff)
  121. ..tint2 = const Color(0xffffadf9)
  122. ..tint3 = const Color(0xffffadad)
  123. ..tint4 = const Color(0xffffcfad)
  124. ..tint5 = const Color(0xfffffead)
  125. ..tint6 = const Color(0xffe6ffa3)
  126. ..tint7 = const Color(0xffbcffad)
  127. ..tint8 = const Color(0xffadffe2)
  128. ..tint9 = const Color(0xffade4ff)
  129. ..main1 = const Color(0xff00bcf0)
  130. ..main2 = const Color(0xff009cc7)
  131. ..textColor = _white
  132. ..iconColor = _white
  133. ..shadowColor = _white
  134. ..disableIconColor = const Color(0xff333333);
  135. }
  136. }
  137. ThemeData get themeData {
  138. var t = ThemeData(
  139. textTheme: TextTheme(bodyText2: TextStyle(color: textColor)),
  140. textSelectionTheme: TextSelectionThemeData(cursorColor: main2, selectionHandleColor: main2),
  141. primaryIconTheme: IconThemeData(color: hover),
  142. iconTheme: IconThemeData(color: shader1),
  143. canvasColor: shader6,
  144. //Don't use this property because of the redo/undo button in the toolbar use the hoverColor.
  145. // hoverColor: main2,
  146. colorScheme: ColorScheme(
  147. brightness: isDark ? Brightness.dark : Brightness.light,
  148. primary: main1,
  149. primaryVariant: main2,
  150. secondary: main2,
  151. secondaryVariant: main2,
  152. background: surface,
  153. surface: surface,
  154. onBackground: surface,
  155. onSurface: surface,
  156. onError: red,
  157. onPrimary: bg1,
  158. onSecondary: bg1,
  159. error: red),
  160. );
  161. return t.copyWith(
  162. materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
  163. highlightColor: main1,
  164. indicatorColor: main1,
  165. toggleableActiveColor: main1);
  166. }
  167. Color shift(Color c, double d) => ColorUtils.shiftHsl(c, d * (isDark ? -1 : 1));
  168. }
  169. class ColorUtils {
  170. static Color shiftHsl(Color c, [double amt = 0]) {
  171. var hslc = HSLColor.fromColor(c);
  172. return hslc.withLightness((hslc.lightness + amt).clamp(0.0, 1.0)).toColor();
  173. }
  174. static Color parseHex(String value) => Color(int.parse(value.substring(1, 7), radix: 16) + 0xFF000000);
  175. static Color blend(Color dst, Color src, double opacity) {
  176. return Color.fromARGB(
  177. 255,
  178. (dst.red.toDouble() * (1.0 - opacity) + src.red.toDouble() * opacity).toInt(),
  179. (dst.green.toDouble() * (1.0 - opacity) + src.green.toDouble() * opacity).toInt(),
  180. (dst.blue.toDouble() * (1.0 - opacity) + src.blue.toDouble() * opacity).toInt(),
  181. );
  182. }
  183. }