Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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 如何在颤振过渡之间显示进度轮/进度条?_Flutter_Navigation_Progress Bar_Alert - Fatal编程技术网

Flutter 如何在颤振过渡之间显示进度轮/进度条?

Flutter 如何在颤振过渡之间显示进度轮/进度条?,flutter,navigation,progress-bar,alert,Flutter,Navigation,Progress Bar,Alert,我已经创建了一个自定义登录页面,它的外观和工作方式与我预期的一致。在验证Firebase用户并提取用户名、照片或占位符时,我很难确定在代码中如何以及在何处显示进度指示器。此外,如果身份验证失败,应在何处以及如何显示警报。这是我当前的代码 Future<Null> _loginButton() async { _email = _emailController.text.toString().replaceAll(" ", ""); _password = _passC

我已经创建了一个自定义登录页面,它的外观和工作方式与我预期的一致。在验证Firebase用户并提取用户名、照片或占位符时,我很难确定在代码中如何以及在何处显示进度指示器。此外,如果身份验证失败,应在何处以及如何显示警报。这是我当前的代码

Future<Null> _loginButton() async {
    _email = _emailController.text.toString().replaceAll(" ", "");
    _password = _passController.text.toString().replaceAll(" ", "");
    //_username = _nameController.text.toString().replaceAll(" ", "");
    if (_email != null && _password != null) {
      try {
        await FirebaseAuth.instance
            .signInWithEmailAndPassword(email: _email, password: _password);

        final FirebaseUser currentUser = await _auth.currentUser();
        final userid = currentUser.uid;
        currentUserId = userid;


        FirebaseDatabase.instance
            .reference()
            .child('users/$userid')
            .onValue
            .listen((Event event) {
          if (event.snapshot.value == null) {
            imageString = "placeholder";
            name = _username;
          } else if (event.snapshot.value != null) {
            imageString = event.snapshot.value['image'];
            name = event.snapshot.value['displayName'];
          }

          fb.child('users/$userid').set({
            'displayName': name,
            'image': imageString,
            'uid' : userid.toString()
          });
        }).onDone(() {
          Navigator.pushNamed(context, '/menu');
          Main.uid = userid;
        });
      } catch (error) {

      }
    } else {}
  } 
Future\u loginButton()异步{
_email=_emailController.text.toString().replaceAll(“,”);
_密码=_passController.text.toString().replaceAll(“,”);
//_用户名=_nameController.text.toString().replaceAll(“,”);
如果(_email!=null&&u password!=null){
试一试{
等待FirebaseAuth.instance
.使用电子邮件和密码登录(电子邮件:\电子邮件,密码:\密码);
final FirebaseUser currentUser=wait_auth.currentUser();
最终用户ID=currentUser.uid;
currentUserId=用户ID;
FirebaseDatabase.instance
.reference()
.child('users/$userid')
.onValue
.listen((事件){
如果(event.snapshot.value==null){
imageString=“占位符”;
name=\u用户名;
}else if(event.snapshot.value!=null){
imageString=event.snapshot.value['image'];
name=event.snapshot.value['displayName'];
}
fb.child('users/$userid').set({
“displayName”:名称,
“图像”:imageString,
“uid”:userid.toString()
});
}).onDone(){
Navigator.pushNamed(上下文“/menu”);
Main.uid=userid;
});
}捕获(错误){
}
}else{}
} 

检查我的项目中的一个功能示例,以在颤振过渡之间实现
循环压缩机指示器

class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  bool isLoading = false;

  @override
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Center(
            child: isLoading
                ? Column(
                    children: <Widget>[
                      CircularProgressIndicator(),
                      Divider(
                        height: 20,
                        color: Colors.transparent,
                      ),
                      Text("Please wait..."),
                    ],
                    mainAxisSize: MainAxisSize.min,
                  )
                : MaterialButton(
                    child: Row(
                      crossAxisAlignment: CrossAxisAlignment.center,
                      mainAxisSize: MainAxisSize.min,
                      children: <Widget>[
                        Image.asset(
                          'assets/google.png',
                          width: 25.0,
                        ),
                        Padding(
                          child: Text(
                            "Sign in with Google",
                            style: TextStyle(
                              fontFamily: 'Roboto',
                              color: Color.fromRGBO(68, 68, 76, .8),
                            ),
                          ),
                          padding: new EdgeInsets.only(left: 15.0),
                        ),
                      ],
                    ),
                    onPressed: () {
                      googleUserSignIn().then((user) {
                        this.setState(() {
                          //isLoading = false;
                          // Your task....
                        });
                      });
                    },
                    color: Colors.white,
                    elevation: 5,
                    highlightElevation: 2,
                  )));
  }

  Future<FirebaseUser> googleUserSignIn() async {
    this.setState(() {
      isLoading = true;
    });

    GoogleSignInAccount googleUser = await Firebase().firebaseGSI.signIn();

    GoogleSignInAuthentication googleAuth = await googleUser.authentication;

    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );

    FirebaseUser user =
        await Firebase().firebaseAuth.signInWithCredential(credential);

    return user;
  }
}
class LoginPage扩展StatefulWidget{
@凌驾
_LoginPagentate createState()=>_LoginPagentate();
}
类_loginpagentate扩展状态{
bool isLoading=false;
@凌驾
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:孤岛
?立柱(
儿童:[
CircularProgressIndicator(),
分隔器(
身高:20,
颜色:颜色。透明,
),
文本(“请稍候…”),
],
mainAxisSize:mainAxisSize.min,
)
:材料按钮(
孩子:排(
crossAxisAlignment:crossAxisAlignment.center,
mainAxisSize:mainAxisSize.min,
儿童:[
影像资产(
“assets/google.png”,
宽度:25.0,
),
填充物(
子:文本(
“使用谷歌登录”,
样式:TextStyle(
fontFamily:“机器人”,
颜色:颜色。来自RGBO(68,68,76,8),
),
),
填充:仅限新边设置(左:15.0),
),
],
),
已按下:(){
googleUserSignIn()。然后((用户){
此.setState(){
//isLoading=false;
//你的任务。。。。
});
});
},
颜色:颜色,白色,
标高:5,
高海拔:2,
)));
}
Future googleUserSignIn()异步{
此.setState(){
isLoading=true;
});
GoogleSignInAccount googleUser=等待Firebase().firebaseGSI.signIn();
GoogleSignInAuthentication googleAuth=等待googleUser.authentication;
final AuthCredential credential=GoogleAuthProvider.getCredential(
accessToken:googleAuth.accessToken,
idToken:googleAuth.idToken,
);
FirebaseUser用户=
等待Firebase().firebaseAuth.signInWithCredential(凭证);
返回用户;
}
}