Flutter 颤振中未来函数到onPressed方法的返回值
我想使用Flutter 颤振中未来函数到onPressed方法的返回值,flutter,dart,Flutter,Dart,我想使用Future方法返回的值,并根据该值将新路由推送到导航器中 我对颤振是新手,所以我不知道如何从Future函数中获取值。我试过类似的东西- final value = await signInWithGoogle(); 未来功能代码- try { final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn(); final GoogleSignInAuthen
Future
方法返回的值,并根据该值将新路由推送到导航器中
我对颤振是新手,所以我不知道如何从Future
函数中获取值。我试过类似的东西-
final value = await signInWithGoogle();
未来功能代码-
try {
final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount
.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
final AuthResult result = await _auth.signInWithCredential(credential);
final FirebaseUser user = result.user;
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
if(result.additionalUserInfo.isNewUser){
Navigator.push(context, MaterialPageRoute(builder: (context) => GetInfo()));
}
else {
name = user.displayName;
email = user.email;
imageUrl = user.photoUrl;
return 1;
}
}
catch(e){
print(e.message);
return -1;
}
int\u值;
@凌驾
void initState()异步{
super.initState();
int newValue=使用Google()等待登录;
设置状态(){
_值=新值;
});
}
尝试下面的代码
// 1
// FirebaseAuthUtils
class FirebaseAuthUtils {
final GoogleSignIn _googleSignIn = GoogleSignIn();
Future<User> signInWithGoogle(BuildContext context) async {
User user;
FirebaseUser firebaseuser;
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
try {
firebaseuser = await _auth.signInWithCredential(credential);
assert(!firebaseuser.isAnonymous);
assert(await firebaseuser.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(firebaseuser.uid == currentUser.uid);
} on PlatformException catch (e) {
UtilsImporter().commanUtils.showToast(e.message, context);
}
if (firebaseuser != null) {
user = new User(firebaseuser.displayName, firebaseuser.email, firebaseuser.photoUrl);
}
print('===Google Login: ' + user._fullname);
return user;
}
}
// 2
// User Model
class User {
String _fullname;
String _emailAddress;
String _profilPic;
User(this._fullname, this._emailAddress, this._profilPic);
String get name => _fullname;
set name(String value) {
_fullname = value;
}
String get emailaddress => _emailAddress;
set image(String value) {
_emailAddress = value;
}
String get profilepic => _profilPic;
set profilepic(String value) {
_profilPic = value;
}
}
// 3
// Home Page
class Home extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return HomeState();
}
}
class HomeState extends State<Home> {
FirebaseAuthUtils firebaseAuthUtils = new FirebaseAuthUtils();
@override
Widget build(BuildContext context) {
//getting screen size
}
@override
void initState() {
super.initState();
var user = firebaseAuthUtils.signInWithGoogle;
print("User : $user");
}
}
//1
//FirebaseAuthUtils
类FirebaseAuthUtils{
最终GoogleSignIn _GoogleSignIn=GoogleSignIn();
使用Google(BuildContext上下文)异步进行未来登录{
用户;
FirebaseUser FirebaseUser;
final GoogleSignInAccount googleUser=wait_googleSignIn.signIn();
最终谷歌签名认证=
等待googleUser.authentication;
final AuthCredential credential=GoogleAuthProvider.getCredential(
accessToken:googleAuth.accessToken,
idToken:googleAuth.idToken,
);
试一试{
firebaseuser=使用凭证(凭证)等待身份验证登录;
断言(!firebaseuser.isAnonymous);
断言(等待firebaseuser.getIdToken()!=null);
final FirebaseUser currentUser=wait_auth.currentUser();
断言(firebaseuser.uid==currentUser.uid);
}平台上异常捕获(e){
UtilsImporter().commanUtils.showtoos(e.message,context);
}
if(firebaseuser!=null){
user=新用户(firebaseuser.displayName、firebaseuser.email、firebaseuser.photoUrl);
}
打印('==谷歌登录:'+用户。_全名);
返回用户;
}
}
// 2
//用户模型
类用户{
字符串_全名;
字符串\u电子邮件地址;
字符串_profic;
用户(此._全名、此._电子邮件地址、此._profilPic);
字符串get name=>\u fullname;
集合名称(字符串值){
_全名=值;
}
字符串get-emailaddress=>\u-emailaddress;
设置图像(字符串值){
_emailAddress=值;
}
字符串get profilepic=>\U profilPic;
设置profilepic(字符串值){
_profilPic=值;
}
}
// 3
//主页
类Home扩展了StatefulWidget{
@凌驾
状态createState(){
//TODO:实现createState
返回家园();
}
}
类HomeState扩展到State{
FirebaseAuthUtils FirebaseAuthUtils=新的FirebaseAuthUtils();
@凌驾
小部件构建(构建上下文){
//获取屏幕大小
}
@凌驾
void initState(){
super.initState();
var user=firebaseauthils.signInWithGoogle;
打印(“用户:$User”);
}
}
code-only答案不鼓励使用。请添加一些解释,说明这是如何解决问题的,或者这与现有答案有何不同。