如何通过异步调用 uid 从 Firebase 查询数据

Posted

技术标签:

【中文标题】如何通过异步调用 uid 从 Firebase 查询数据【英文标题】:How to query data from Firebase with an async call to uid 【发布时间】:2020-01-16 09:53:49 【问题描述】:

我正在尝试获取属于已登录用户的数据,但是,由于某种原因,“getuserui”是异步的。即使用户已登录在应用程序内执行操作,该函数仍会返回 Future....

我已经数不清自己尝试了多少不同的东西,包括 .then 等,但这是我最近的尝试。

 @override
  Widget build(BuildContext context) 
    return SizedBox(
      height: 900,
      child: StreamBuilder(
          stream: () async
            fireFirestore.instance.collection('properties').where('uid', isEqualTo: await _authService.getUserId()) .snapshots(),
          , 
          builder: (BuildContext context, AsyncSnapshot snapshot) 
            if (!snapshot.hasData)
              return const Text('Loading...');
            else 
              return ListView.builder( ...............

如果您需要查看 getUserId():

Future<String> getUserId() 
    return _auth.currentUser().then((value) => value.uid.toString());
  

(我已经在将来的方式(.then)和异步方式(async await)中完成了这个方法

它只是告诉我the argument type Future&lt;null&gt; can't be assigned to the parameter type Stream

【问题讨论】:

【参考方案1】:

首先,您将异步函数作为流传递,因此您的错误。其次,您需要将 StreamBuilder 包装在 FutureBuilder 中,因为它依赖于未来 _authService.getUserId()

@override
Widget build(BuildContext context) 
  return SizedBox(
    height: 900,
    child: FutureBuilder(
      future: _authService.getUserId(),
      builder: (context, snapshot) 
        if(snapshot.hasData) 
        return StreamBuilder(
          stream: fireFirestore.instance.collection('properties').where('uid', isEqualTo: snapshot.data) .snapshots(),
          builder: (context, snapshot) 
            ...
          ,
        );

        return Text('future had no data');
      ,
    ),
  );

【讨论】:

天哪,我为此损失了 2 天时间。(我完全不熟悉颤振)我可能每次需要这个,例如用户照片等,对吧?你是一个活生生的救星,当然应该给你一块饼干!谢谢 @raiton 是的。每当您的小部件依赖于未来的结果时,请考虑 FutureBuilder。很高兴,我们都去过那里。

以上是关于如何通过异步调用 uid 从 Firebase 查询数据的主要内容,如果未能解决你的问题,请参考以下文章

使用用户 ID 从 Firebase 获取数据

如何从 uid Firebase 数据库中获取电子邮件地址?

如何从android上的firebase获取用户uid?

如何使用 Vue.js Firebase UID 删除用户

如何每次从 Firebase 数据库中获取随机 UId?

如何通过在 swift 中实现观察者从 Firebase 实时数据库中获取嵌套数据