如何在表单中间使用Flutter CircularProgressIndicator()?

时间:2018-12-24 10:17:36

标签: forms flutter progress-indicator

我的形式为;     -3个文字栏位          -1个下拉菜单。     -1个普通文本**************     -2个文本表单字段

并基于下拉列表(是/否)示例;如果该部分为“是”,则从互联网获取价值并分配给普通文本,然后继续显示最后2个文本表单字段。

我的问题是,当我从Form的互联网中间获取数据时,如何使用CircularProgressIndicator()。我知道如何使用CircularProgressIndicator()和显示小部件,但我可以使其在表单中间做同样的事情。如何使用Form中间的CircularProgressIndicator()并继续…

2 个答案:

答案 0 :(得分:0)

完整代码在这里。为了清楚起见,我使用Future.delayed演示了如何做到这一点。我们可以使用Future ....()async {}从Internet上获取数据,因此很容易将void _showPrint()替换为Future _getDataFromInternet()async {....... _load = false; _buildRest = true;}

class _MyHomePageState extends State<MyHomePage> {
  bool _load = false;
  bool _buildRest = false;

  void _showPrint() {
    print("loading is true");
    Future.delayed(const Duration(seconds: 6), () {
      setState(() {
        _load = false;
        _buildRest = true;
      });
    });
  }

  //TODO: MAIN BUILD WIDGET *****************************
  @override
  Widget build(BuildContext context) {
    Widget loadingIndicator = _load
        ? new Container(
            color: Colors.green.withOpacity(0.3),
            width: MediaQuery.of(context).size.width,//70.0,
            height: MediaQuery.of(context).size.height, //70.0,
            child: new Padding(
                padding: const EdgeInsets.all(5.0),
                child: new Center(child: new CircularProgressIndicator())),
          )
        : new Container();
    return new Scaffold(
        backgroundColor: Colors.white,
        body: new Stack(
          children: <Widget>[
            new Padding(
              padding:
                  const EdgeInsets.symmetric(vertical: 50.0, horizontal: 20.0),
              child: new ListView(
                children: <Widget>[
                  new Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    children: <Widget>[
                      new TextField(),
                      new TextField(),
                      new TextField(),
                      new TextField(),
                      new Padding(
                          padding: EdgeInsets.only(top:20.0),
                        child: new FlatButton(
                            color: Colors.green[400],
                            child: new Text('Get Data From Internet'),
                            onPressed: () {
                              setState(() {
                                _load = true;
                              });
                              _showPrint();
                            }),
                      ),
                      _buildRest == true
                        ? _buildRestoftheForm()
                        : new Container()
                    ],),],),
            ),
            new Align(
              child: loadingIndicator,
              alignment: FractionalOffset.center,
            ),
          ],
        ));
  }

  Widget _buildRestoftheForm(){
    return new Column(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: <Widget>[
        new TextField(),
        new TextField(),
        new TextField(),
      ],
    );
  }
}

答案 1 :(得分:0)

如果您希望用户在检索数据时能够触摸表格,我并没有完全理解。如果没有,那么我建议使用modal progress hud package。您将轻松完成Nick提供的相同任务。