【发布时间】:2020-02-04 23:18:50
【问题描述】:
如果 API 调用返回错误,我想显示 AlertDialog。
但是当我尝试在 API 调用失败时显示 AlertDialog 时出现错误:
E/flutter (25472): [错误:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常:setState() 或 markNeedsBuild() 在期间调用 建造。 E/flutter (25472):这个 Overlay 小部件不能被标记为 需要构建,因为框架已经在 构建小部件。可以将小部件标记为需要构建 在构建阶段,仅当其祖先之一当前是 建筑。允许此异常,因为框架构建 孩子之前的父小部件,这意味着脏后代将 总是被建造。否则,框架可能不会访问这个小部件 在此构建阶段。 E/flutter (25472): 其上的小部件 调用 setState() 或 markNeedsBuild() 为:E/flutter (25472):
叠加层-[LabeledGlobalKey#faad1]
也许是因为我在尝试显示AlertDialog 而AnimatedContainer 父母正在制作动画(错误时会制作动画):
AnimatedContainer(
…
onPressed() async {
callAPI();
if (error) {
await _showAlertDialog();
}
对于AlertDialog,我使用标准的 Flutter 示例:
Future<void> _showAlertDialog() async {
return showDialog<void>(
context: context,
barrierDismissible: false, // user must tap button!
builder: (BuildContext context) {
return AlertDialog(
title: Text('Rewind and remember'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
Text('You will never be satisfied.'),
Text('You\’re like me. I’m never satisfied.'),
],
),
),
actions: <Widget>[
FlatButton(
child: Text('Regret'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
如何在父 AnimatedContainer 动画时显示 AlertDialog?
谢谢!
【问题讨论】:
标签: flutter dart flutter-layout flutter-animation