如何解决'已关闭的可关闭小部件仍是树的一部分。'颤抖中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决'已关闭的可关闭小部件仍是树的一部分。'颤抖中相关的知识,希望对你有一定的参考价值。

我显示CupertinoPopupSurface并使用Dismissible小部件以手势关闭对话框。向下滑动时,我叫Navigator.of(context).pop();以关闭对话框并返回上一屏幕,但我却收到错误消息,提示Dismissible仍是树的一部分。

我尝试提供唯一键Dismissible(key: UniqueKey(), ...),但仍然无法正常工作。

 CupertinoPopupSurface(
   isSurfacePainted: false,
   child: Container(
     padding: const EdgeInsets.only(top: 100),
     child: Dismissible(
       key: UniqueKey(),
       direction: DismissDirection.down,
       onDismissed: (direction) {
         Navigator.of(context).pop();
       },
       child: Container(
           decoration: BoxDecoration(
             borderRadius:
                 BorderRadius.vertical(top: Radius.circular(40)),
           ),
           child: ZoneFilter(
               visit: visit, accountsViewModel: accountsViewModel)),
     ),
   ),
 );

我想打电话给Navigator.of(context).pop();并摆脱Dismissible小部件。

答案

您的可删除小部件位于您的弹出窗口内,而不是应该位于其周围。您可以通过将其更改为以下代码来使其工作。不过,如果有一个合理的警告,它会感觉很慢,因为对话框的深色背景只会在关闭动画结束后消失。

return Dismissible(
    key: UniqueKey(),
    direction: DismissDirection.down,
    onDismissed: (direction) => Navigator.of(context).pop();,
    child:  CupertinoPopupSurface(
      isSurfacePainted: false,
      child: Container(
        padding: const EdgeInsets.only(top: 100),
        child: Container(
          decoration: BoxDecoration(
            borderRadius:
            BorderRadius.vertical(top: Radius.circular(40)),
          ),
          child: ZoneFilter(
            visit: visit, accountsViewModel: accountsViewModel)),
          ),
        ),
      ),
    );

以上是关于如何解决'已关闭的可关闭小部件仍是树的一部分。'颤抖中的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 中的可扩展文本小部件 [关闭]

如何从小部件收听已关闭的活动? (onActivityResult只在Activity中)

屏幕打开/关闭时如何更新 Android 小部件?

关闭应用程序时单击Android应用程序小部件不起作用

是否有(n)curses的任何树库/小部件[关闭]

无法在 onDismissible 中删除