setState在showCupertinoDialog中不起作用。当我获得异步数据时,我想要更新对话框内的进度条。SetState值已更新,并且成功调用了_progress,但对话框未更新。我正在使用statefulBuilder。
showCupertinoDialog(
context: context,
builder: (BuildContext context) => CupertinoAlertDialog(
title: Text("Preparing..."),
content: StatefulBuilder(builder: (context, StateSetter setState) {
print('ssetstatte');
return UploadIndicator(_progress);
}),
actions: [
CupertinoDialogAction(
onPressed: () {
Navigator.of(context).pop();
},
isDefaultAction: true,
child: Text("Cancel"),
),
],
),
).whenComplete(() {});
_uploadTask.snapshotEvents.listen((event) {
_progress =
event.bytesTransferred.toDouble() / event.totalBytes.toDouble();
/*THIS IS NOT UPDATING DIALOG*/
setState(() {
_progress = double.parse((_progress * 100).toStringAsFixed(2));
});
});
发布于 2021-01-25 10:18:12
使用StatefulBuilder来使用setState inside对话框,并仅更新其中的小部件。
showDialog(
context: context,
builder: (context) {
String contentText = "Content of Dialog";
return StatefulBuilder(
builder: (context, setState) {
return AlertDialog(
title: Text("Title of Dialog"),
content: Text(contentText),
actions: <Widget>[
FlatButton(
onPressed: () => Navigator.pop(context),
child: Text("Cancel"),
),
FlatButton(
onPressed: () {
setState(() {
contentText = "Changed Content of Dialog";
});
},
child: Text("Change"),
),
],
);
},
);
},
);
发布于 2021-01-25 10:20:58
当你更新你的状态时,你必须使用stfullWidget。首先确认一下,它到底是不是stfullWidget?如果不是,那么你应该使用stlessWidget的stfullWidget实例。
发布于 2021-01-25 11:06:26
当您的异步数据正在更新时,显示无状态widget statefull widget中的数据没有更新整个widget,使用无状态widget显示数据它立即更新状态,statefull widget设置该数据,而无状态widget呈现该数据。
https://stackoverflow.com/questions/65882656
复制相似问题