Флаттер: работа с несколькими экранами навигации в CupertinoTabScaffold

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

Вот моя первоначальная настройка

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  Widget build(BuildContext context) {
    return CupertinoApp(home: HomeScreen(),
        routes: {
          Screen1.id: (context) => Screen1(),
          Screen2.id: (context) => Screen1(),
          DetailScreen3.id: (context) => DetailScreen3(),
          DetailScreen4.id: (context) => DetailScreen4(),
        });
  }
}

Вот мой домашний экран

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoTabScaffold(
      tabBar: CupertinoTabBar(
        items: [
          BottomNavigationBarItem(
            icon: Icon(CupertinoIcons.book_solid),
            title: Text('Articles'),
          ),
          BottomNavigationBarItem(
            icon: Icon(CupertinoIcons.eye_solid),
            title: Text('Views'),
          ),
        ],
      ),
      tabBuilder: (context, index) {
        if (index == 0) {
          return Screen1();
        } else {
          return Screen2();
        }
      },
    );
  }
}

Вот мой скрин1

class Screen1 extends StatelessWidget {
  static const String id = 'screen1';

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      navigationBar: CupertinoNavigationBar(),
      child: GestureDetector(
        onTap: () {
          Navigator.pushNamed(context, DetailScreen3.id);
        },
        child: Center(
          child: Text('Screen 1',),
        ),
      ),
    );
  }
}

и вот мой скрин3

class DetailScreen3 extends StatelessWidget {
  static const String id = 'screen3';

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      navigationBar: CupertinoNavigationBar(),
      child: Center(
        child: Text('terzo schermo',),
      ),
    );
  }
}

Панель вкладок работает нормально, и я могу переключаться между двумя вкладками, но я не могу перейти с экрана 1 на экран 3. Когда я нажимаю на экран 1 виджетом "Центр", экран начинает перемещаться, но наполовину останавливается, а затем экран стать черным...

Вот ошибка

Есть несколько героев, которые имеют один и тот же тег в поддереве. В каждом поддереве, для которого герои должны быть анимированы (т.е. поддерево PageRoute), каждый герой должен иметь уникальный ненулевой тег. В этом случае у нескольких героев был следующий тег: тег Hero по умолчанию для навигационных панелей Купертино с навигатором NavigatorState#05492(тикеры: отслеживание 2 тикеров)

Я понимаю, что проблема связана с тегом hero на панели навигации, который должен иметь уникальный идентификатор. Как мне решить эту проблему? я должен назначить heroTag для всей панели навигации???

Заранее большое спасибо за помощь

1 ответ

Я решил, установив следующие свойства для каждого CupertinoNavigationBar

heroTag: 'screen1', // a different string for each navigationBar
transitionBetweenRoutes: false,

Как разработчик iOS, я впервые попробовал флаттер, эта штука вызвала черный экран после перехода по странице, а также беспокоила меня два дня

heroTag: 'screen1', // a different string for each navigationBar
transitionBetweenRoutes: false,
Другие вопросы по тегам