fix: use construct id json in route for analytics details page

This commit is contained in:
ggurdin 2025-12-19 16:12:45 -05:00
parent b8f2a85eed
commit 75b60781af
No known key found for this signature in database
GPG key ID: A01CB41737CBB478
6 changed files with 25 additions and 8 deletions

View file

@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
@ -540,9 +541,10 @@ abstract class AppRoutes {
GoRoute(
path: ':construct',
pageBuilder: (context, state) {
final construct = ConstructIdentifier.fromString(
state.pathParameters['construct']!,
final construct = ConstructIdentifier.fromJson(
jsonDecode(state.pathParameters['construct']!),
);
return defaultPageBuilder(
context,
state,
@ -571,8 +573,8 @@ abstract class AppRoutes {
GoRoute(
path: ':construct',
pageBuilder: (context, state) {
final construct = ConstructIdentifier.fromString(
state.pathParameters['construct']!,
final construct = ConstructIdentifier.fromJson(
jsonDecode(state.pathParameters['construct']!),
);
return defaultPageBuilder(
context,

View file

@ -1,3 +1,5 @@
import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
@ -164,7 +166,7 @@ class MorphFeatureBox extends StatelessWidget {
morphTag: morphTag,
constructAnalytics: analytics,
onTap: () => context.go(
"/rooms/analytics/${id.type.string}/${Uri.encodeComponent(id.string)}",
"/rooms/analytics/${id.type.string}/${Uri.encodeComponent(jsonEncode(id.toJson()))}",
),
);
},

View file

@ -36,6 +36,14 @@ class VocabDetailsViewState extends State<VocabDetailsView> {
_emojiNotifier.value = constructId.userLemmaInfo.emojis?.firstOrNull;
}
@override
void didUpdateWidget(covariant VocabDetailsView oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.constructId != widget.constructId) {
_emojiNotifier.value = constructId.userLemmaInfo.emojis?.firstOrNull;
}
}
@override
void dispose() {
_emojiNotifier.dispose();

View file

@ -1,3 +1,5 @@
import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
@ -182,7 +184,7 @@ class VocabAnalyticsListView extends StatelessWidget {
.userController.userL2Code!,
);
context.go(
"/rooms/analytics/${vocabItem.id.type.string}/${Uri.encodeComponent(vocabItem.id.string)}",
"/rooms/analytics/${vocabItem.id.type.string}/${Uri.encodeComponent(jsonEncode(vocabItem.id.toJson()))}",
);
},
constructId: vocabItem.id,

View file

@ -1,3 +1,5 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
@ -55,7 +57,7 @@ mixin LemmaEmojiSetter {
onTap: () {
ScaffoldMessenger.of(context).hideCurrentSnackBar();
context.go(
"/rooms/analytics/${constructId.type.name}/${Uri.encodeComponent(constructId.string)}",
"/rooms/analytics/${constructId.type.name}/${Uri.encodeComponent(jsonEncode(constructId.toJson()))}",
);
},
),

View file

@ -1,6 +1,7 @@
// ignore_for_file: depend_on_referenced_packages, implementation_imports
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
@ -168,7 +169,7 @@ class ConstructNotificationOverlayState
void _showDetails() {
context.go(
"/rooms/analytics/${ConstructTypeEnum.morph.string}/${Uri.encodeComponent(widget.construct.string)}",
"/rooms/analytics/${ConstructTypeEnum.morph.string}/${Uri.encodeComponent(jsonEncode(widget.construct.toJson()))}",
);
}