我有一个页面,当单击一个按钮时,它会弹出一个具有单个输入字段和一个提交按钮的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(),
],
);
}