gpt4 book ai didi

firebase - 用Firebase flutter ,试图访问与我的登录屏幕不同的屏幕或小部件上的当前用户

转载 作者:行者123 更新时间:2023-12-03 04:53:09 26 4
gpt4 key购买 nike

因此,我有一个用于登录屏幕的dart文件,然后是另一个主文件。我正在尝试访问主文件中的用户ID,以获取用户唯一的Cloud Firestore文档。但是,每当我调用getUser()时,都会说Future不是'String'类型的子类型。这是否意味着出于某种原因,Future不会被包装以返回uid String?

getUser() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
return user.uid;
}

在这里,我在与验证不同的dart文件中调用get用户,但在与getUser()函数相同的文件中。
return StreamBuilder<DocumentSnapshot>(
stream: Firestore.instance.collection('watchlists').document(getUser()).snapshots(),
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot){
if (snapshot.hasError) {
return new Center(
child: Text('Error: ${snapshot.error}'),
);
}
if (!snapshot.hasData) {
return new Center(
child: CircularProgressIndicator(),
);
}
else {
var documents = snapshot.data.data;
var vals = documents.values;
List<WatchListItem> watchListItems = [];
for (int x = 0; x < vals.length; x++) {
watchListItems.add(
WatchListItem(
symbol: vals.elementAt(x).toString(),
price: 190.79,
),
);
}

return new Center(
child: ListView(
children: watchListItems,
),
);
}
},
);

当我尝试getUser()。toString()时,我得到的错误是getter'values'在null上被调用(我正在尝试获取数据库值)。只能在身份验证时访问当前用户吗?还是只要用户登录就可以随时在应用程序中的任何位置访问它?我看到的一种解决方法是在登录时获取uid,然后将其作为参数传递给我要访问的每个新Widget。我在这方面过得很艰难,因为Google几乎没有关于将自己的Flutter与Firebase结合使用的任何文档。

最佳答案

getUser()返回Future<String>,而document()接受String作为参数:

/// so that the resulting list will be chronologically-sorted.
DocumentReference document([String path]) =>
DocumentReference._(_delegate.document(path), firestore);

因此,调用 getUser()的最佳位置是在 initState内部。在 initState中,您可以执行以下操作:
String userId = await getUser();

然后在 userId中使用 document()

关于firebase - 用Firebase flutter ,试图访问与我的登录屏幕不同的屏幕或小部件上的当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61064794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com