0

我显示一个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 小部件。

4

1 回答 1

0

您的 Dismissible 小部件在您的 Popup 内,而不是应该在它周围。您可以通过将其更改为下面的代码来使其工作。公平的警告,它会感觉很慢,因为对话框的深色背景只会在关闭动画完成后消失。

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)),
          ),
        ),
      ),
    );
于 2019-10-30T01:52:16.863 回答