use SharedPreferencesAsync to avoid race condition in Sharedprefs

This was so painful to debug...
This commit is contained in:
Henry Hiles 2026-09-20 15:45:32 -04:00
commit e8fb3a8523
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
10 changed files with 69 additions and 44 deletions

View file

@ -1,22 +1,20 @@
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/shared_prefs.dart";
class MemberListOpenedController extends Notifier<bool> {
class MemberListOpenedController extends AsyncNotifier<bool> {
static const String key = "memberListOpened";
@override
bool build() =>
ref.watch(SharedPrefsController.provider).requireValue.getBool(key) ??
true;
Future<bool> build() async =>
await ref.watch(SharedPrefsController.provider).getBool(key) ?? true;
Future<void> set(bool value) async {
final prefs = ref.watch(SharedPrefsController.provider).requireValue;
state = value;
prefs.setBool(key, value);
state = .data(value);
await ref.watch(SharedPrefsController.provider).setBool(key, value);
}
static final provider = NotifierProvider<MemberListOpenedController, bool>(
MemberListOpenedController.new,
);
static final provider =
AsyncNotifierProvider<MemberListOpenedController, bool>(
MemberListOpenedController.new,
);
}