从登录的用户Flatter/Firebase获取文档列表

从登录的用户Flatter/Firebase获取文档列表,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我对Flatter/Firebase有点陌生,我正在尝试从登录用户集合的子集合中获取文档列表。当前,对于我拥有的代码,它在流中为登录的用户print语句返回null,但是如果我手动传递userid(而不是传递uid),它会工作 数据库.dart 类数据库服务{ 最后一个字符串uid; 数据库服务({this.uid}); //快照中的列表 列表_ListFromSnapshot(QuerySnapshot快照){ 打印(快照、文档); 返回snapshot.documents.map((doc)

我对Flatter/Firebase有点陌生,我正在尝试从登录用户集合的子集合中获取文档列表。当前,对于我拥有的代码,它在流中为登录的用户print语句返回null,但是如果我手动传递userid(而不是传递
uid
),它会工作

数据库.dart
类数据库服务{
最后一个字符串uid;
数据库服务({this.uid});
//快照中的列表
列表_ListFromSnapshot(QuerySnapshot快照){
打印(快照、文档);
返回snapshot.documents.map((doc){
退货项目(
名称:文件数据['name']??“,
);
}).toList();
}
流式获取项目{
打印(“当前登录用户$uid”);
返回Firestore.instance
.collection('用户')
.文件(uid)
.collection('项目')
.快照()
.map(_ListFromSnapshot);
}
}
霍姆·达特
class Home扩展了无状态小部件{
最终AuthService_auth=AuthService();
@凌驾
小部件构建(构建上下文){
返回StreamProvider.value(
值:DatabaseService()。项,
孩子:脚手架(
背景颜色:颜色。棕色[50],
appBar:appBar(
标题:文本(“MyApp”),
),
//只是一个小部件,它使用listview生成器为每个项目制作一张卡片。
正文:ItemList(),
),
);
}
}
飞镖
类身份验证服务{
final FirebaseAuth _auth=FirebaseAuth.instance;
//基于FirebaseUser创建用户obj
用户\u userFromFirebaseUser(FirebaseUser用户){
返回用户!=null?用户(uid:user.uid):null;
}
//身份验证更改用户流
流获取用户{
返回_auth.onAuthStateChanged
.map(_userFromFirebaseUser);
}
}

我有一种感觉,这与应用程序调用uid时uid的值不可用有关(与未来或等待/异步相关)。如果我弄明白了,我一定会发回这里。再次感谢您抽出时间查看。

最终选择了FutureBuilder,并能够创建如下功能:

Future<List<T>> getDocs() async {
    final Firestore _db = Firestore.instance;
    FirebaseUser user = await _auth.currentUser();

    if (user != null) {
      ref = _db.collection('users/${user.uid}/items');
    } else {
      return null;
    }
  }
Future getDocs()异步{
final Firestore _db=Firestore.instance;
FirebaseUser=等待_auth.currentUser();
如果(用户!=null){
ref=_db.collection('users/${user.uid}/items');
}否则{
返回null;
}
}

最终使用了FutureBuilder,并能够创建如下函数:

Future<List<T>> getDocs() async {
    final Firestore _db = Firestore.instance;
    FirebaseUser user = await _auth.currentUser();

    if (user != null) {
      ref = _db.collection('users/${user.uid}/items');
    } else {
      return null;
    }
  }
Future getDocs()异步{
final Firestore _db=Firestore.instance;
FirebaseUser=等待_auth.currentUser();
如果(用户!=null){
ref=_db.collection('users/${user.uid}/items');
}否则{
返回null;
}
}

Hi@Rockingoutt93是的,您是正确的,它与调用的
未来部分和
异步部分有关。在检索用户的函数中,需要使用它们作为声明中设置的
async
Future
类型。你能看看这些帖子并确认这是否对你有帮助吗?请让我知道@Rockingout93的进展情况。谢谢,我最终选择了一个非常不同的方法,使用了FutureBuilder。并在我的Future函数中指定以下内容,以便我可以将用户id包含在路径中:
FirebaseUser user=wait_auth.currentUser()
Hi@Rockingoutt93是的,您是正确的,它与调用的
Future
async
部分相关。在检索用户的函数中,需要使用它们作为声明中设置的
async
Future
类型。你能看看这些帖子并确认这是否对你有帮助吗?请让我知道@Rockingout93的进展情况。谢谢,我最终选择了一个非常不同的方法,使用了FutureBuilder。并在我的Future函数中指定以下内容,以便我可以将用户id包含在路径中:
FirebaseUser user=wait_auth.currentUser()
你能添加你的代码吗,仍然有类似的问题上面的代码块是我工作过的代码(很久以前,不记得它是不是伪代码)。如果你发布了一个新问题的链接,我可以看一看。你能添加你的代码吗,仍然有类似的问题上面的代码块是我正在使用的代码(很久以前,我不记得它是不是伪代码)。如果你发布一个新问题的链接,我可以看看。