From 3487c877936f5965b17f14bcae88f1e4d9217073 Mon Sep 17 00:00:00 2001 From: dshukertjr Date: Fri, 19 Jul 2024 17:02:47 +0900 Subject: [PATCH 1/3] fix: make sure duplicate initial session does not happen --- .../lib/src/supabase_auth.dart | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/supabase_flutter/lib/src/supabase_auth.dart b/packages/supabase_flutter/lib/src/supabase_auth.dart index cb5dde6a..500deb36 100644 --- a/packages/supabase_flutter/lib/src/supabase_auth.dart +++ b/packages/supabase_flutter/lib/src/supabase_auth.dart @@ -58,12 +58,19 @@ class SupabaseAuth with WidgetsBindingObserver { final persistedSession = await _localStorage.accessToken(); if (persistedSession != null) { try { - Supabase.instance.client.auth.setInitialSession(persistedSession); + await Supabase.instance.client.auth + .setInitialSession(persistedSession); + shouldEmitInitialSession = false; } catch (error, stackTrace) { Supabase.instance.log(error.toString(), stackTrace); } } } + if (shouldEmitInitialSession) { + Supabase.instance.client.auth + // ignore: invalid_use_of_internal_member + .notifyAllSubscribers(AuthChangeEvent.initialSession); + } _widgetsBindingInstance?.addObserver(this); if (options.detectSessionInUri) { @@ -71,11 +78,6 @@ class SupabaseAuth with WidgetsBindingObserver { } // Emit a null session if the user did not have persisted session - if (shouldEmitInitialSession) { - Supabase.instance.client.auth - // ignore: invalid_use_of_internal_member - .notifyAllSubscribers(AuthChangeEvent.initialSession); - } } /// Recovers the session from local storage. @@ -194,12 +196,10 @@ class SupabaseAuth with WidgetsBindingObserver { // before app_links 6.0.0 uri = await (_appLinks as dynamic).getInitialAppLink(); } on NoSuchMethodError catch (_) { - // The AppLinks package contains the initial link in the uriLinkStream - // starting from version 6.0.0. Before this version, getting the - // initial link was done with getInitialAppLink. Being in this catch - // handler means we are in at least version 6.0.0, meaning we do not - // need to handle the initial link manually. + // Needed to keep compatible with 5.0.0 and 6.0.0 // https://pub.dev/packages/app_links/changelog + // after app_links 6.0.0 + uri = await (_appLinks as dynamic).getInitialUri(); } if (uri != null) { await _handleDeeplink(uri); From 0c7896c59af2376e76647e16dd27b84544eb2e08 Mon Sep 17 00:00:00 2001 From: dshukertjr Date: Fri, 19 Jul 2024 17:56:42 +0900 Subject: [PATCH 2/3] Make sure the initial link is included for web --- packages/supabase_flutter/lib/src/supabase_auth.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/supabase_flutter/lib/src/supabase_auth.dart b/packages/supabase_flutter/lib/src/supabase_auth.dart index 500deb36..a1083a5c 100644 --- a/packages/supabase_flutter/lib/src/supabase_auth.dart +++ b/packages/supabase_flutter/lib/src/supabase_auth.dart @@ -199,7 +199,12 @@ class SupabaseAuth with WidgetsBindingObserver { // Needed to keep compatible with 5.0.0 and 6.0.0 // https://pub.dev/packages/app_links/changelog // after app_links 6.0.0 - uri = await (_appLinks as dynamic).getInitialUri(); + // + // app_links claims that the initial link will be included in the + // `uriLinkStream`, but that is not the case for web + if (kIsWeb) { + uri = await (_appLinks as dynamic).getInitialLink(); + } } if (uri != null) { await _handleDeeplink(uri); From 37c122cc9ad9a01894f8fb3a42d122ccd3b1619c Mon Sep 17 00:00:00 2001 From: dshukertjr Date: Fri, 19 Jul 2024 18:05:31 +0900 Subject: [PATCH 3/3] Update the comment on ignoreing initial link for latest app_link --- packages/supabase_flutter/lib/src/supabase_auth.dart | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/supabase_flutter/lib/src/supabase_auth.dart b/packages/supabase_flutter/lib/src/supabase_auth.dart index a1083a5c..fa3d72e8 100644 --- a/packages/supabase_flutter/lib/src/supabase_auth.dart +++ b/packages/supabase_flutter/lib/src/supabase_auth.dart @@ -196,9 +196,11 @@ class SupabaseAuth with WidgetsBindingObserver { // before app_links 6.0.0 uri = await (_appLinks as dynamic).getInitialAppLink(); } on NoSuchMethodError catch (_) { - // Needed to keep compatible with 5.0.0 and 6.0.0 - // https://pub.dev/packages/app_links/changelog - // after app_links 6.0.0 + // The AppLinks package contains the initial link in the uriLinkStream + // starting from version 6.0.0. Before this version, getting the + // initial link was done with getInitialAppLink. Being in this catch + // handler means we are in at least version 6.0.0, meaning we do not + // need to handle the initial link manually. // // app_links claims that the initial link will be included in the // `uriLinkStream`, but that is not the case for web