Merge pull request #3334 from pangeachat/3331-clicking-analytics-header-items-navigates-to-full-page-display
chore: redirect to analytics page instead of opening analytics popup
This commit is contained in:
commit
82db672f85
10 changed files with 97 additions and 92 deletions
|
|
@ -32,7 +32,9 @@ import 'package:fluffychat/pages/settings_style/settings_style.dart';
|
|||
import 'package:fluffychat/pangea/activity_generator/activity_generator.dart';
|
||||
import 'package:fluffychat/pangea/activity_planner/activity_planner_page.dart';
|
||||
import 'package:fluffychat/pangea/analytics_page/analytics_page.dart';
|
||||
import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart';
|
||||
import 'package:fluffychat/pangea/common/widgets/pangea_side_view.dart';
|
||||
import 'package:fluffychat/pangea/constructs/construct_identifier.dart';
|
||||
import 'package:fluffychat/pangea/find_your_people/find_your_people.dart';
|
||||
import 'package:fluffychat/pangea/guard/p_vguard.dart';
|
||||
import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart';
|
||||
|
|
@ -332,7 +334,14 @@ abstract class AppRoutes {
|
|||
pageBuilder: (context, state) => defaultPageBuilder(
|
||||
context,
|
||||
state,
|
||||
const AnalyticsPage(),
|
||||
AnalyticsPage(
|
||||
selectedIndicator: ProgressIndicatorEnum.fromString(
|
||||
state.uri.queryParameters['mode'] ?? 'vocab',
|
||||
),
|
||||
constructZoom: state.extra is ConstructIdentifier
|
||||
? state.extra as ConstructIdentifier
|
||||
: null,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ import 'package:fluffychat/pangea/analytics_downloads/analytics_download_button.
|
|||
import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart';
|
||||
import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart';
|
||||
import 'package:fluffychat/pangea/common/utils/error_handler.dart';
|
||||
import 'package:fluffychat/pangea/common/widgets/full_width_dialog.dart';
|
||||
import 'package:fluffychat/pangea/constructs/construct_identifier.dart';
|
||||
import 'package:fluffychat/pangea/constructs/construct_level_enum.dart';
|
||||
import 'package:fluffychat/pangea/morphs/default_morph_mapping.dart';
|
||||
|
|
@ -34,26 +33,6 @@ class AnalyticsPopupWrapper extends StatefulWidget {
|
|||
final Widget? backButtonOverride;
|
||||
final bool showAppBar;
|
||||
|
||||
static void show(
|
||||
BuildContext context, {
|
||||
ConstructIdentifier? constructZoom,
|
||||
ConstructTypeEnum view = ConstructTypeEnum.vocab,
|
||||
Widget? backButtonOverride,
|
||||
}) {
|
||||
showDialog<AnalyticsPopupWrapper>(
|
||||
context: context,
|
||||
builder: (context) => FullWidthDialog(
|
||||
maxWidth: 600,
|
||||
maxHeight: 800,
|
||||
dialogContent: AnalyticsPopupWrapper(
|
||||
constructZoom: constructZoom,
|
||||
view: view,
|
||||
backButtonOverride: backButtonOverride,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AnalyticsPopupWrapperState createState() => AnalyticsPopupWrapperState();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,16 @@ import 'package:flutter/material.dart';
|
|||
|
||||
import 'package:fluffychat/pangea/analytics_page/analytics_page_view.dart';
|
||||
import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart';
|
||||
import 'package:fluffychat/pangea/constructs/construct_identifier.dart';
|
||||
|
||||
class AnalyticsPage extends StatefulWidget {
|
||||
const AnalyticsPage({super.key});
|
||||
final ProgressIndicatorEnum? selectedIndicator;
|
||||
final ConstructIdentifier? constructZoom;
|
||||
const AnalyticsPage({
|
||||
super.key,
|
||||
this.selectedIndicator,
|
||||
this.constructZoom,
|
||||
});
|
||||
|
||||
@override
|
||||
AnalyticsPageState createState() => AnalyticsPageState();
|
||||
|
|
@ -13,9 +20,23 @@ class AnalyticsPage extends StatefulWidget {
|
|||
class AnalyticsPageState extends State<AnalyticsPage> {
|
||||
ProgressIndicatorEnum? selectedIndicator = ProgressIndicatorEnum.wordsUsed;
|
||||
|
||||
void onIndicatorSelected(ProgressIndicatorEnum indicator) => setState(() {
|
||||
selectedIndicator = indicator;
|
||||
});
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
selectedIndicator = widget.selectedIndicator ??
|
||||
ProgressIndicatorEnum.wordsUsed; // Default to wordsUsed if not set
|
||||
}
|
||||
|
||||
@override
|
||||
void didUpdateWidget(covariant AnalyticsPage oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
if (oldWidget.selectedIndicator != widget.selectedIndicator &&
|
||||
widget.selectedIndicator != null) {
|
||||
setState(
|
||||
() => selectedIndicator = widget.selectedIndicator!,
|
||||
); // Update to new value
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => AnalyticsPageView(controller: this);
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@ class AnalyticsPageView extends StatelessWidget {
|
|||
children: [
|
||||
LearningProgressIndicators(
|
||||
selected: controller.selectedIndicator,
|
||||
onIndicatorSelected: controller.onIndicatorSelected,
|
||||
),
|
||||
Expanded(
|
||||
child: Builder(
|
||||
|
|
@ -56,13 +55,15 @@ class AnalyticsPageView extends StatelessWidget {
|
|||
return const LevelDialogContent();
|
||||
} else if (controller.selectedIndicator ==
|
||||
ProgressIndicatorEnum.morphsUsed) {
|
||||
return const AnalyticsPopupWrapper(
|
||||
return AnalyticsPopupWrapper(
|
||||
constructZoom: controller.widget.constructZoom,
|
||||
view: ConstructTypeEnum.morph,
|
||||
showAppBar: false,
|
||||
);
|
||||
} else if (controller.selectedIndicator ==
|
||||
ProgressIndicatorEnum.wordsUsed) {
|
||||
return const AnalyticsPopupWrapper(
|
||||
return AnalyticsPopupWrapper(
|
||||
constructZoom: controller.widget.constructZoom,
|
||||
view: ConstructTypeEnum.vocab,
|
||||
showAppBar: false,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,18 +1,16 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/construct_list_model.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/get_analytics_controller.dart';
|
||||
import 'package:fluffychat/pangea/analytics_summary/learning_progress_bar.dart';
|
||||
import 'package:fluffychat/pangea/analytics_summary/learning_progress_indicator_button.dart';
|
||||
import 'package:fluffychat/pangea/analytics_summary/level_bar_popup.dart';
|
||||
import 'package:fluffychat/pangea/analytics_summary/progress_indicator.dart';
|
||||
import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart';
|
||||
import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
/// A summary of "My Analytics" shown at the top of the chat list
|
||||
/// It shows a variety of progress indicators such as
|
||||
|
|
@ -20,11 +18,9 @@ import 'package:fluffychat/widgets/matrix.dart';
|
|||
/// be clicked to access more fine-grained analytics data.
|
||||
class LearningProgressIndicators extends StatefulWidget {
|
||||
final ProgressIndicatorEnum? selected;
|
||||
final Function(ProgressIndicatorEnum)? onIndicatorSelected;
|
||||
const LearningProgressIndicators({
|
||||
super.key,
|
||||
this.selected,
|
||||
this.onIndicatorSelected,
|
||||
});
|
||||
|
||||
@override
|
||||
|
|
@ -114,16 +110,8 @@ class LearningProgressIndicatorsState
|
|||
(c) => HoverButton(
|
||||
selected: widget.selected == c.indicator,
|
||||
onPressed: () {
|
||||
if (widget.onIndicatorSelected != null) {
|
||||
widget.onIndicatorSelected?.call(
|
||||
c.indicator,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
AnalyticsPopupWrapper.show(
|
||||
context,
|
||||
view: c,
|
||||
context.go(
|
||||
"/rooms/analytics?mode=${c.indicator.toShortString()}",
|
||||
);
|
||||
},
|
||||
child: ProgressIndicatorBadge(
|
||||
|
|
@ -180,16 +168,7 @@ class LearningProgressIndicatorsState
|
|||
cursor: SystemMouseCursors.click,
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
if (widget.onIndicatorSelected != null) {
|
||||
widget.onIndicatorSelected
|
||||
?.call(ProgressIndicatorEnum.level);
|
||||
return;
|
||||
}
|
||||
|
||||
showDialog<LevelBarPopup>(
|
||||
context: context,
|
||||
builder: (c) => const LevelBarPopup(),
|
||||
);
|
||||
context.go("/rooms/analytics?mode=level");
|
||||
},
|
||||
child: Row(
|
||||
spacing: 8.0,
|
||||
|
|
|
|||
|
|
@ -8,7 +8,31 @@ import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart';
|
|||
enum ProgressIndicatorEnum {
|
||||
level,
|
||||
wordsUsed,
|
||||
morphsUsed,
|
||||
morphsUsed;
|
||||
|
||||
static ProgressIndicatorEnum? fromString(String value) {
|
||||
switch (value) {
|
||||
case 'vocab':
|
||||
return ProgressIndicatorEnum.wordsUsed;
|
||||
case 'morphs':
|
||||
return ProgressIndicatorEnum.morphsUsed;
|
||||
case 'level':
|
||||
return ProgressIndicatorEnum.level;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
String toShortString() {
|
||||
switch (this) {
|
||||
case ProgressIndicatorEnum.wordsUsed:
|
||||
return 'vocab';
|
||||
case ProgressIndicatorEnum.morphsUsed:
|
||||
return 'morphs';
|
||||
case ProgressIndicatorEnum.level:
|
||||
return 'level';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension ProgressIndicatorsExtension on ProgressIndicatorEnum {
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@ import 'dart:async';
|
|||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/gain_points_animation.dart';
|
||||
import 'package:fluffychat/pangea/common/utils/overlay.dart';
|
||||
import 'package:fluffychat/pangea/constructs/construct_identifier.dart';
|
||||
|
|
@ -153,14 +153,9 @@ class ConstructNotificationOverlayState
|
|||
}
|
||||
|
||||
void _showDetails() {
|
||||
AnalyticsPopupWrapper.show(
|
||||
context,
|
||||
constructZoom: widget.construct,
|
||||
view: ConstructTypeEnum.morph,
|
||||
backButtonOverride: IconButton(
|
||||
icon: const Icon(Icons.close),
|
||||
onPressed: () => Navigator.of(context).pop(),
|
||||
),
|
||||
context.go(
|
||||
"/rooms/analytics?mode=morph",
|
||||
extra: widget.construct,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart';
|
||||
import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
|
@ -99,10 +100,15 @@ class MessageAnalyticsFeedbackState extends State<MessageAnalyticsFeedback>
|
|||
}
|
||||
|
||||
void _showAnalyticsDialog(ConstructTypeEnum? type) {
|
||||
AnalyticsPopupWrapper.show(
|
||||
context,
|
||||
view: type ?? ConstructTypeEnum.vocab,
|
||||
);
|
||||
switch (type) {
|
||||
case ConstructTypeEnum.morph:
|
||||
context.go("/rooms/analytics?mode=morph");
|
||||
break;
|
||||
case ConstructTypeEnum.vocab:
|
||||
default:
|
||||
context.go("/rooms/analytics?mode=vocab");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
|||
|
|
@ -1,13 +1,7 @@
|
|||
import 'dart:developer';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:material_symbols_icons/symbols.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart';
|
||||
import 'package:fluffychat/pangea/common/utils/error_handler.dart';
|
||||
import 'package:fluffychat/pangea/common/utils/overlay.dart';
|
||||
|
|
@ -26,6 +20,10 @@ import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/morph_sel
|
|||
import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart';
|
||||
import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:material_symbols_icons/symbols.dart';
|
||||
|
||||
class MorphologicalListItem extends StatelessWidget {
|
||||
final MorphFeaturesEnum morphFeature;
|
||||
|
|
@ -278,15 +276,9 @@ class MorphMeaningPopupState extends State<MorphMeaningPopup> {
|
|||
null)
|
||||
ConstructXpWidget(
|
||||
id: widget.cId,
|
||||
onTap: () => AnalyticsPopupWrapper.show(
|
||||
context,
|
||||
constructZoom: widget.cId,
|
||||
view: ConstructTypeEnum.morph,
|
||||
backButtonOverride: IconButton(
|
||||
icon: const Icon(Icons.close),
|
||||
onPressed: () =>
|
||||
Navigator.of(context).pop(),
|
||||
),
|
||||
onTap: () => context.go(
|
||||
"/rooms/analytics?mode=morph",
|
||||
extra: widget.cId,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart';
|
||||
import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart';
|
||||
import 'package:fluffychat/pangea/events/models/pangea_token_model.dart';
|
||||
import 'package:fluffychat/pangea/learning_settings/models/language_model.dart';
|
||||
|
|
@ -89,10 +89,9 @@ class WordZoomWidget extends StatelessWidget {
|
|||
),
|
||||
ConstructXpWidget(
|
||||
id: token.vocabConstructID,
|
||||
onTap: () => AnalyticsPopupWrapper.show(
|
||||
context,
|
||||
constructZoom: token.vocabConstructID,
|
||||
view: ConstructTypeEnum.vocab,
|
||||
onTap: () => context.go(
|
||||
"/rooms/analytics?mode=vocab",
|
||||
extra: token.vocabConstructID,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue