diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 9339c8537..36f547729 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -60,7 +60,6 @@ import 'package:fluffychat/widgets/share_scaffold_dialog.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:go_router/go_router.dart'; import 'package:image_picker/image_picker.dart'; import 'package:matrix/matrix.dart'; diff --git a/lib/pages/settings_chat/settings_chat_view.dart b/lib/pages/settings_chat/settings_chat_view.dart index 9942efa8a..58eec8d46 100644 --- a/lib/pages/settings_chat/settings_chat_view.dart +++ b/lib/pages/settings_chat/settings_chat_view.dart @@ -6,7 +6,6 @@ import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/settings_switch_list_tile.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'settings_chat.dart'; diff --git a/lib/pangea/analytics_misc/level_up/level_up_popup.dart b/lib/pangea/analytics_misc/level_up/level_up_popup.dart index 4ef50782e..4055cbe85 100644 --- a/lib/pangea/analytics_misc/level_up/level_up_popup.dart +++ b/lib/pangea/analytics_misc/level_up/level_up_popup.dart @@ -53,7 +53,6 @@ class LevelUpPopup extends StatelessWidget { } } -//animated progress bar -- move to own file later class LevelUpPopupContent extends StatefulWidget { final int prevLevel; final int level; @@ -85,6 +84,7 @@ class _LevelUpPopupContentState extends State final int _startGrammar = LevelUpManager.instance.prevGrammar; final int _startVocab = LevelUpManager.instance.prevVocab; late ConstructSummary? _constructSummary; + Timer? _summaryPollTimer; final String? _error = LevelUpManager.instance.error; String language = LevelUpManager.instance.userL2Code ?? "N/A"; @@ -94,23 +94,31 @@ class _LevelUpPopupContentState extends State void initState() { super.initState(); LevelUpManager.instance.markPopupSeen(); - displayedLevel = widget.prevLevel; _confettiController = ConfettiController(duration: const Duration(seconds: 1)); - - // Use LevelUpManager stats instead of fetching separately _endGrammar = LevelUpManager.instance.nextGrammar; _endVocab = LevelUpManager.instance.nextVocab; _constructSummary = LevelUpManager.instance.constructSummary; - + // Poll for constructSummary if not available + if (_constructSummary == null) { + _summaryPollTimer = + Timer.periodic(const Duration(milliseconds: 300), (timer) { + final summary = LevelUpManager.instance.constructSummary; + if (summary != null) { + setState(() { + _constructSummary = summary; + }); + timer.cancel(); + } + }); + } final client = Matrix.of(context).client; client.fetchOwnProfile().then((profile) { setState(() { avatarUrl = profile.avatarUrl; }); }); - _controller = AnimationController( duration: _animationDuration, vsync: this, @@ -136,8 +144,18 @@ class _LevelUpPopupContentState extends State _controller.forward(); } - // Use LevelUpManager's constructSummary instead of local _constructSummary + @override + void dispose() { + _summaryPollTimer?.cancel(); + _controller.dispose(); + _confettiController.dispose(); + LevelUpManager.instance.reset(); + stopConfetti(); + super.dispose(); + } + int _getSkillXP(LearningSkillsEnum skill) { + if (_constructSummary == null) return 0; return switch (skill) { LearningSkillsEnum.writing => _constructSummary?.writingConstructScore ?? 0, @@ -151,15 +169,6 @@ class _LevelUpPopupContentState extends State }; } - @override - void dispose() { - _controller.dispose(); - _confettiController.dispose(); - LevelUpManager.instance.reset(); - stopConfetti(); - super.dispose(); - } - @override @override Widget build(BuildContext context) { @@ -335,15 +344,15 @@ class _LevelUpPopupContentState extends State children: [ _buildSkillsTable(context), const SizedBox(height: 8), - if (_constructSummary?.textSummary != null) - Padding( - padding: const EdgeInsets.only(top: 16), - child: Text( - _constructSummary!.textSummary, - textAlign: TextAlign.left, - style: Theme.of(context).textTheme.bodyMedium, - ), + Padding( + padding: const EdgeInsets.only(top: 16), + child: Text( + _constructSummary?.textSummary ?? + L10n.of(context).loadingPleaseWait, + textAlign: TextAlign.left, + style: Theme.of(context).textTheme.bodyMedium, ), + ), //const SizedBox(height: 16), Padding( padding: const EdgeInsets.all(24.0),