Как исправить 'Уволенный виджет Dismissible все еще является частью дерева.'в трепетании - PullRequest
0 голосов
/ 28 октября 2019

Я отображаю 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.

1 Ответ

0 голосов
/ 30 октября 2019

Ваш видимый элемент 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)),
          ),
        ),
      ),
    );
...