Flutter AppBar на всех страницах - PullRequest
0 голосов
/ 05 октября 2019

В нашем приложении мы хотим иметь одну и ту же панель приложений на всех страницах, не добавляя ее каждый раз на каждую страницу. Если мы возьмем ответ Реми Русселета из этой статьи Сохраняющийся ящик приложений на всех страницах, трепетать и дополнительно добавим панель приложений, подобную этой

MaterialApp(
  title: 'Flutter Demo',
  builder: (context, child) {
    return Scaffold(
      drawer: MyDrawer(),
      appBar: MyAppBar(),
      body: child,
    );
  },
  home: MyHome()
)

Панель приложений не нужно добавлять в каждуюодной страницы, но при попытке добавить действия с помощью PopUpMenu, как это

actions: <Widget>[
  PopupMenuButton<Choice>(
    itemBuilder: (BuildContext context) {
      return choices.skip(2).map((Choice choice) {
        return PopupMenuItem<Choice>(
          value: choice,
          child: Text(choice.title),
        );
      }).toList();
    },
  ),
],

, это не работает, так как PopupMenuButton должен иметь навигатор, которого у нас нет, потому что AppBar находится под навигатором приложения.

Идея состояла в том, чтобы создать дополнительный Навигатор, имеющий собственный OverLay

class MyAppBar extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Builder(
      builder: (context) {
        Navigator navigator = Navigator(
          ...
        )
        return navigator;
      }
    );
  }
}

Но в этом случае PopupMenuItem отображаются только в AppBar, что приводит к тому, что более или менее толькоотображается один единственный PopupMenuItem.

Есть ли способ изменить размер OverLay из навигатора AppBar, чтобы показать больше PopupMenuItem? Или есть какое-то другое правильное решение для совместного использования AppBar на всех страницах?

...