Flutter - 在future函数之后从getter中获取值
Posted
技术标签:
【中文标题】Flutter - 在future函数之后从getter中获取值【英文标题】:Flutter - Get the value from getter after the future function 【发布时间】:2020-11-21 22:45:39 【问题描述】:我有一些这样的代码:
Future<FirebaseUser> _getUser() async
return await _fireAuth.currentUser();
bool get isSignedIn
_getUser().then((value)
return value != null;
).catchError((err)
print("Error While knowing isSignedIn --> $err");
);
基本上,我如何让代码在从未来函数(即_getUser())获取数据时等待,然后通过getter(即isSignedIn)返回结果。使用此代码,isSignedIn getter 的结果为 null
我还是 Flutter 的新手。非常感谢您的帮助。
【问题讨论】:
看看这个帖子的答案:***.com/questions/54515186/… 【参考方案1】:实际上,我认为您想要的是 Stream。当用户登录或注销时,您的 Stream 会更新。
Stream<FirebaseUser> get isSignedIn => _fireauth.onAuthChanged;
【讨论】:
【参考方案2】:如果我理解正确,我相信您正在尝试获取 .then()
中函数返回的值。你不能。至少不是你想要做的那样。
据我了解,.then()
的返回值可以用作下一个.then()
的参数,如果你要链接它们的话。例如。 getuser().then((return value of getUser)) => user).then((this is the user) => user.uid).then((this is the user.uid)) ; //...etc
如果您想捕获在.then()
内部计算的值,则必须在外部有一个变量,其值将保存结果。
例如
var myuser;
getUser().then((user) => myuser = user);
不完全是你的代码,但你明白了。
否则,我认为最好的做法是尽可能避免使用 then。使用 await 可以让您编写看起来同步且更易于阅读的代码。
例如
var user = await getUser()
这里,你根本不需要.then()
【讨论】:
【参考方案3】:Future<bool> get isSignedIn async
try
var user = await _getUser(); // wait for the function to finish
return Future.value(user != null);
catch (error)
print("Error While knowing isSignedIn --> $err");
你可以试试。
【讨论】:
【参考方案4】:当你调用async
函数_getUser()
时,你必须返回一个Future<bool>
Future<bool> get isSignedIn async
try
var user = await _getUser(); // wait for the function to finish
return user != null;
catch (error)
print("Error While knowing isSignedIn --> $err");
【讨论】:
其实和我做的_getUser函数差不多。使用这个我将不得不编写 then 方法,我将在其中使用这个 getter。这就是我要避免的事情。 如果你想要async
函数_getUser()
的结果,你不能这样做。以上是关于Flutter - 在future函数之后从getter中获取值的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法从 Flutter 中的 Future 函数获取反馈
将 Future 类型化结果从函数分配给 Flutter Widget 中的变量