silly way of initializing

pull/1490/head
William Jordan-Cooley 1 year ago
parent 1a4dc0ba95
commit 585a9a2be4

@ -62,6 +62,9 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
MessageMode toolbarMode = MessageMode.translation;
PangeaTokenText? _selectedSpan;
List<PangeaToken>? tokens;
bool initialized = false;
/// The number of activities that need to be completed before the toolbar is unlocked
/// If we don't have any good activities for them, we'll decrease this number
static const int neededActivities = 3;
@ -101,8 +104,6 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
: null;
}
List<PangeaToken>? tokens;
@override
void initState() {
super.initState();
@ -113,17 +114,12 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
);
debugPrint(
"selected token: ${widget._initialSelectedToken?.toJson()} total_xp:${widget._initialSelectedToken?.xp} vocab_construct_xp: ${widget._initialSelectedToken?.vocabConstruct.points} daysSincelastUseInWordMeaning ${widget._initialSelectedToken?.daysSinceLastUseByType(ActivityTypeEnum.wordMeaning)}",
"selected token: ${widget._initialSelectedToken?.text.content} total_xp:${widget._initialSelectedToken?.xp} vocab_construct_xp: ${widget._initialSelectedToken?.vocabConstruct.points} daysSincelastUseInWordMeaning ${widget._initialSelectedToken?.daysSinceLastUseByType(ActivityTypeEnum.wordMeaning)}",
);
debugPrint(
"${widget._initialSelectedToken?.vocabConstruct.uses.map((u) => "${u.useType} ${u.timeStamp}").join(", ")}",
);
_getTokens();
activitiesLeftToComplete = activitiesLeftToComplete -
widget._pangeaMessageEvent.numberOfActivitiesCompleted;
_reactionSubscription =
widget.chatController.room.client.onSync.stream.where(
(update) {
@ -146,36 +142,41 @@ class MessageOverlayController extends State<MessageSelectionOverlay>
tts.setupTTS();
_setInitialToolbarModeAndSelectedSpan();
}
MessageAnalyticsEntry? get messageAnalyticsEntry => tokens != null
? MatrixState.pangeaController.getAnalytics.perMessage.get(
tokens!,
// this logic should be in the controller
!pangeaMessageEvent.ownMessage &&
pangeaMessageEvent.messageDisplayRepresentation?.tokens != null,
)
: null;
Future<void> _getTokens() async {
tokens = pangeaMessageEvent.originalSent?.tokens;
activitiesLeftToComplete = activitiesLeftToComplete -
widget._pangeaMessageEvent.numberOfActivitiesCompleted;
if (pangeaMessageEvent.originalSent != null && tokens == null) {
debugPrint("fetching tokens");
if (pangeaMessageEvent.originalSent != null) {
pangeaMessageEvent.originalSent!
.tokensGlobal(
pangeaMessageEvent.senderId,
pangeaMessageEvent.originServerTs,
)
.then((tokens) {
// this isn't currently working because originalSent's _event is null
this.tokens = tokens;
.then(
(tokens) {
this.tokens = tokens;
_setInitialToolbarModeAndSelectedSpan();
initialized = true;
},
).onError((e, stackTrace) {
ErrorHandler.logError(e: "Error getting tokens: $e", s: stackTrace);
_setInitialToolbarModeAndSelectedSpan();
initialized = true;
});
} else {
_setInitialToolbarModeAndSelectedSpan();
initialized = true;
}
}
MessageAnalyticsEntry? get messageAnalyticsEntry => tokens != null
? MatrixState.pangeaController.getAnalytics.perMessage.get(
tokens!,
// this logic should be in the controller
!pangeaMessageEvent.ownMessage &&
pangeaMessageEvent.messageDisplayRepresentation?.tokens != null,
)
: null;
/// We need to check if the setState call is safe to call immediately
/// Kept getting the error: setState() or markNeedsBuild() called during build.
/// This is a workaround to prevent that error

@ -145,6 +145,8 @@ class MessageToolbar extends StatelessWidget {
@override
Widget build(BuildContext context) {
if (!overLayController.initialized) return const SizedBox();
return Container(
decoration: BoxDecoration(
color: Theme.of(context).cardColor,

Loading…
Cancel
Save