Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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_Dart - Fatal编程技术网

Flutter 如何在颤振中实现循环推进指示器

Flutter 如何在颤振中实现循环推进指示器,flutter,dart,Flutter,Dart,在等待用户完成身份验证过程时,我试图实现一个CircularProgressIndicator,下面是代码,我使用Firebase作为身份验证后端 Future<void> signIn() async { if (_formKey.currentState.validate()) { new Loading(); _formKey.currentState.save(); try { final user = await

在等待用户完成身份验证过程时,我试图实现一个CircularProgressIndicator,下面是代码,我使用Firebase作为身份验证后端

 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)
        ]),
      )
    );
  }