微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有什么方法可以在Riverpod的提供程序中传递参数

如何解决有什么方法可以在Riverpod的提供程序中传递参数

如何将FirebaseAuth用户传递给riverpod中的StreamProvider?

使用旧的提供程序包时, 我曾经从FirebaseAuth获取user.uid,然后将变量传递给StreamProvider,如果可以获取到user.uid,则返回StreamProvider。

@override
  Widget build(BuildContext context) {
    final FirebaseAuthService authService =
        Provider.of<FirebaseAuthService>(context,listen: false);
    return StreamBuilder<User>(
      stream: authService.onAuthStateChanged,builder: (BuildContext context,AsyncSnapshot<User> snapshot) {
        final User loggedInUser = snapshot.data;
        if (loggedInUser != null) {
          final String userId = loggedInUser.userId;
          return MultiProvider(
            providers: <SingleChildWidget>[
              StreamProvider<User>(
                initialData: User.initialData(),create: (_) => DB.instance.getLoggedInUserStream(
                  loggedInUserId: userId,),

解决方法

您可以使用Riverpod的family功能。

final user = StreamProvider.family<User,String>((ref,uid) {
  // use uid to get User
  return User;
});

然后使用提供程序:

useProvider(user(uid));

或者,您可以直接从FirebaseAuthService提供程序从用户提供程序read the value

final user = StreamProvider<User>((ref) {
  final stream = ref.watch(FirebaseAuthService.stream);
  // get uid from stream data
  return User;
});
,

使用family修饰符将外部值传递给提供程序。

final userStreamProvider = StreamProvider.family<User,uid) {
  return User(id: uid);
}); 

使用提供程序时,我们需要将该值传递给userStreamProvider

对于flutter_riverpod个用户,

Widget build(BuildContext context,ScopedReader watch) {
  final user = watch(userStreamProvider(uid));
}

对于hooks_riverpod个用户,

Widget build(BuildContext) {
  final user = useProvider(userStreamProvider(uid));
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。