From 2fe5a2399df4491ef6f63c87095d989d15f7ea5e Mon Sep 17 00:00:00 2001 From: JulianAlcala Date: Wed, 15 Apr 2026 17:06:57 +0200 Subject: [PATCH] fix(app): scope user analytics listener to authenticated shells --- .../mobile_app/lib/navigation/app_router.dart | 9 ++++-- apps/mobile_app/lib/save_family_app.dart | 13 --------- .../lib/widgets/user_identity_listener.dart | 28 +++++++++++++++++++ 3 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 apps/mobile_app/lib/widgets/user_identity_listener.dart diff --git a/apps/mobile_app/lib/navigation/app_router.dart b/apps/mobile_app/lib/navigation/app_router.dart index c8cc18b7..e0f353e5 100644 --- a/apps/mobile_app/lib/navigation/app_router.dart +++ b/apps/mobile_app/lib/navigation/app_router.dart @@ -18,6 +18,7 @@ import 'package:payments/payments.dart'; import 'package:profile/profile.dart'; import 'package:settings/settings.dart'; import 'package:sf_app_platform/core/config/app_mode.dart'; +import 'package:sf_app_platform/widgets/user_identity_listener.dart'; import 'package:splash/splash.dart'; final GlobalKey rootNavigatorKey = GlobalKey(); @@ -75,7 +76,9 @@ void configureAppRouter() { ), StatefulShellRoute.indexedStack( builder: (context, state, navShell) { - return LegacyDashboardBuilder().build(context, navShell); + return UserIdentityListener( + child: LegacyDashboardBuilder().build(context, navShell), + ); }, branches: [ StatefulShellBranch( @@ -400,7 +403,9 @@ void configureAppRouter() { ), StatefulShellRoute.indexedStack( builder: (context, state, navShell) { - return DashboardBuilder().build(context, navShell); + return UserIdentityListener( + child: DashboardBuilder().build(context, navShell), + ); }, branches: [ StatefulShellBranch( diff --git a/apps/mobile_app/lib/save_family_app.dart b/apps/mobile_app/lib/save_family_app.dart index daa3c13c..fae3b111 100644 --- a/apps/mobile_app/lib/save_family_app.dart +++ b/apps/mobile_app/lib/save_family_app.dart @@ -118,19 +118,6 @@ class SaveFamilyAppState extends ConsumerState Widget build(BuildContext context) { SizeUtils.init(context: context); - ref.listen>(userInfoProvider, (previous, next) { - next.whenData((user) { - UserInfoTrackingListener(ref.read(sfTrackingProvider)).onUserChanged( - userId: user.id, - role: user.role, - language: user.language, - createdAtMillis: user.createdAt, - hasPhone: user.phone.isNotEmpty, - hasApiKey: user.hasApiKey, - ); - }); - }); - return AppUpdateGate( child: MaterialApp.router( title: 'SaveFamily', diff --git a/apps/mobile_app/lib/widgets/user_identity_listener.dart b/apps/mobile_app/lib/widgets/user_identity_listener.dart new file mode 100644 index 00000000..484f6413 --- /dev/null +++ b/apps/mobile_app/lib/widgets/user_identity_listener.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:sf_shared/sf_shared.dart'; +import 'package:sf_tracking/sf_tracking.dart'; + +class UserIdentityListener extends ConsumerWidget { + final Widget child; + + const UserIdentityListener({super.key, required this.child}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + ref.listen>(userInfoProvider, (_, next) { + next.whenData((user) { + UserInfoTrackingListener(ref.read(sfTrackingProvider)).onUserChanged( + userId: user.id, + role: user.role, + language: user.language, + createdAtMillis: user.createdAt, + hasPhone: user.phone.isNotEmpty, + hasApiKey: user.hasApiKey, + ); + }); + }); + + return child; + } +}