AsyncValue.guard 使用 AsyncLoading 的结果

问题描述 投票:0回答:1

我有一个 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
  }
}
flutter dart riverpod
1个回答
0
投票

试试这个:

@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"); 

      }
}
© www.soinside.com 2019 - 2024. All rights reserved.