Flutter 颤振-如何将值从函数返回到变量

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

我正在尝试从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 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

}