diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index 2514b7c22..3fd8a8b54 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -164,6 +164,8 @@ abstract class AppConfig { "https://support.microsoft.com/en-us/topic/download-languages-and-voices-for-immersive-reader-read-mode-and-read-aloud-4c83a8d8-7486-42f7-8e46-2b0fdf753130"; static String androidTTSDownloadInstructions = "https://support.google.com/accessibility/android/answer/6006983?hl=en"; + static String svgAssetsBaseURL = + "https://pangea-chat-client-assets.s3.us-east-1.amazonaws.com"; // Pangea# static void loadFromJson(Map json) { diff --git a/lib/pangea/analytics/constants/analytics_constants.dart b/lib/pangea/analytics/constants/analytics_constants.dart index 2d295305c..ec1a2c911 100644 --- a/lib/pangea/analytics/constants/analytics_constants.dart +++ b/lib/pangea/analytics/constants/analytics_constants.dart @@ -4,6 +4,9 @@ class AnalyticsConstants { static const int morphUseMaxXP = 500; static const int xpForGreens = 30; static const int xpForFlower = 100; + static const String seedSvgFileName = "Seed.svg"; + static const String leafSvgFileName = "Leaf.svg"; + static const String flowerSvgFileName = "Flower.svg"; static const String emojiForSeed = "🫛"; static const String emojiForGreen = "🌱"; static const String emojiForFlower = "🌸"; diff --git a/lib/pangea/analytics/enums/lemma_category_enum.dart b/lib/pangea/analytics/enums/lemma_category_enum.dart index 7dd0f7dc3..e774e7175 100644 --- a/lib/pangea/analytics/enums/lemma_category_enum.dart +++ b/lib/pangea/analytics/enums/lemma_category_enum.dart @@ -36,6 +36,17 @@ extension LemmaCategoryExtension on LemmaCategoryEnum { } } + String get svgURL { + switch (this) { + case LemmaCategoryEnum.seeds: + return "${AppConfig.svgAssetsBaseURL}/${AnalyticsConstants.seedSvgFileName}"; + case LemmaCategoryEnum.greens: + return "${AppConfig.svgAssetsBaseURL}/${AnalyticsConstants.leafSvgFileName}"; + case LemmaCategoryEnum.flowers: + return "${AppConfig.svgAssetsBaseURL}/${AnalyticsConstants.flowerSvgFileName}"; + } + } + String get emoji { switch (this) { case LemmaCategoryEnum.flowers: diff --git a/lib/pangea/analytics/models/construct_use_model.dart b/lib/pangea/analytics/models/construct_use_model.dart index e8685364d..0263351fd 100644 --- a/lib/pangea/analytics/models/construct_use_model.dart +++ b/lib/pangea/analytics/models/construct_use_model.dart @@ -1,4 +1,3 @@ -import 'package:fluffychat/pangea/analytics/constants/analytics_constants.dart'; import 'package:fluffychat/pangea/analytics/enums/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics/enums/construct_use_type_enum.dart'; import 'package:fluffychat/pangea/analytics/models/constructs_model.dart'; @@ -65,19 +64,4 @@ class ConstructUses { }; return json; } - - String get xpEmoji { - if (points < AnalyticsConstants.xpForGreens) { - // bean emoji - return AnalyticsConstants.emojiForSeed; - } - - if (points < AnalyticsConstants.xpForFlower) { - // sprout emoji - return AnalyticsConstants.emojiForGreen; - } - - // flower emoji - return AnalyticsConstants.emojiForFlower; - } } diff --git a/lib/pangea/analytics/utils/get_svg_link.dart b/lib/pangea/analytics/utils/get_svg_link.dart index ad3dd9376..3ef7fb014 100644 --- a/lib/pangea/analytics/utils/get_svg_link.dart +++ b/lib/pangea/analytics/utils/get_svg_link.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; String? getMorphSvgLink({ @@ -7,9 +8,6 @@ String? getMorphSvgLink({ String? morphTag, required BuildContext context, }) { - const baseURL = - "https://pangea-chat-client-assets.s3.us-east-1.amazonaws.com"; - if (morphTag == null) { final key = morphFeature.toLowerCase(); String? filename; @@ -51,7 +49,7 @@ String? getMorphSvgLink({ return null; } - return "$baseURL/$filename"; + return "${AppConfig.svgAssetsBaseURL}/$filename"; } final key = "${morphFeature.toLowerCase()}${morphTag.toLowerCase()}"; @@ -180,5 +178,5 @@ String? getMorphSvgLink({ return null; } - return "$baseURL/$filename"; + return "${AppConfig.svgAssetsBaseURL}/$filename"; } diff --git a/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart index 1f4bcd81b..78e394554 100644 --- a/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart @@ -12,6 +12,7 @@ import 'package:fluffychat/pangea/analytics/models/construct_list_model.dart'; import 'package:fluffychat/pangea/analytics/models/construct_use_model.dart'; import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; import 'package:fluffychat/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart'; +import 'package:fluffychat/pangea/common/widgets/customized_svg.dart'; import 'package:fluffychat/pangea/common/widgets/full_width_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -216,11 +217,10 @@ class VocabAnalyticsPopupState extends State { ? Colors.white : Colors.black, radius: 16, - child: Text( - " ${type.emoji}", - style: const TextStyle( - fontSize: 14, - ), + child: CustomizedSvg( + svgUrl: type.svgURL, + colorReplacements: const {}, + errorIcon: Text(type.emoji), ), ), Text( diff --git a/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart index e966ea857..06913eaf3 100644 --- a/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart @@ -18,6 +18,7 @@ import 'package:fluffychat/pangea/analytics/repo/lemma_info_repo.dart'; import 'package:fluffychat/pangea/analytics/repo/lemma_info_request.dart'; import 'package:fluffychat/pangea/analytics/repo/lemma_info_response.dart'; import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/common/widgets/customized_svg.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; @@ -469,12 +470,30 @@ class VocabDefinitionPopupState extends State { const SizedBox( height: 20, ), - Text( - "${widget.type.emoji} ${widget.points} XP", - style: TextStyle( - color: textColor, - fontSize: 20, - ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(right: 10), + child: CustomizedSvg( + svgUrl: widget.type.svgURL, + colorReplacements: const {}, + errorIcon: Text( + widget.type.emoji, + style: const TextStyle( + fontSize: 20, + ), + ), + ), + ), + Text( + "${widget.points} XP", + style: TextStyle( + color: textColor, + fontSize: 20, + ), + ), + ], ), const SizedBox( height: 20, diff --git a/lib/pangea/common/widgets/customized_svg.dart b/lib/pangea/common/widgets/customized_svg.dart index 6621d9771..f6bed0177 100644 --- a/lib/pangea/common/widgets/customized_svg.dart +++ b/lib/pangea/common/widgets/customized_svg.dart @@ -6,22 +6,20 @@ import 'package:http/http.dart' as http; class CustomizedSvg extends StatelessWidget { final String svgUrl; - final String cacheKey; final Map colorReplacements; - final IconData? errorIcon; + final Widget errorIcon; const CustomizedSvg({ super.key, required this.svgUrl, - required this.cacheKey, required this.colorReplacements, - this.errorIcon = Icons.error_outline, + this.errorIcon = const Icon(Icons.error_outline), }); static final GetStorage _svgStorage = GetStorage('svg_cache'); Future _fetchSvg() async { - final cachedSvg = _svgStorage.read(cacheKey); + final cachedSvg = _svgStorage.read(svgUrl); if (cachedSvg != null) { return cachedSvg; } @@ -32,7 +30,7 @@ class CustomizedSvg extends StatelessWidget { } final String svgContent = response.body; - await _svgStorage.write(cacheKey, svgContent); + await _svgStorage.write(svgUrl, svgContent); return svgContent; } @@ -55,7 +53,7 @@ class CustomizedSvg extends StatelessWidget { if (snapshot.connectionState == ConnectionState.waiting) { return const CircularProgressIndicator(); } else if (snapshot.hasError) { - return Icon(errorIcon); + return errorIcon; } else if (snapshot.hasData) { return SvgPicture.string(snapshot.data!); } else { diff --git a/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_item.dart b/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_item.dart index 6e0f2b9c8..3fa907085 100644 --- a/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_item.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/morphs/morphological_list_item.dart @@ -36,14 +36,13 @@ class MorphologicalListItem extends StatelessWidget { icon: svgLink != null ? CustomizedSvg( svgUrl: svgLink!, - cacheKey: svgLink!, colorReplacements: { "white": Theme.of(context).cardColor.hexValue.toString(), "black": Theme.of(context).brightness == Brightness.dark ? "white" : "black", }, - errorIcon: icon, + errorIcon: Icon(icon), ) : Icon(icon), isSelected: isSelected,