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;... да, не спрашивайте меня, как и почему)

0 ответов

Другие вопросы по тегам