Как показать загрузчик прогресса - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть страница, когда нажимается кнопка, появляется всплывающее окно alertBox с одним полем ввода и кнопкой отправки.

Я установил bool с именем isLoading;по умолчанию false, что должно проверять, запущен ли еще процесс.При отправке вызывается асинхронный метод, который сначала устанавливает isLoading в значение true, отправляет данные из поля ввода на сервер и получает ответ, а затем устанавливает isLoading в значение false.Я создал индикатор прогресса, который должен показывать, если isLoading имеет значение true, и скрывать, когда 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(),
      ],
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...