在 Flutter 中将 CircularProgressIndicator 显示在前面

Iro*_*nic 2 dart flutter

我想在其他小部件前面显示一个类似加载的圆形条。下面是我目前使用的代码。它显示循环加载,但它在其他小部件之间。

它应该在上面。根据我尝试使用 Stack 的建议,但它仍然显示在小部件之间。我在这里做错了什么?

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

}

class _LoginPageState extends State<LoginPage> {

 bool visible = true ; //Testing purpose it is true. Actually it is false.    
@override

Widget build(BuildContext context) {

return Scaffold(
  key: _scaffoldKey,
  body: Stack(
        children: <Widget>[
          new Container(
            decoration: BoxDecoration(
          gradient: LinearGradient(
              begin: Alignment.topRight,
              end: FractionalOffset.bottomCenter,//Alignment.bottomLeft,

              colors: [Colors.green[900], Colors.lightBlueAccent]),
        ),

          ),SingleChildScrollView(
            child: new Form(
              key: _formKey,
              autovalidate: _autoValidate,
    child: Center(
    child: Column(
      children: <Widget>[
        Row(
                  children: <Widget>[
                    VerticalText(),
                    TextLogin(),                    
                  ],
                ),


        Divider(),          

        Container(
        width: 280,

        ),
        Container(
        width: 280,
        child: TextFormField(
          style: TextStyle(
            color: Colors.white,
          ),
            decoration: InputDecoration(
            border: InputBorder.none,
            hintText: 'Enter Email',
            fillColor: Colors.lightBlueAccent,
            labelText: 'Email',
            labelStyle: TextStyle(
              color: Colors.white70,
              fontSize: 20,
            ),
            ),
            controller: emailController,
            autocorrect: true,
            validator: validateEmail,
            onSaved: (String val) {
              _email = val;
          },
          )
        ),

        Container(
        width: 280,
        child: TextFormField(
             style: TextStyle(
            color: Colors.white,
          ),
            decoration: InputDecoration(
            border: InputBorder.none,
            hintText: 'Enter Password',
            fillColor: Colors.lightBlueAccent,
            labelText: 'Password',
            labelStyle: TextStyle(
              color: Colors.white70,
              fontSize: 20,
            ),
            ),
            controller: passwordController,
            autocorrect: true,
            obscureText: true,
            validator: validatePassword,
              onSaved: (String val) {
                _password = val;
          },
          )
        ),

        RaisedButton(
          onPressed: _validateInputs,
          color: Colors.green,
          textColor: Colors.white,
          padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
          child: Text('Login'),
        ),


        Visibility(
          child: Center(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              SizedBox(
                child: CircularProgressIndicator(
                  strokeWidth: 4.0,
                  valueColor : AlwaysStoppedAnimation(Colors.white),
                ),
                height: 200.0,
                width: 200.0,
              ),

            ],
          ),
        ),
          visible: visible, 
      ),
      ],
    ),
  )
            )
  )
        ],
),
);
}
Run Code Online (Sandbox Code Playgroud)

我在 SO 中看到过类似的问题,但仍然很难解决。

如何在颤振中使用进度指示器?

颤动如何使循环进度指示器工作

Flutter:创建一个叠加进度条

如何在屏幕中央的所有小部件顶部显示 CircularProgressIndicator

Nuq*_*uqo 11

如前所述, 的真正含义CircularProgressIndicator是在加载进程时运行而不让用户中断。创建此加载指示器作为可重用的 .dart 文件。有了这个,您可以在任何地方灵活地使用 LoadingIndicator 并覆盖当前屏幕。

您只需制作一个包含以下内容的 .dart 文件:

import 'package:flutter/material.dart';

buildLoading(BuildContext context) {
  return showDialog(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return Center(
          child: CircularProgressIndicator(
            valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
          ),
        );
      });
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在任何地方使用它

buildLoading(context);
Run Code Online (Sandbox Code Playgroud)

并在加载完成后将其关闭

Navigator.of(context).pop();
Run Code Online (Sandbox Code Playgroud)


San*_*iya 10

circularProgressIndicator 的真正含义是在加载过程中运行而不让用户中断。
要消除用户之间的中断,应该将 circleProgressIndicator 放在具有属性的对话框中barrierDismissible: false
应该将此加载指示器创建为可重用的小部件。
您可以创建如下所示的方法,并且可以在屏幕上的任何位置使用它,而无需在屏幕中定义。(这也不需要堆栈。)。对话框将出现在屏幕中央。

buildShowDialog(BuildContext context) {
    return showDialog(
              context: context,
              barrierDismissible: false,
              builder: (BuildContext context) {
                return Center(
                  child: CircularProgressIndicator(),
                );
              });
  }
Run Code Online (Sandbox Code Playgroud)

供参考:以下结帐代码:

void main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Demo(),
    );
  }
}

class Demo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Circle Progress Indicator Demo"),
      ),
      body: Center(
        child: MaterialButton(
          child: Text("Press Me!"),
          onPressed: () => buildShowDialog(context),
        ),
      ),
    );
  }

  buildShowDialog(BuildContext context) {
    return showDialog(
        context: context,
        barrierDismissible: false,
        builder: (BuildContext context) {
          return Center(
            child: CircularProgressIndicator(),
          );
        });
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:
在此处输入图片说明


归档时间:

查看次数:

4856 次

最近记录:

4 年,8 月 前