From 3580ccdb972068fe54dc42d15302d1c19c9a10f0 Mon Sep 17 00:00:00 2001 From: Matthew Wong Date: Sat, 2 Mar 2024 18:37:43 -0500 Subject: [PATCH] add posthog observor for changes in path & capture auth change events --- flutter/lib/services/auth_notifier.dart | 24 ++++++++++++++++++++--- flutter/lib/services/router_notifier.dart | 2 ++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/flutter/lib/services/auth_notifier.dart b/flutter/lib/services/auth_notifier.dart index 4884fab..9f70032 100644 --- a/flutter/lib/services/auth_notifier.dart +++ b/flutter/lib/services/auth_notifier.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; +import 'package:posthog_flutter/posthog_flutter.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:supabase_flutter/supabase_flutter.dart' as supa; import 'package:devtodollars/models/app_user.dart'; @@ -20,7 +21,20 @@ class Auth extends _$Auth { @override Stream build() { final streamSub = client.auth.onAuthStateChange.listen((authState) async { - await refreshUser(authState); + final appUser = await refreshUser(authState); + + if (appUser != null) { + await Posthog() + .identify(userId: appUser.session.user.id, userProperties: { + "email": appUser.session.user.email ?? "", + "active_products": appUser.activeProducts, + }); + } else { + await Posthog().reset(); + } + await Posthog().capture(eventName: "user auth change", properties: { + "auth_change_event": authState.event.name, + }); }); ref.onDispose(() { @@ -33,9 +47,12 @@ class Auth extends _$Auth { supa.SupabaseClient get client => supa.Supabase.instance.client; supa.Session? get currentSession => client.auth.currentSession; - Future refreshUser(supa.AuthState state) async { + Future refreshUser(supa.AuthState state) async { final session = state.session; - if (session == null) return authStateController.add(null); + if (session == null) { + authStateController.add(null); + return null; + } final metadata = await client .from("stripe") @@ -48,6 +65,7 @@ class Auth extends _$Auth { activeProducts: List.from(metadata?["active_products"] ?? []), ); authStateController.add(user); + return user; } Future signInWithPassword(String email, String password) async { diff --git a/flutter/lib/services/router_notifier.dart b/flutter/lib/services/router_notifier.dart index dfe5ead..35cf90c 100644 --- a/flutter/lib/services/router_notifier.dart +++ b/flutter/lib/services/router_notifier.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:posthog_flutter/posthog_flutter.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:devtodollars/components/dialog_page.dart'; import 'package:devtodollars/components/reset_password_dialog.dart'; @@ -21,6 +22,7 @@ GoRouter router(RouterRef ref) { return GoRouter( initialLocation: initUrl?.path, // DO NOT REMOVE navigatorKey: navigatorKey, + observers: [PosthogObserver()], redirect: (context, state) async { return authState.when( data: (user) {