Flutter 颤振-如何将值从函数返回到变量
我正在尝试从Firebase检索UID并将其返回到变量。然而,我无法让它工作。有人能帮忙吗。谢谢Flutter 颤振-如何将值从函数返回到变量,flutter,async-await,Flutter,Async Await,我正在尝试从Firebase检索UID并将其返回到变量。然而,我无法让它工作。有人能帮忙吗。谢谢 getUID() async { final userId = await widget.auth.getCurrentUser(); print('checking user id ${userId.uid}'); return userId.uid; } @override void initState() { super.initState(); void f
getUID() async {
final userId = await widget.auth.getCurrentUser();
print('checking user id ${userId.uid}');
return userId.uid;
}
@override
void initState() {
super.initState();
void foo() async {
final userID = await getUID();
print("UID is ${userID}");
}
foo();
print("UID is ${userID}");
}
您遇到的问题是。在内部函数
foo
中声明userId
,以便变量不存在于foo
之外。如果要在initState
的范围内访问它,需要在该范围内声明它:
@覆盖
void initState(){
super.initState();
字符串用户标识;
void foo()异步{
userID=wait getUID();
打印(“UID是${userID}”);
}
foo();
打印(“UID是${userID}”);
}
在每个类之外声明此项
String getCurrentUser(){
return FirebaseAuth.instance.currentUser;
}
您使用它的类应该是
class RootPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => new _RootPageState();
}
class _RootPageState extends State<RootPage> {
String _userId;
@override
void initState() {
super.initState();
_userId=getCurrentUser();
}
@override
Widget build(BuildContext context) {
return Text(_userId==null?"NO User Logged In":_userId);
}
class RootPage扩展StatefulWidget{
@凌驾
State createState()=>new_RootPageState();
}
类_RootPageState扩展了状态{
字符串_userId;
@凌驾
void initState(){
super.initState();
_userId=getCurrentUser();
}
@凌驾
小部件构建(构建上下文){
返回文本(\u userId==null?“没有用户登录”:\u userId);
}
另请注意,对于最新版本的firebaseauth,此函数不再返回未来
/// Create a String variable to hold the value of the user UID
String userId;
void getCurrentUser() {
try {
User loggedInUser = _auth.currentUser;
if (loggedInUser != null) {
userId = loggedInUser.uid;
}
} catch (e) {
print(e.toString());
}
}
您现在可以在当前类的任何位置访问当前登录的用户UID。定义“无法使其工作”,您会遇到哪些错误?这些错误发生在哪一行?使用调试器检查时会发生什么?抱歉。当我试图将其打印为最后一行中的showin时,它显示为userID未定义。我需要从foo函数外部获取值以传递到其他页面。请添加GetCurrentUsers的代码这是来自auth.dart文件的getCurrentUser的代码Future getCurrentUser()异步{FirebaseUser user=await{u firebaseAuth.currentUser();return user;}Asnwered,如果调用foo()后出现错误,请进行注释函数并尝试打印时显示为“UID为null”。虽然在foo函数内部可以打印值,但无法在外部打印。@RaghuCK问题是
foo
标记为async
,但是当调用foo
时,您不会等待它。这会导致initState
轻松通过它而不等待结果。通常我会说只需使initState
异步,但在这种情况下,flatter将不允许您这样做,因为所有async
函数都返回Future
,并且initState
必须返回void
。谢谢。请您帮助我如何将userID值转换成一个变量,以便我可以将其传递到其他页面。或者请告诉我如何从firebase获取用户的uid。@RaghuCK将其放在一个单独的函数中,您可以将其标记为async
。然后您可以在foo
上wait
并将结果设置为所需的变量。尽管在这种情况下,foo
是单独的函数,用户ID实际上来自getUID
。
@override
void initState() {
super.initState();
getCurrentUser(); // The code to get the currrent user is run in the initState and user UID stored in the 'userId' variable
}