Как сохранить BottomNavigationBar на экранах, используя onGenerateRoute? - PullRequest
1 голос
/ 20 февраля 2020

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

Наличие фона React. js Я думал о том, чтобы вокруг экранов была какая-то оболочка, которая содержала бы BottomNavigationBar и отображала экраны как дочерние в соответствии с текущим маршрутом. Но нет никакого способа добавить дочерний элемент при определении виджета MaterialApp, чтобы BottomNavigationBar присутствовал и каким-то образом обвивал экраны из onGenerateRoute. Единственный другой способ, которым я вижу, - это передать мой BottomNavigationBar на каждый экран как свойство bottomNavigationBar в Scaffold. Но, похоже, это не оптимальная вещь.

Вот мой Маршрутизатор:

class Router {
  static Route<dynamic> generateRoute(RouteSettings settings) {
    final args = settings.arguments;

    switch (settings.name) {
      case '/':
        return MaterialPageRoute(
          builder: (BuildContext context) => Home(),
        );
      default:
        return MaterialPageRoute(
          builder: (BuildContext context) => Error(),
        );
    }
  }
}

Маршрутизатор, который я передаю свойству onGenerateRoute виджета MaterialApp:

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: '/',
      onGenerateRoute: Router.generateRoute,
    );
  }
}

1 Ответ

0 голосов
/ 05 марта 2020

Вы можете посмотреть на CupertinoTabScaffold с CupertinoTabBar . Видимо, они придерживаются философии дизайна Apple, где каждая вкладка имеет свой навигатор. Тогда панель вкладок должна оставаться на месте, даже если вы перейдете на новую страницу с «главной» страницы одной из вкладок к новым / дополнительным маршрутам. Они также могут быть использованы в MaterialApp, так что это не должно быть проблемой.

Я сам борюсь с этой проблемой, так как я передаю некоторые довольно сложные данные некоторым сгенерированным маршрутам, и я использую настраиваемый BottomAppBar для целей проектирования, и он всегда приводит к тому, что я нажимаю на вкладку, либо на мой initialRoute. Если это то, что вы пытаетесь преодолеть, то извините, у меня пока нет ответа на этот вопрос. мы нашли этот ответ к тому времени!

...