Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振中未来函数到onPressed方法的返回值_Flutter_Dart - Fatal编程技术网

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答案不鼓励使用。请添加一些解释,说明这是如何解决问题的,或者这与现有答案有何不同。