我有一个 riverpod 提供程序,由于奇怪的原因,它陷入了 AsyncLoading 状态。应该是 AsyncValue.guard 之后的 AsyncData,但无限期地保持在 AsyncLoading 状态
@riverpod
class SelectedAccount extends _$SelectedAccount {
// ignore: avoid_public_notifier_properties
late final logger = ref.read(loggerProvider("logger_tag"));
@override
FutureOr<Account> build() async => Future.any([]);
Future<void> select(AccountSearchRecord account) async {
state = const AsyncLoading();
logger.info("selecting $account");
logger.info("state $state"); // prints "state AsyncLoading<Account>()"
state = await AsyncValue.guard(() async {
final response = await ref.read(accountProvider(id: account.id).future);
logger.info("$response"); // prints successful response
return response;
});
logger.info("state $state"); // prints "state AsyncLoading<Account>()" again
}
}
试试这个:
@riverpod
class SelectedAccount extends _$SelectedAccount {
// ignore: avoid_public_notifier_properties
late final logger = ref.read(loggerProvider("logger_tag"));
@override
FutureOr<Account> build() async => Future.any([]);
Future<void> select(AccountSearchRecord account) async {
state = const AsyncLoading();
logger.info("selecting $account");
logger.info("state $state");
final response = await ref.read(accountProvider(id: account.id).future);
logger.info("$response");
state = await AsyncValue.data(response);
logger.info("state $state");
}
}