Обычно лучший способ - использовать управление состоянием приложения. Вы редактируете состояние перед переключением маршрутов и читаете состояние на новом экране. Если это сделано с постоянством, это также дает возможность восстановить приложение до последнего состояния после его закрытия (что часто случается на телефонах).
В зависимости от сложности состояния вашего приложения вы можете использовать встроенный в систему управления состоянием флаттер или аддон, подобный избыточному.
Redux требует большего стандартного кодирования, но также предлагает большую гибкость и для очень больших приложений, которые часто требуются.
Вот несколько интересных статей на эту тему.
Официальные документы для государственного управления
Redux или нет
Помощь с выбором государственного управления
Альтернативы - передавать аргументы при навигации по маршруту. Это можно сделать как часть строки маршрута (которая не работает со статическими строками маршрута) или, например, с помощью MaterialPageRoute ( см. Этот ответ ).
Существует также пакет, упрощающий передачу параметров: https://pub.dartlang.org/packages/navigate.
Пример с пакетом навигации выглядит так (взято из этой проблемы github ):
Map arg = {"transactionType":TransactionType.fromLeft,"replaceRoute":ReplaceRoute.thisOne};
Navigate.navigate(context,
"home",
transactionType:TransactionType.fromLeft ,
replaceRoute: ReplaceRoute.thisOne,
arg: arg
);