Flutter 如何在颤振中实现循环推进指示器
在等待用户完成身份验证过程时,我试图实现一个CircularProgressIndicator,下面是代码,我使用Firebase作为身份验证后端Flutter 如何在颤振中实现循环推进指示器,flutter,dart,Flutter,Dart,在等待用户完成身份验证过程时,我试图实现一个CircularProgressIndicator,下面是代码,我使用Firebase作为身份验证后端 Future<void> signIn() async { if (_formKey.currentState.validate()) { new Loading(); _formKey.currentState.save(); try { final user = await
Future<void> signIn() async {
if (_formKey.currentState.validate()) {
new Loading();
_formKey.currentState.save();
try {
final user = await FirebaseAuth.instance
.signInWithEmailAndPassword(email: _email, password: _password);
if (user != null) {
final FirebaseUser user = await auth.currentUser();
print('success login');
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => Home(user: user),
));
}
} catch (e) {
print(e);
}
}
}
未来登录()异步{
if(_formKey.currentState.validate()){
新加载();
_formKey.currentState.save();
试一试{
最终用户=等待FirebaseAuth.instance
.使用电子邮件和密码登录(电子邮件:\电子邮件,密码:\密码);
如果(用户!=null){
final FirebaseUser user=wait auth.currentUser();
打印(“成功登录”);
导航器。更换(
上下文
材料路线(
生成器:(上下文)=>主页(用户:用户),
));
}
}捕获(e){
印刷品(e);
}
}
}
如何在代码中实现circularprogressindicator?circularprogressindicator可以在用户界面中通过一个条件实现。如果您想在页面的某个区域实现它,可以使用布尔值使其工作如下:
bool showCircular = false;
Future<void> signIn() async {
if (_formKey.currentState.validate()) {
new Loading();
_formKey.currentState.save();
setState(() {
showCircular=true;
});
try {
final user = await FirebaseAuth.instance
.signInWithEmailAndPassword(email: _email, password: _password);
if (user != null) {
final FirebaseUser user = await auth.currentUser();
setState(() {
showCircular=false;
});
print('success login');
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => Home(user: user),
));
}
} catch (e) {
print(e);
}
}
}
建议使用警报对话框来显示进度指示器。下面是AlertDialog的一个示例。要打开对话框,您需要上下文,所以将BuildContext作为参数并调用signIn(上下文);从登录按钮。我们将使用openLoadingDialog函数调用对话框,登录完成后,我们将使用Navigator.of(context.pop()强>
Future<void> signIn(BuildContext context) async {
if (_formKey.currentState.validate()) {
new Loading();
_formKey.currentState.save();
openLoadingDialog(context, 'Signing In...');
try {
final user = await FirebaseAuth.instance
.signInWithEmailAndPassword(email: _email, password: _password);
if (user != null) {
final FirebaseUser user = await auth.currentUser();
Navigator.of(context).pop();
print('success login');
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => Home(user: user),
));
}
} catch (e) {
print(e);
}
}
}
未来登录(构建上下文)异步{
if(_formKey.currentState.validate()){
新加载();
_formKey.currentState.save();
openLoadingDialog(上下文“登录…”);
试一试{
最终用户=等待FirebaseAuth.instance
.使用电子邮件和密码登录(电子邮件:\电子邮件,密码:\密码);
如果(用户!=null){
final FirebaseUser user=wait auth.currentUser();
Navigator.of(context.pop();
打印(“成功登录”);
导航器。更换(
上下文
材料路线(
生成器:(上下文)=>主页(用户:用户),
));
}
}捕获(e){
印刷品(e);
}
}
}
将此对话框粘贴到应用程序中的任何位置。您可以通过传递上下文和要显示的消息来调用它。
openLoadingDialog(BuildContext context, String text) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) => AlertDialog(
content: Row(children: <Widget>[
SizedBox(
width: 30,
height: 30,
child: CircularProgressIndicator(
strokeWidth: 1,
valueColor: AlwaysStoppedAnimation(Colors.black)
)
),
SizedBox(width: 10),
Text(text)
]),
)
);
}
openLoadingDialog(构建上下文,字符串文本){
显示对话框(
上下文:上下文,
禁止:错误,
生成器:(上下文)=>AlertDialog(
内容:行(子项:[
大小盒子(
宽度:30,
身高:30,
子对象:循环压缩机指示器(
冲程宽度:1,
valueColor:AlwaysStoppedAnimation(颜色.黑色)
)
),
尺寸箱(宽度:10),
文本(文本)
]),
)
);
}
谢谢你清楚的解释,你帮了我很多忙!
openLoadingDialog(BuildContext context, String text) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) => AlertDialog(
content: Row(children: <Widget>[
SizedBox(
width: 30,
height: 30,
child: CircularProgressIndicator(
strokeWidth: 1,
valueColor: AlwaysStoppedAnimation(Colors.black)
)
),
SizedBox(width: 10),
Text(text)
]),
)
);
}