Flutter RiverPod:可以从通告程序的构建方法返回另一个提供程序吗?

ntjbwcob  于 2023-02-05  发布在  Flutter
关注(0)|答案(1)|浏览(168)

我想保持我的返回值为AsyncValue而不是Stream,所以我从Notifierbuild方法返回StreamProvider。在阅读了riverpod的代码库之后,我看不出这样做有什么缺点,但我从来没有遇到过任何项目做这样的事情。这样好吗?或者是否存在将Stream转换为AsyncValue的任何直接方式。

final _userProvider = StreamProvider.autoDispose<User?>((ref) {
  final repository = ref.watch(repositoryProvider);
  return repository.getUser(); //returns Stream<User?>
});

class AuthNotifier extends AutoDisposeNotifier<AsyncValue<User?>> {
  @override
  AsyncValue<User?> build() {
    return ref.watch(_userProvider);
  }

  Future<void> singOut() {
    return ref.read(repositoryProvider).signOut();
  }
}

final authProvider =
    AutoDisposeNotifierProvider<AuthNotifier, AsyncValue<User?>>(
        AuthNotifier.new);
5ktev3wc

5ktev3wc1#

这很好,是的。能够做这样的事情是build方法& ref.watch的目标
只要不返回提供程序本身,而是返回提供程序公开的值,就没有问题:

build() {
  return ref.watch(provider); // OK
}

build() {
  return provider // KO
}

相关问题