代码之家  ›  专栏  ›  技术社区  ›  Charles Jr

如何显示颤振过渡之间的进度控制盘/控制杆?

  •  0
  • Charles Jr  · 技术社区  · 6 年前

    我已经创建了一个自定义登录页面,它看起来和工作方式都是我想要的。在验证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 {}
      } 
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   Shahzad Akram    6 年前

    从我的项目中选择一个功能示例来实现 CircularProgressIndicator 在颤振过渡之间。

    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;
      }
    }