Flutter: как добавить BottomNavigationBar к экрану, созданному с помощью hero?
Я попытался поместить bottomNavigationBar на экран, созданный героем. Герой находится на page1() и page2(), у него есть singlechildscrollview с дочерним контейнером, высота которого составляет size.height (размер MediaQuery).
class HeroScreen extends StatefulWidget {
Object o;
HeroScreen({Key key,this.o}) : super(key : key);
@override
_HeroScreenState createState() => _HeroScreenState(o);
}
class _HeroScreenState extends State<HeroScreenScreen> {
Object _o;
int _index;
final PageController ctr = PageController();
_HeroScreenState(this._o);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
flexibleSpace: Image(
image: AssetImage(linktoimage),
fit: BoxFit.cover,
),
backgroundColor: Colors.transparent,
title: BorderedText(
strokeWidth: 3,
child: Text(_o.name,
style: TextStyle(fontFamily: 'Righteous', fontSize: 20),),
),
centerTitle: true,
),
body: PageView(
scrollDirection: Axis.horizontal,
controller: ctr,
children: <Widget>[
page1(),
page2(),
],
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _index,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.person),
title: Text("Test 1"),
backgroundColor: Colors.amberAccent
),
BottomNavigationBarItem(
icon: Icon(Icons.backup),
title: Text("Test 2"),
backgroundColor: Colors.amberAccent
),
BottomNavigationBarItem(
icon: Icon(Icons.print),
title: Text("Test 3"),
backgroundColor: Colors.amberAccent
),
BottomNavigationBarItem(
icon: Icon(Icons.done),
title: Text("Test 4"),
backgroundColor: Colors.amberAccent
)
],
onTap: (index){
setState(() {
_index = index;
});
},
),
);
}
Я вызываю Heroscreen, когда пользователь нажимает на другой экран, на котором есть карточки, обернутые списком.
onTap: () => Navigator.push(context, MaterialPageRoute(builder: (context) => HeroScreen(o: someobjectList[index]))),
Но у меня такая ошибка:
The following NoSuchMethodError was thrown building HeroScreen(dirty, dependencies: [MediaQuery], state: _HeroScreenState#7078c):
The method '>' was called on null.
Receiver: null
Tried calling: >(0)
Он отлично работает, если удалить bottomNavigationBar. Так что я не знаю, проблема в размере или что.
РЕДАКТИРОВАТЬ: Хорошо, я обнаружил ошибку, ошибка была в текущем индексе, почему-то я забыл установить ее на 0 в initstate (я просто написал _index;... да, не спрашивайте меня, как и почему)