I'm using extendBodyBehindAppBar
and creating an AppBar
by extending PreferredSizeWidget
. I have a burgerMenu
(buttonIcon
) icon in appBar
file that needs to be clicked to open the Drawer
. Tell me how to correctly implement the opening of the Drawer
in my case, without using the standard version with the AppBar
?
home
Widget build(BuildContext context) {
return Scaffold(
extendBodyBehindAppBar: true,
appBar: LogoAppBar(buttonIcon: SvgPicture.asset(constants.Assets.burgerMenu)),
body: const HomeBody(),
);
}
appBar
class LogoAppBar extends StatelessWidget with PreferredSizeWidget {
LogoAppBar({Key? key, required this.buttonIcon, this.onPressed})
: super(key: key);
final SvgPicture buttonIcon;
final Function()? onPressed;
@override
Widget build(BuildContext context) {
SvgPicture logoSvg = SvgPicture.asset(
'...logo.svg',
height: 40);
double horizontalPadding = 24;
return SafeArea(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: horizontalPadding),
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
logoWidget(logoSvg, horizontalPadding),
SizedBox(child: buttonIcon),
],
),
],
),
),
);
}
Widget logoWidget(SvgPicture logoSvg, double horPadding) {
return Align(
alignment: Alignment.centerLeft,
child: logoSvg,
);
}
@override
Size get preferredSize => const Size.fromHeight(60);
}
CodePudding user response:
You can use GlobalKey
to open the drawer and open using myScaffoldKey.currentState?.openDrawer();
.
Make sure to wrap you buttonIcon
with tappable widget like GestureDetector
/InkWell
and add onPressed
.
final GlobalKey<ScaffoldState> _sKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Scaffold(
key: _sKey ,
appBar: LogoAppBar(
onPressed: () {
debugPrint("open");
_sKey.currentState?.openDrawer();
},
),
drawer: const Drawer(),
extendBodyBehindAppBar: true,
//...