add mixin with function to set lemma emoji and send analytics
This commit is contained in:
parent
305c08af73
commit
c70e066e9e
4 changed files with 52 additions and 35 deletions
|
|
@ -4,13 +4,30 @@ import 'package:fluffychat/pangea/analytics_misc/put_analytics_controller.dart';
|
|||
import 'package:fluffychat/pangea/constructs/construct_identifier.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
||||
class EmojiAnalyticsController {
|
||||
void sendEmojiAnalytics(
|
||||
mixin LemmaEmojiSetter {
|
||||
Future<void> setLemmaEmoji(
|
||||
ConstructIdentifier constructId,
|
||||
String emoji,
|
||||
String? targetId,
|
||||
) async {
|
||||
if (constructId.userSetEmoji.isEmpty) {
|
||||
_sendEmojiAnalytics(
|
||||
constructId,
|
||||
targetId: targetId,
|
||||
);
|
||||
}
|
||||
|
||||
await constructId.setUserLemmaInfo(
|
||||
constructId.userLemmaInfo.copyWith(emojis: [emoji]),
|
||||
);
|
||||
}
|
||||
|
||||
void _sendEmojiAnalytics(
|
||||
ConstructIdentifier constructId, {
|
||||
String? eventId,
|
||||
String? roomId,
|
||||
String? targetId,
|
||||
) {
|
||||
}) {
|
||||
MatrixState.pangeaController.putAnalytics.setState(
|
||||
AnalyticsStream(
|
||||
eventId: eventId,
|
||||
|
|
@ -84,6 +84,7 @@ class PangeaAnyState {
|
|||
if (entry != null) {
|
||||
try {
|
||||
entry.entry.remove();
|
||||
entry.entry.dispose();
|
||||
} catch (err, s) {
|
||||
ErrorHandler.logError(
|
||||
e: err,
|
||||
|
|
@ -117,6 +118,7 @@ class PangeaAnyState {
|
|||
for (int i = 0; i < shouldRemove.length; i++) {
|
||||
try {
|
||||
shouldRemove[i].entry.remove();
|
||||
shouldRemove[i].entry.dispose();
|
||||
} catch (err, s) {
|
||||
ErrorHandler.logError(
|
||||
e: err,
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ import 'package:flutter/material.dart';
|
|||
import 'package:shimmer/shimmer.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/emoji_analytics_controller.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/get_analytics_controller.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/lemma_emoji_setter_mixin.dart';
|
||||
import 'package:fluffychat/pangea/common/utils/error_handler.dart';
|
||||
import 'package:fluffychat/pangea/common/utils/overlay.dart';
|
||||
import 'package:fluffychat/pangea/constructs/construct_identifier.dart';
|
||||
|
|
@ -29,7 +29,8 @@ class LemmaHighlightEmojiRow extends StatefulWidget {
|
|||
LemmaHighlightEmojiRowState createState() => LemmaHighlightEmojiRowState();
|
||||
}
|
||||
|
||||
class LemmaHighlightEmojiRowState extends State<LemmaHighlightEmojiRow> {
|
||||
class LemmaHighlightEmojiRowState extends State<LemmaHighlightEmojiRow>
|
||||
with LemmaEmojiSetter {
|
||||
bool _showShimmer = true;
|
||||
String? _selectedEmoji;
|
||||
|
||||
|
|
@ -87,12 +88,10 @@ class LemmaHighlightEmojiRowState extends State<LemmaHighlightEmojiRow> {
|
|||
Future<void> _setEmoji(String emoji, BuildContext context) async {
|
||||
try {
|
||||
setState(() => _selectedEmoji = emoji);
|
||||
await widget.cId.setUserLemmaInfo(
|
||||
widget.cId.userLemmaInfo.copyWith(emojis: [emoji]),
|
||||
);
|
||||
EmojiAnalyticsController.sendEmojiAnalytics(
|
||||
await setLemmaEmoji(
|
||||
widget.cId,
|
||||
emoji,
|
||||
"emoji-choice-item-$emoji-${widget.cId.lemma}",
|
||||
);
|
||||
} catch (e, s) {
|
||||
debugger(when: kDebugMode);
|
||||
|
|
|
|||
|
|
@ -2,12 +2,13 @@ import 'package:flutter/material.dart';
|
|||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/lemma_emoji_setter_mixin.dart';
|
||||
import 'package:fluffychat/pangea/common/utils/error_handler.dart';
|
||||
import 'package:fluffychat/pangea/common/utils/overlay.dart';
|
||||
import 'package:fluffychat/pangea/events/models/pangea_token_model.dart';
|
||||
import 'package:fluffychat/pangea/lemmas/lemma_emoji_picker.dart';
|
||||
import 'package:fluffychat/pangea/toolbar/widgets/select_mode_buttons.dart';
|
||||
import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/lemma_meaning_builder.dart';
|
||||
import 'package:fluffychat/widgets/future_loading_dialog.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
||||
class TokenEmojiButton extends StatefulWidget {
|
||||
|
|
@ -32,15 +33,19 @@ class TokenEmojiButton extends StatefulWidget {
|
|||
}
|
||||
|
||||
class TokenEmojiButtonState extends State<TokenEmojiButton>
|
||||
with TickerProviderStateMixin {
|
||||
with TickerProviderStateMixin, LemmaEmojiSetter {
|
||||
final double buttonSize = 20.0;
|
||||
SelectMode? _prevMode;
|
||||
AnimationController? _controller;
|
||||
Animation<double>? _sizeAnimation;
|
||||
|
||||
String? _emoji;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_emoji = widget.token?.vocabConstructID.userSetEmoji.firstOrNull;
|
||||
|
||||
_initAnimation();
|
||||
_prevMode = widget.selectModeNotifier.value;
|
||||
widget.selectModeNotifier.addListener(_onUpdateSelectMode);
|
||||
|
|
@ -55,8 +60,6 @@ class TokenEmojiButtonState extends State<TokenEmojiButton>
|
|||
super.dispose();
|
||||
}
|
||||
|
||||
String? get _emoji => widget.token?.vocabConstructID.userSetEmoji.firstOrNull;
|
||||
|
||||
void _initAnimation() {
|
||||
if (MatrixState.pangeaController.subscriptionController.isSubscribed ==
|
||||
false) {
|
||||
|
|
@ -94,7 +97,7 @@ class TokenEmojiButtonState extends State<TokenEmojiButton>
|
|||
void showTokenEmojiPopup() {
|
||||
if (widget.targetId == null || widget.token == null) return;
|
||||
OverlayUtil.showPositionedCard(
|
||||
overlayKey: "overlay_emoji_selector_${widget.targetId}",
|
||||
overlayKey: "overlay_emoji_selector",
|
||||
context: context,
|
||||
cardToShow: LemmaMeaningBuilder(
|
||||
langCode:
|
||||
|
|
@ -112,16 +115,9 @@ class TokenEmojiButtonState extends State<TokenEmojiButton>
|
|||
),
|
||||
child: LemmaEmojiPicker(
|
||||
emojis: controller.lemmaInfo?.emoji ?? [],
|
||||
onSelect: (emoji) async {
|
||||
final resp = await showFutureLoadingDialog(
|
||||
context: context,
|
||||
future: () => _setTokenEmoji(emoji),
|
||||
);
|
||||
if (mounted && !resp.isError) {
|
||||
MatrixState.pAnyState.closeOverlay(
|
||||
"overlay_emoji_selector_${widget.targetId}",
|
||||
);
|
||||
}
|
||||
onSelect: (emoji) {
|
||||
_setTokenEmoji(emoji);
|
||||
MatrixState.pAnyState.closeOverlay("overlay_emoji_selector");
|
||||
},
|
||||
loading: controller.isLoading,
|
||||
),
|
||||
|
|
@ -137,18 +133,21 @@ class TokenEmojiButtonState extends State<TokenEmojiButton>
|
|||
);
|
||||
}
|
||||
|
||||
Future<void> _setTokenEmoji(String emoji) async {
|
||||
void _setTokenEmoji(String emoji) {
|
||||
setState(() => _emoji = emoji);
|
||||
|
||||
if (widget.targetId == null || widget.token == null) return;
|
||||
// await widget.token!.vocabConstructID.setEmojiWithXP(
|
||||
// emoji: emoji,
|
||||
// targetId: widget.targetId!,
|
||||
// );
|
||||
await widget.token!.vocabConstructID.setUserLemmaInfo(
|
||||
widget.token!.vocabConstructID.userLemmaInfo.copyWith(
|
||||
emojis: [emoji],
|
||||
),
|
||||
);
|
||||
if (mounted) setState(() {});
|
||||
setLemmaEmoji(
|
||||
widget.token!.vocabConstructID,
|
||||
emoji,
|
||||
widget.targetId,
|
||||
).catchError((e, s) {
|
||||
ErrorHandler.logError(
|
||||
data: widget.token!.toJson(),
|
||||
e: e,
|
||||
s: s,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue