【问题标题】:How to show AlertDialog while animating AnimatedContainer?如何在动画 AnimatedContainer 时显示 AlertDialog?
【发布时间】: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]

也许是因为我在尝试显示AlertDialogAnimatedContainer 父母正在制作动画(错误时会制作动画):

 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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-23
      • 2020-05-02
      • 2020-05-29
      • 2021-02-05
      • 1970-01-01
      • 2018-01-09
      • 2019-06-25
      • 1970-01-01
      相关资源
      最近更新 更多