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