Почему экран, который получает аргументы от ModalRoute, перестраивается на всплывающем окне Navigator? - PullRequest
0 голосов
/ 20 июня 2020

Я не мог понять, почему моя сборка экрана выполнялась при появлении. Я сузил его до этой строки:

    final String userId = ModalRoute.of(context).settings.arguments;

Почему экран перестраивается? Как мне остановить его восстановление или выручить, когда это произойдет?

Вот полный пример с контрпримером: https://dartpad.dev/9f83473a923e39e9c4b07840bc4aded7

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Я не понимаю ваш вопрос, но если вы хотите удалить или открыть перед навигатором

 Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (ctx) => ScreenWithArg(),
                  settings: RouteSettings(arguments: 'Arg'),
                ),
              );

, вместо этого используйте этот код строки

 Navigator.of(context).pushReplacement(
                MaterialPageRoute(
                  builder: (ctx) => ScreenWithArg(),
                  settings: RouteSettings(arguments: 'Arg'),
                ),
              );
0 голосов
/ 20 июня 2020

Мы передаем объект класса в MaterialPageRoute, например,

 Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (ctx) => ScreenWithoutArg(),
                ),
              );

Иногда нам нужно отправлять данные во время маршрутизации, также в некоторых случаях класс выбирается динамически. В таком сценарии, если мы добавим реализацию данных в конструктор класса, это не будет хорошей практикой кодирования.

Вместо того, чтобы передавать те же данные в RouteSettings.

 Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (ctx) => ScreenWithArg(),
                  settings: RouteSettings(arguments: 'Arg'),
           ),
         );

// не рекомендуется (склонен к изменению кода)

 Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (ctx) => ScreenWithArg(arg1: 'argdata',arg2:'agrdata2'),
                  settings: RouteSettings(arguments: 'Arg'),
           ),
        );

Спасибо, @Patrick O'Hara за выделение этой потрясающей особенности дротика.

...