added support for multiple accounts with an account switcher in settings
This commit is contained in:
+10
@@ -126,6 +126,14 @@ abstract class LoadableHydratedBloc<
|
||||
add(Reset<TState>());
|
||||
}
|
||||
|
||||
// Blocs are rebuilt per account (see AccountScope). One that briefly
|
||||
// outlives its account would otherwise load with the next account's
|
||||
// credentials and persist the result into its own storage.
|
||||
final int _ownSession = SessionManager().sessionEpoch;
|
||||
|
||||
/// Whether the account this bloc was created for is still the active one.
|
||||
bool get ownsSession => SessionManager().isCurrentSession(_ownSession);
|
||||
|
||||
static const _sessionKey = #loadableSessionEpoch;
|
||||
|
||||
/// Runs [body] tagged with the current session: events it adds, also from
|
||||
@@ -136,6 +144,7 @@ abstract class LoadableHydratedBloc<
|
||||
|
||||
@override
|
||||
void add(LoadableHydratedBlocEvent<TState> event) {
|
||||
if (!ownsSession) return;
|
||||
final epoch = Zone.current[_sessionKey];
|
||||
if (epoch is int && !SessionManager().isCurrentSession(epoch)) return;
|
||||
super.add(event);
|
||||
@@ -173,6 +182,7 @@ abstract class LoadableHydratedBloc<
|
||||
final SessionSingleFlight _fetchFlight = SessionSingleFlight();
|
||||
|
||||
void fetch() {
|
||||
if (!ownsSession) return;
|
||||
unawaited(
|
||||
_fetchFlight.run(() {
|
||||
log('Fetching data for ${TState.toString()}');
|
||||
|
||||
Reference in New Issue
Block a user