Skip to content

Commit

Permalink
add posthog observor for changes in path & capture auth change events
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewwong525 committed Mar 2, 2024
1 parent 1e508b6 commit 3580ccd
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 3 deletions.
24 changes: 21 additions & 3 deletions flutter/lib/services/auth_notifier.dart
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -20,7 +21,20 @@ class Auth extends _$Auth {
@override
Stream<AppUser?> 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(() {
Expand All @@ -33,9 +47,12 @@ class Auth extends _$Auth {
supa.SupabaseClient get client => supa.Supabase.instance.client;
supa.Session? get currentSession => client.auth.currentSession;

Future<void> refreshUser(supa.AuthState state) async {
Future<AppUser?> 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")
Expand All @@ -48,6 +65,7 @@ class Auth extends _$Auth {
activeProducts: List<String>.from(metadata?["active_products"] ?? []),
);
authStateController.add(user);
return user;
}

Future<void> signInWithPassword(String email, String password) async {
Expand Down
2 changes: 2 additions & 0 deletions flutter/lib/services/router_notifier.dart
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -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) {
Expand Down

0 comments on commit 3580ccd

Please sign in to comment.