Флаттер: работа с несколькими экранами навигации в 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,