如何为AnimatedContainer设置动画时显示AlertDialog?

时间:2019-10-07 16:09:10

标签: flutter dart flutter-layout flutter-animation

如果API调用返回错误,我想显示AlertDialog

但是当我尝试在API调用上显示AlertDialog时出现错误:

  

E / flutter(25472):[错误:flutter / lib / ui / ui_dart_state.cc(148)]   未处理的异常:setState()或markNeedsBuild()在调用期间   建立。 E / flutter(25472):此叠加小部件无法标记为   需要建立,因为该框架已经在   构建小部件。可以将小部件标记为需要构建   仅在其祖先之一当前处于构建阶段时   建造。允许此异常是因为框架可以构建   父部件在孩子之前,这意味着肮脏的后代会   总是被建造。否则,框架可能无法访问此小部件   在此构建阶段。 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();
            },
          ),
        ],
      );
    },
  );
}

在父母AlertDialog制作动画时如何显示AnimatedContainer

谢谢!

1 个答案:

答案 0 :(得分:0)

该错误提醒我们必须先构建页面,然后才能创建此新组件。

解决方案可能是使用addPostFrameCallback方法,在请求数据后等待页面构建完成:

WidgetsBinding.instance.addPostFrameCallback((_){
      /// Interface Request
    });

您可以在以下网站上找到更多信息:https://www.didierboelens.com/faq/week2/