Мое приложение отображает некоторые вводные экраны только при первом запуске приложения. После первого запуска первым отображаемым экраном должен быть мой HomePage. Я пробовал эти маршруты:

"/" -> HomePage()
"/intro" -> IntroPage()

И затем установите initialRoute так:

initialRoute: isFirstLaunch ? "/intro" : "/"

При такой конфигурации Flutter сначала помещает HomePage() в стек навигации и IntroPage() сверху, когда initialRoute равен "/intro". Это плохо, потому что HomePage() загружает CameraPreview, поэтому он запрашивает разрешения и требует значительных ресурсов. Он не должен быть загружен, пока я не перейду к дому явно.

Я также пробовал эту конфигурацию:

"/" -> IntroPage()
"/home" -> HomePage()

Затем у меня есть IntroPage() для заднего стека, что тоже не то, что я хочу.

Есть идеи, как это решить?

4
hendra 19 Авг 2018 в 11:31

3 ответа

Лучший ответ
"intro": (BuildContext context) => IntroPage()
"home": (BuildContext context) => HomePage()

Гарантирует, что оба маршрута являются маршрутами верхнего уровня без родителя.

9
mattarau 2 Ноя 2019 в 14:52

Документация по initialRoute свойству MaterialApp объясняет это поведение как следующим образом :

Если маршрут содержит косые черты, то он рассматривается как «глубокая связь», и до того, как этот маршрут будет передан, также будут переданы маршруты, ведущие к этому. Например, если маршрут был / a / b / c, то приложение будет запускаться с тремя загруженными маршрутами / a, / a / b и / a / b / c в указанном порядке.

2
Sebastian Engel 17 Ноя 2019 в 09:15

Как насчет просто загрузить нужный виджет непосредственно как ваше MaterialApp приложение home:

return MaterialApp(
      home: isFirstLaunch? IntroScreen():HomeScreen(),
    );
2
aziza 19 Авг 2018 в 09:55
51915883