如何显示进度加载器

时间:2018-09-19 17:27:42

标签: flutter

我有一个页面,当单击一个按钮时,它会弹出一个具有单个输入字段和一个提交按钮的AlertBox。

我设置了一个名为isLoading的布尔值;默认情况下为false,它将检查进程是否仍在运行。 提交时,将调用一个异步方法,该方法首先将isLoading设置为true,然后将数据从输入框发送到服务器并获得响应,然后将isLoading设置为false。 我创建了一个进度指示器,该指示器应显示isLoading是否为真,并在isLoading为false时隐藏。

单击“发送”按钮时,该应用程序完全呆板,没有任何指示器可显示我的用户。 我究竟做错了什么?这是我的代码示例:

显示警报框的按钮:

 Padding(
   padding: EdgeInsets.only(top: 18.0),
    child: Material(
      elevation: 5.0,
        child: MaterialButton(
          onPressed: () => _share(),
            minWidth: 250.0,
            height: 62.0,
            color: _green,
            child: Text('Share UID',
            style: TextStyle(
              color: Colors.white, fontSize: 18.0)),
         ),
     ),
 ),

显示警报框的方法:

_share() async {
showDialog(
  context: context,
  barrierDismissible: false, // user must tap button!
  builder: (BuildContext context) {
    return new AlertDialog(
      title: new Text(
        'You are about to share your Medical Profile with this Doctor',
        textAlign: TextAlign.center,
        style: TextStyle(fontSize: 16.0, color: Color(0xFFCBCBCB)),
      ),
      content: new SingleChildScrollView(
        child: new ListBody(
          children: <Widget>[
            Padding(padding: EdgeInsets.all(10.0)),
            new TextFormField(
                keyboardType: TextInputType.text,
                autofocus: true,
                decoration: InputDecoration(
                  labelText: 'For How Long?',
                  contentPadding:
                      EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
                  border: OutlineInputBorder(
                      borderRadius: BorderRadius.all(Radius.circular(2.0))),
                ),
                validator: this._validateDuration,
                controller: _durationController),
            Padding(padding: EdgeInsets.all(5.0)),
            Container(
              key: _scaffoldKey,
              child: _isLoading
                  ? _showStatus()
                  : Padding(padding: EdgeInsets.all(0.0)),
            ),
          ],
        ),
      ),
      actions: <Widget>[
        new FlatButton(
          child: new Text('Proceed'),
          onPressed: () => _saveShare(),
              Navigator.of(context).pop();
        ),
        new FlatButton(
          child: new Text(
            'Cancel',
            style: TextStyle(color: Colors.red),
          ),
          onPressed: () {
            Navigator.of(context).pop();
          },
        ),
      ],
    );
  },
); }

处理提交操作的方法

     _saveShare() async {
    setState(() {
      _isLoading = true;
    });
    String _duration = _durationController.text;
    final endPoint = '/api/patient/profile/shares';

    final url = NetworkUtils.host + endPoint;

    String _accessToken = await auth.getAccessToken();

    var response = await http.post(Uri.encodeFull(url),
        headers: {
          'Authorization': 'Bearer $_accessToken',
          "Accept": "application/json",
          "Content-Type": "application/json"
        },
        body: jsonEncode({
          'chcode': widget.chcode,
          'expiration': _duration,
        }));
   setState(() {
     _isLoading = false;
   });

    Navigator.of(context).pop();
  }

更新... 这是show_status()

    Widget _showStatus() {
    return Column(
      children: <Widget>[
        Padding(
          padding: EdgeInsets.all(2.0),
        ),
        LinearProgressIndicator(),
      ],
    );
  }

0 个答案:

没有答案