В нашем приложении мы хотим иметь одну и ту же панель приложений на всех страницах, не добавляя ее каждый раз на каждую страницу. Если мы возьмем ответ Реми Русселета из этой статьи Сохраняющийся ящик приложений на всех страницах, трепетать и дополнительно добавим панель приложений, подобную этой
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 на всех страницах?