一个简单的组件包装器,用于启用模态进度 HUD(模态进度指示器,HUD = Heads Up Display)。

modal_progress_hud

用法

ModalProgressHUD(child: _buildWidget(), inAsyncCall: _saving)

只需将小部件作为 ModalProgressHUD 的子组件包裹起来,通常是一个表单,以及一个布尔值
保存在本地状态中。
首次加载时,布尔值为 false,并且显示子组件。
提交后,并在进行异步调用之前,将本地布尔值设置为
true。子组件将重新绘制并显示模态进度 HUD。
之后
异步调用完成后,将布尔值设置为 false。子组件将
重新绘制,而不显示模态进度指示器。

class SettingsPage extends StatefulWidget {
  @override
  _SettingsPageState createState() => new _SettingsPageState();
}

class _SettingsPageState extends State<SettingsPage> {
  bool _saving = false;

  void _submit() {

    setState(() {
      _saving = true;
    });

    //Simulate a service call
    print('submitting to backend...');
    new Future.delayed(new Duration(seconds: 4), () {
      setState(() {
        _saving = false;
      });
    });
  }

  Widget _buildWidget() {
    return new Form(
      child: new Column(
        children: [
          new SwitchListTile(
            title: const Text('Bedroom'),
            value: _bedroom,
            onChanged: (bool value) {
              setState(() {
                _bedroom = value;
              });
            },
            secondary: const Icon(Icons.hotel),
          ),
          new RaisedButton(
            onPressed: _submit,
            child: new Text('Save'),
          ),
        ],
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('Flutter Progress Indicator Demo'),
        backgroundColor: Colors.blue,
      ),
      body: ModalProgressHUD(child: _buildWidget(), inAsyncCall: _saving),
    );
  }
}

GitHub

https://github.com/mmcc007/modal_progress_hud