diff --git a/assets/svg/forest-theme.svg b/assets/svg/forest-theme.svg
new file mode 100644
index 000000000..1472bcbf5
--- /dev/null
+++ b/assets/svg/forest-theme.svg
@@ -0,0 +1,63 @@
+
diff --git a/assets/svg/fruit-sorbet-theme.png b/assets/svg/fruit-sorbet-theme.png
new file mode 100644
index 000000000..9bd0c6e97
Binary files /dev/null and b/assets/svg/fruit-sorbet-theme.png differ
diff --git a/assets/svg/fruit-sorbet-theme.svg b/assets/svg/fruit-sorbet-theme.svg
index d8680aec9..a9e8a3e2a 100644
--- a/assets/svg/fruit-sorbet-theme.svg
+++ b/assets/svg/fruit-sorbet-theme.svg
@@ -1,28 +1 @@
-
+
\ No newline at end of file
diff --git a/lib/main.dart b/lib/main.dart
index 493347263..6582fd6a8 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -58,6 +58,7 @@ import 'package:stackwallet/utilities/logger.dart';
import 'package:stackwallet/utilities/stack_file_system.dart';
import 'package:stackwallet/utilities/theme/color_theme.dart';
import 'package:stackwallet/utilities/theme/dark_colors.dart';
+import 'package:stackwallet/utilities/theme/forest_colors.dart';
import 'package:stackwallet/utilities/theme/fruit_sorbet_colors.dart';
import 'package:stackwallet/utilities/theme/light_colors.dart';
import 'package:stackwallet/utilities/theme/ocean_breeze_colors.dart';
@@ -347,6 +348,9 @@ class _MaterialAppWithThemeState extends ConsumerState
case "fruitSorbet":
colorTheme = FruitSorbetColors();
break;
+ case "forest":
+ colorTheme = ForestColors();
+ break;
case "light":
default:
colorTheme = LightColors();
diff --git a/lib/pages/settings_views/global_settings_view/appearance_settings_view.dart b/lib/pages/settings_views/global_settings_view/appearance_settings_view.dart
index cefde08bb..386190c5b 100644
--- a/lib/pages/settings_views/global_settings_view/appearance_settings_view.dart
+++ b/lib/pages/settings_views/global_settings_view/appearance_settings_view.dart
@@ -34,6 +34,8 @@ class AppearanceSettingsView extends ConsumerWidget {
return "Oled Black theme";
case ThemeType.fruitSorbet:
return "Fruit Sorbet theme";
+ case ThemeType.forest:
+ return "Forest theme";
}
}
diff --git a/lib/pages_desktop_specific/settings/settings_menu/appearance_settings.dart b/lib/pages_desktop_specific/settings/settings_menu/appearance_settings.dart
index b754f5c28..de7ae8623 100644
--- a/lib/pages_desktop_specific/settings/settings_menu/appearance_settings.dart
+++ b/lib/pages_desktop_specific/settings/settings_menu/appearance_settings.dart
@@ -171,6 +171,8 @@ class _ThemeToggle extends ConsumerState {
return Assets.svg.themeOledBlack;
case ThemeType.fruitSorbet:
return Assets.svg.themeFruit;
+ case ThemeType.forest:
+ return Assets.svg.themeForest;
}
}
diff --git a/lib/utilities/assets.dart b/lib/utilities/assets.dart
index 5a0427782..9f8a0ba7d 100644
--- a/lib/utilities/assets.dart
+++ b/lib/utilities/assets.dart
@@ -92,6 +92,7 @@ class _SVG {
"assets/svg/${Theme.of(context).extension()!.themeType.name}/tx-exchange-icon-failed.svg";
String get themeFruit => "assets/svg/fruit-sorbet-theme.svg";
+ String get themeForest => "assets/svg/forest-theme.svg";
String get themeOledBlack => "assets/svg/oled-black-theme.svg";
String get themeOcean => "assets/svg/ocean-breeze-theme.svg";
String get themeLight => "assets/svg/light-mode.svg";
@@ -261,6 +262,8 @@ class _SVG {
class _PNG {
const _PNG();
+ // String get themeFruit => "assets/svg/fruit-sorbet-theme.png";
+
String get stack => "assets/images/stack.png";
String get splash => "assets/images/splash.png";
diff --git a/lib/utilities/text_styles.dart b/lib/utilities/text_styles.dart
index 8b756e984..a6979f812 100644
--- a/lib/utilities/text_styles.dart
+++ b/lib/utilities/text_styles.dart
@@ -39,6 +39,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 12,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark3,
+ fontWeight: FontWeight.w500,
+ fontSize: 12,
+ );
}
}
@@ -74,6 +80,12 @@ class STextStyles {
fontWeight: FontWeight.w600,
fontSize: 20,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 20,
+ );
}
}
@@ -109,6 +121,12 @@ class STextStyles {
fontWeight: FontWeight.w600,
fontSize: 18,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 18,
+ );
}
}
@@ -144,6 +162,12 @@ class STextStyles {
fontWeight: FontWeight.w600,
fontSize: 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 16,
+ );
}
}
@@ -179,6 +203,12 @@ class STextStyles {
fontWeight: FontWeight.w600,
fontSize: 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 16,
+ );
}
}
@@ -214,6 +244,12 @@ class STextStyles {
fontWeight: FontWeight.w400,
fontSize: 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w400,
+ fontSize: 16,
+ );
}
}
@@ -249,6 +285,12 @@ class STextStyles {
fontWeight: FontWeight.w400,
fontSize: 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w400,
+ fontSize: 16,
+ );
}
}
@@ -284,6 +326,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ );
}
}
@@ -319,6 +367,12 @@ class STextStyles {
fontWeight: FontWeight.w600,
fontSize: 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 16,
+ );
}
}
@@ -354,6 +408,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).buttonTextPrimary,
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ );
}
}
@@ -389,6 +449,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ );
}
}
@@ -424,6 +490,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark3,
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ );
}
}
@@ -459,6 +531,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 14,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark3,
+ fontWeight: FontWeight.w500,
+ fontSize: 14,
+ );
}
}
@@ -494,6 +572,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 12,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textSubtitle1,
+ fontWeight: FontWeight.w500,
+ fontSize: 12,
+ );
}
}
@@ -534,6 +618,13 @@ class STextStyles {
fontSize: 14,
height: 14 / 14,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textFieldActiveSearchIconRight,
+ fontWeight: FontWeight.w500,
+ fontSize: 14,
+ height: 14 / 14,
+ );
}
}
@@ -569,6 +660,12 @@ class STextStyles {
fontWeight: FontWeight.w700,
fontSize: 12,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textSubtitle1,
+ fontWeight: FontWeight.w700,
+ fontSize: 12,
+ );
}
}
@@ -604,6 +701,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 14,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).infoItemLabel,
+ fontWeight: FontWeight.w500,
+ fontSize: 14,
+ );
}
}
@@ -639,6 +742,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 14,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 14,
+ );
}
}
@@ -674,6 +783,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 14,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 14,
+ );
}
}
@@ -714,6 +829,13 @@ class STextStyles {
fontSize: 14,
height: 1.5,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textSubtitle2,
+ fontWeight: FontWeight.w500,
+ fontSize: 14,
+ height: 1.5,
+ );
}
}
@@ -754,6 +876,13 @@ class STextStyles {
fontSize: 14,
height: 1.5,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 14,
+ height: 1.5,
+ );
}
}
@@ -789,6 +918,12 @@ class STextStyles {
fontWeight: FontWeight.w400,
fontSize: 14,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w400,
+ fontSize: 14,
+ );
}
}
@@ -824,6 +959,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 14,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).accentColorRed,
+ fontWeight: FontWeight.w500,
+ fontSize: 14,
+ );
}
}
@@ -859,6 +1000,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 14,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).infoItemIcons,
+ fontWeight: FontWeight.w500,
+ fontSize: 14,
+ );
}
}
@@ -894,6 +1041,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 12,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).accentColorBlue,
+ fontWeight: FontWeight.w500,
+ fontSize: 12,
+ );
}
}
@@ -929,6 +1082,12 @@ class STextStyles {
fontWeight: FontWeight.w600,
fontSize: 12,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 12,
+ );
}
}
@@ -964,6 +1123,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 12,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 12,
+ );
}
}
@@ -999,6 +1164,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 12,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 12,
+ );
}
}
@@ -1034,6 +1205,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 12,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 12,
+ );
}
}
@@ -1069,6 +1246,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 10,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textError,
+ fontWeight: FontWeight.w500,
+ fontSize: 10,
+ );
}
}
@@ -1104,6 +1287,12 @@ class STextStyles {
fontWeight: FontWeight.w500,
fontSize: 10,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textSubtitle1,
+ fontWeight: FontWeight.w500,
+ fontSize: 10,
+ );
}
}
@@ -1146,6 +1335,13 @@ class STextStyles {
fontSize: 40,
height: 40 / 40,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 40,
+ height: 40 / 40,
+ );
}
}
@@ -1186,6 +1382,13 @@ class STextStyles {
fontSize: 32,
height: 32 / 32,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 32,
+ height: 32 / 32,
+ );
}
}
@@ -1226,6 +1429,13 @@ class STextStyles {
fontSize: 24,
height: 24 / 24,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 24,
+ height: 24 / 24,
+ );
}
}
@@ -1266,6 +1476,13 @@ class STextStyles {
fontSize: 24,
height: 24 / 24,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 24,
+ height: 24 / 24,
+ );
}
}
@@ -1306,6 +1523,13 @@ class STextStyles {
fontSize: 20,
height: 30 / 20,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 20,
+ height: 30 / 20,
+ );
}
}
@@ -1346,6 +1570,13 @@ class STextStyles {
fontSize: 20,
height: 30 / 20,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w400,
+ fontSize: 20,
+ height: 30 / 20,
+ );
}
}
@@ -1386,6 +1617,13 @@ class STextStyles {
fontSize: 20,
height: 28 / 20,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w400,
+ fontSize: 20,
+ height: 28 / 20,
+ );
}
}
@@ -1426,6 +1664,13 @@ class STextStyles {
fontSize: 24,
height: 33 / 24,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w400,
+ fontSize: 24,
+ height: 33 / 24,
+ );
}
}
@@ -1466,6 +1711,13 @@ class STextStyles {
fontSize: 20,
height: 26 / 20,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).buttonTextPrimary,
+ fontWeight: FontWeight.w500,
+ fontSize: 20,
+ height: 26 / 20,
+ );
}
}
@@ -1506,6 +1758,13 @@ class STextStyles {
fontSize: 20,
height: 26 / 20,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).buttonTextPrimaryDisabled,
+ fontWeight: FontWeight.w500,
+ fontSize: 20,
+ height: 26 / 20,
+ );
}
}
@@ -1546,6 +1805,13 @@ class STextStyles {
fontSize: 20,
height: 26 / 20,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).buttonTextSecondary,
+ fontWeight: FontWeight.w500,
+ fontSize: 20,
+ height: 26 / 20,
+ );
}
}
@@ -1586,6 +1852,13 @@ class STextStyles {
fontSize: 20,
height: 26 / 20,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).buttonTextSecondaryDisabled,
+ fontWeight: FontWeight.w500,
+ fontSize: 20,
+ height: 26 / 20,
+ );
}
}
@@ -1626,6 +1899,13 @@ class STextStyles {
fontSize: 18,
height: 27 / 18,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 18,
+ height: 27 / 18,
+ );
}
}
@@ -1666,6 +1946,13 @@ class STextStyles {
fontSize: 18,
height: 27 / 18,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w700,
+ fontSize: 18,
+ height: 27 / 18,
+ );
}
}
@@ -1706,6 +1993,13 @@ class STextStyles {
fontSize: 16,
height: 24 / 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).buttonTextPrimaryDisabled,
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ height: 24 / 16,
+ );
}
}
@@ -1746,6 +2040,13 @@ class STextStyles {
fontSize: 14,
height: 21 / 14,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textSubtitle1,
+ fontWeight: FontWeight.w500,
+ fontSize: 14,
+ height: 21 / 14,
+ );
}
}
@@ -1786,6 +2087,13 @@ class STextStyles {
fontSize: 14,
height: 21 / 14,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 14,
+ height: 21 / 14,
+ );
}
}
@@ -1826,6 +2134,13 @@ class STextStyles {
fontSize: 16,
height: 24 / 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).buttonTextSecondary,
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ height: 24 / 16,
+ );
}
}
@@ -1866,6 +2181,13 @@ class STextStyles {
fontSize: 20,
height: 30 / 20,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textSubtitle2,
+ fontWeight: FontWeight.w500,
+ fontSize: 20,
+ height: 30 / 20,
+ );
}
}
@@ -1906,6 +2228,13 @@ class STextStyles {
fontSize: 16,
height: 20.8 / 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark.withOpacity(0.8),
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ height: 20.8 / 16,
+ );
}
}
@@ -1946,6 +2275,13 @@ class STextStyles {
fontSize: 16,
height: 20.8 / 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ height: 20.8 / 16,
+ );
}
}
@@ -1986,6 +2322,13 @@ class STextStyles {
fontSize: 16,
height: 20.8 / 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark.withOpacity(0.5),
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ height: 20.8 / 16,
+ );
}
}
@@ -2026,6 +2369,13 @@ class STextStyles {
fontSize: 16,
height: 20.8 / 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ height: 20.8 / 16,
+ );
}
}
@@ -2061,6 +2411,12 @@ class STextStyles {
fontWeight: FontWeight.w600,
fontSize: 8,
);
+ case ThemeType.forest:
+ return GoogleFonts.roboto(
+ color: _theme(context).textDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 8,
+ );
}
}
@@ -2096,6 +2452,12 @@ class STextStyles {
fontWeight: FontWeight.w400,
fontSize: 26,
);
+ case ThemeType.forest:
+ return GoogleFonts.roboto(
+ color: _theme(context).numberTextDefault,
+ fontWeight: FontWeight.w400,
+ fontSize: 26,
+ );
}
}
@@ -2136,6 +2498,13 @@ class STextStyles {
fontWeight: FontWeight.w400,
fontSize: 12,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ letterSpacing: 0.5,
+ color: _theme(context).accentColorDark,
+ fontWeight: FontWeight.w400,
+ fontSize: 12,
+ );
}
}
@@ -2176,6 +2545,13 @@ class STextStyles {
fontWeight: FontWeight.w600,
fontSize: 16,
);
+ case ThemeType.forest:
+ return GoogleFonts.inter(
+ letterSpacing: 0.5,
+ color: _theme(context).accentColorDark,
+ fontWeight: FontWeight.w600,
+ fontSize: 16,
+ );
}
}
}
diff --git a/lib/utilities/theme/color_theme.dart b/lib/utilities/theme/color_theme.dart
index ce8a471f9..1e7b3ab82 100644
--- a/lib/utilities/theme/color_theme.dart
+++ b/lib/utilities/theme/color_theme.dart
@@ -1,12 +1,13 @@
import 'package:flutter/material.dart';
import 'package:stackwallet/utilities/enums/coin_enum.dart';
import 'package:stackwallet/utilities/theme/dark_colors.dart';
+import 'package:stackwallet/utilities/theme/forest_colors.dart';
import 'package:stackwallet/utilities/theme/fruit_sorbet_colors.dart';
import 'package:stackwallet/utilities/theme/light_colors.dart';
import 'package:stackwallet/utilities/theme/ocean_breeze_colors.dart';
import 'package:stackwallet/utilities/theme/oled_black_colors.dart';
-enum ThemeType { light, dark, oceanBreeze, oledBlack, fruitSorbet }
+enum ThemeType { light, dark, oceanBreeze, oledBlack, fruitSorbet, forest }
// adjust this file
@@ -23,6 +24,8 @@ extension ThemeTypeExt on ThemeType {
return OledBlackColors();
case ThemeType.fruitSorbet:
return FruitSorbetColors();
+ case ThemeType.forest:
+ return ForestColors();
}
}
@@ -38,6 +41,8 @@ extension ThemeTypeExt on ThemeType {
return "OLED Black";
case ThemeType.fruitSorbet:
return "Fruit Sorbet";
+ case ThemeType.forest:
+ return "Forest";
}
}
}
diff --git a/lib/utilities/theme/forest_colors.dart b/lib/utilities/theme/forest_colors.dart
new file mode 100644
index 000000000..835d92e3f
--- /dev/null
+++ b/lib/utilities/theme/forest_colors.dart
@@ -0,0 +1,345 @@
+import 'package:flutter/material.dart';
+import 'package:stackwallet/utilities/theme/color_theme.dart';
+
+class ForestColors extends StackColorTheme {
+ @override
+ ThemeType get themeType => ThemeType.forest;
+
+ @override
+ Color get background => const Color(0xFFF7F7F7);
+ @override
+ Color get backgroundAppBar => background;
+ @override
+ Gradient? get gradientBackground => null;
+
+ @override
+ Color get overlay => const Color(0xFF111215);
+
+ @override
+ Color get accentColorBlue => const Color(0xFF0052DF);
+ @override
+ Color get accentColorGreen => const Color(0xFF4CC0A0);
+ @override
+ Color get accentColorYellow => const Color(0xFFF7D65D);
+ @override
+ Color get accentColorRed => const Color(0xFFD34E50);
+ @override
+ Color get accentColorOrange => const Color(0xFFFEA68D);
+ @override
+ Color get accentColorDark => const Color(0xFF232323);
+
+ @override
+ Color get shadow => const Color(0x0F2D3132);
+
+ @override
+ Color get textDark => const Color(0xFF232323);
+ @override
+ Color get textDark2 => const Color(0xFF414141);
+ @override
+ Color get textDark3 => const Color(0xFF747778);
+ @override
+ Color get textSubtitle1 => const Color(0xFF8E9192);
+ @override
+ Color get textSubtitle2 => const Color(0xFFA9ACAC);
+ @override
+ Color get textSubtitle3 => const Color(0xFFC4C7C7);
+ @override
+ Color get textSubtitle4 => const Color(0xFFE0E3E3);
+ @override
+ Color get textSubtitle5 => const Color(0xFFEEEFF1);
+ @override
+ Color get textSubtitle6 => const Color(0xFFF5F5F5);
+ @override
+ Color get textWhite => const Color(0xFFFFFFFF);
+ @override
+ Color get textFavoriteCard => const Color(0xFF232323);
+ @override
+ Color get textError => const Color(0xFF930006);
+ @override
+ Color get textRestore => overlay;
+
+ // button background
+ @override
+ Color get buttonBackPrimary => const Color(0xFF232323);
+ @override
+ Color get buttonBackSecondary => const Color(0xFFE0E3E3);
+ @override
+ Color get buttonBackPrimaryDisabled => const Color(0xFFD7D7D7);
+ @override
+ Color get buttonBackSecondaryDisabled => const Color(0xFFF0F1F1);
+ @override
+ Color get buttonBackBorder => const Color(0xFF232323);
+ @override
+ Color get buttonBackBorderDisabled => const Color(0xFFB6B6B6);
+ @override
+ Color get buttonBackBorderSecondary => buttonBackSecondary;
+ @override
+ Color get buttonBackBorderSecondaryDisabled => buttonBackSecondaryDisabled;
+
+ @override
+ Color get numberBackDefault => const Color(0xFFFFFFFF);
+ @override
+ Color get numpadBackDefault => const Color(0xFF232323);
+ @override
+ Color get bottomNavBack => const Color(0xFFFFFFFF);
+
+ // button text/element
+ @override
+ Color get buttonTextPrimary => const Color(0xFFFFFFFF);
+ @override
+ Color get buttonTextSecondary => const Color(0xFF232323);
+ @override
+ Color get buttonTextPrimaryDisabled => const Color(0xFFF8F8F8);
+ @override
+ Color get buttonTextSecondaryDisabled => const Color(0xFFB7B7B7);
+ @override
+ Color get buttonTextBorder => const Color(0xFF232323);
+ @override
+ Color get buttonTextDisabled => const Color(0xFFB6B6B6);
+ @override
+ Color get buttonTextBorderless => const Color(0xFF0052DF);
+ @override
+ Color get buttonTextBorderlessDisabled => const Color(0xFFB6B6B6);
+ @override
+ Color get numberTextDefault => const Color(0xFF232323);
+ @override
+ Color get numpadTextDefault => const Color(0xFFFFFFFF);
+ @override
+ Color get bottomNavText => const Color(0xFF232323);
+
+ // switch
+ @override
+ Color get switchBGOn => const Color(0xFF0052DF);
+ @override
+ Color get switchBGOff => const Color(0xFFD8E4FB);
+ @override
+ Color get switchBGDisabled => const Color(0xFFC5C6C9);
+ @override
+ Color get switchCircleOn => const Color(0xFFDAE2FF);
+ @override
+ Color get switchCircleOff => const Color(0xFFFBFCFF);
+ @override
+ Color get switchCircleDisabled => const Color(0xFFFBFCFF);
+
+ // step indicator background
+ @override
+ Color get stepIndicatorBGCheck => const Color(0xFFD9E2FF);
+ @override
+ Color get stepIndicatorBGNumber => const Color(0xFFD9E2FF);
+ @override
+ Color get stepIndicatorBGInactive => const Color(0xFFCDCDCD);
+ @override
+ Color get stepIndicatorBGLines => const Color(0xFF0056D2);
+ @override
+ Color get stepIndicatorBGLinesInactive => const Color(0xFFCDCDCD);
+ @override
+ Color get stepIndicatorIconText => const Color(0xFF0056D2);
+ @override
+ Color get stepIndicatorIconNumber => const Color(0xFF0056D2);
+ @override
+ Color get stepIndicatorIconInactive => const Color(0xFFF7F7F7);
+
+ // checkbox
+ @override
+ Color get checkboxBGChecked => const Color(0xFF0056D2);
+ @override
+ Color get checkboxBorderEmpty => const Color(0xFF8E9192);
+ @override
+ Color get checkboxBGDisabled => const Color(0xFFADC7EC);
+ @override
+ Color get checkboxIconChecked => const Color(0xFFFFFFFF);
+ @override
+ Color get checkboxIconDisabled => const Color(0xFFFFFFFF);
+ @override
+ Color get checkboxTextLabel => const Color(0xFF232323);
+
+ // snack bar
+ @override
+ Color get snackBarBackSuccess => const Color(0xFFB9E9D4);
+ @override
+ Color get snackBarBackError => const Color(0xFFFFDAD4);
+ @override
+ Color get snackBarBackInfo => const Color(0xFFDAE2FF);
+ @override
+ Color get snackBarTextSuccess => const Color(0xFF006C4D);
+ @override
+ Color get snackBarTextError => const Color(0xFF930006);
+ @override
+ Color get snackBarTextInfo => const Color(0xFF002A78);
+
+ // icons
+ @override
+ Color get bottomNavIconBack => const Color(0xFFA2A2A2);
+ @override
+ Color get bottomNavIconIcon => const Color(0xFF232323);
+
+ @override
+ Color get topNavIconPrimary => const Color(0xFF232323);
+ @override
+ Color get topNavIconGreen => const Color(0xFF00A578);
+ @override
+ Color get topNavIconYellow => const Color(0xFFF4C517);
+ @override
+ Color get topNavIconRed => const Color(0xFFC00205);
+
+ @override
+ Color get settingsIconBack => const Color(0xFFE0E3E3);
+ @override
+ Color get settingsIconIcon => const Color(0xFF232323);
+ @override
+ Color get settingsIconBack2 => const Color(0xFF94D6C4);
+ @override
+ Color get settingsIconElement => const Color(0xFF00A578);
+
+ // text field
+ @override
+ Color get textFieldActiveBG => const Color(0xFFEEEFF1);
+ @override
+ Color get textFieldDefaultBG => const Color(0xFFEEEFF1);
+ @override
+ Color get textFieldErrorBG => const Color(0xFFFFDAD4);
+ @override
+ Color get textFieldSuccessBG => const Color(0xFFB9E9D4);
+ @override
+ Color get textFieldErrorBorder => textFieldErrorBG;
+ @override
+ Color get textFieldSuccessBorder => textFieldSuccessBG;
+
+ @override
+ Color get textFieldActiveSearchIconLeft => const Color(0xFFA9ACAC);
+ @override
+ Color get textFieldDefaultSearchIconLeft => const Color(0xFFA9ACAC);
+ @override
+ Color get textFieldErrorSearchIconLeft => const Color(0xFF930006);
+ @override
+ Color get textFieldSuccessSearchIconLeft => const Color(0xFF006C4D);
+
+ @override
+ Color get textFieldActiveText => const Color(0xFF232323);
+ @override
+ Color get textFieldDefaultText => const Color(0xFFA9ACAC);
+ @override
+ Color get textFieldErrorText => const Color(0xFF000000);
+ @override
+ Color get textFieldSuccessText => const Color(0xFF000000);
+
+ @override
+ Color get textFieldActiveLabel => const Color(0xFFA9ACAC);
+ @override
+ Color get textFieldErrorLabel => const Color(0xFF930006);
+ @override
+ Color get textFieldSuccessLabel => const Color(0xFF006C4D);
+
+ @override
+ Color get textFieldActiveSearchIconRight => const Color(0xFF747778);
+ @override
+ Color get textFieldDefaultSearchIconRight => const Color(0xFF747778);
+ @override
+ Color get textFieldErrorSearchIconRight => const Color(0xFF930006);
+ @override
+ Color get textFieldSuccessSearchIconRight => const Color(0xFF006C4D);
+
+ // settings item level2
+ @override
+ Color get settingsItem2ActiveBG => const Color(0xFFFFFFFF);
+ @override
+ Color get settingsItem2ActiveText => const Color(0xFF232323);
+ @override
+ Color get settingsItem2ActiveSub => const Color(0xFF8E9192);
+
+ // radio buttons
+ @override
+ Color get radioButtonIconBorder => const Color(0xFF0056D2);
+ @override
+ Color get radioButtonIconBorderDisabled => const Color(0xFF8F909A);
+ @override
+ Color get radioButtonBorderEnabled => const Color(0xFF0056D2);
+ @override
+ Color get radioButtonBorderDisabled => const Color(0xFF8F909A);
+ @override
+ Color get radioButtonIconCircle => const Color(0xFF0056D2);
+ @override
+ Color get radioButtonIconEnabled => const Color(0xFF0056D2);
+ @override
+ Color get radioButtonTextEnabled => const Color(0xFF44464E);
+ @override
+ Color get radioButtonTextDisabled => const Color(0xFF44464E);
+ @override
+ Color get radioButtonLabelEnabled => const Color(0xFF8E9192);
+ @override
+ Color get radioButtonLabelDisabled => const Color(0xFF8E9192);
+
+ // info text
+ @override
+ Color get infoItemBG => const Color(0xFFFFFFFF);
+ @override
+ Color get infoItemLabel => const Color(0xFF8E9192);
+ @override
+ Color get infoItemText => const Color(0xFF232323);
+ @override
+ Color get infoItemIcons => const Color(0xFF0056D2);
+
+ // popup
+ @override
+ Color get popupBG => const Color(0xFFFFFFFF);
+
+ // currency list
+ @override
+ Color get currencyListItemBG => const Color(0xFFF9F9FC);
+
+ // bottom nav
+ @override
+ Color get stackWalletBG => const Color(0xFFFFFFFF);
+ @override
+ Color get stackWalletMid => const Color(0xFFFFFFFF);
+ @override
+ Color get stackWalletBottom => const Color(0xFF232323);
+ @override
+ Color get bottomNavShadow => const Color(0xFF282E33);
+
+ @override
+ Color get favoriteStarActive => infoItemIcons;
+ @override
+ Color get favoriteStarInactive => textSubtitle3;
+
+ @override
+ Color get splash => const Color(0x358E9192);
+ @override
+ Color get highlight => const Color(0x44A9ACAC);
+ @override
+ Color get warningForeground => textDark;
+ @override
+ Color get warningBackground => const Color(0xFFFFDAD3);
+ @override
+ Color get loadingOverlayTextColor => const Color(0xFFF7F7F7);
+ @override
+ Color get myStackContactIconBG => textFieldDefaultBG;
+ @override
+ Color get textConfirmTotalAmount => const Color(0xFF232323);
+ @override
+ Color get textSelectedWordTableItem => const Color(0xFF232323);
+
+ //rate type toggle
+ @override
+ Color get rateTypeToggleColorOn => textFieldDefaultBG;
+ @override
+ Color get rateTypeToggleColorOff => popupBG;
+ @override
+ Color get rateTypeToggleDesktopColorOn => textFieldDefaultBG;
+ @override
+ Color get rateTypeToggleDesktopColorOff => buttonBackSecondary;
+
+ @override
+ BoxShadow get standardBoxShadow => BoxShadow(
+ color: shadow,
+ spreadRadius: 3,
+ blurRadius: 4,
+ );
+
+ @override
+ BoxShadow? get homeViewButtonBarBoxShadow => BoxShadow(
+ color: shadow,
+ spreadRadius: 3,
+ blurRadius: 4,
+ );
+}
diff --git a/pubspec.yaml b/pubspec.yaml
index 69ddc1111..22b2c629d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -347,6 +347,7 @@ flutter:
- assets/svg/ocean-breeze-theme.svg
- assets/svg/oled-black-theme.svg
- assets/svg/fruit-sorbet-theme.svg
+ - assets/svg/forest-theme.svg
# light theme specific
- assets/svg/light/tx-exchange-icon.svg