Flutter中如何使用自定义按钮触发打开Scaffold的endDrawer
问题解决方案
你的代码失效的核心原因是调用了错误的抽屉控制API:openDrawer() 仅用于打开Scaffold左侧配置的普通drawer,你使用的是右侧endDrawer,需要调用对应的API。
修复方案1(基于你现有的GlobalKey实现,改动最小)
直接修改IconButton的onPressed回调逻辑即可:
IconButton( onPressed: () => _scaffoldKey.currentState!.openEndDrawer(), icon: Icon(Icons.sort), iconSize: 30, color: MyColor.icon_color, )
优化建议
为了避免空指针异常、防止抽屉已打开时重复触发报错,建议增加判空逻辑:
onPressed: () { if (_scaffoldKey.currentState?.isEndDrawerOpen == false) { _scaffoldKey.currentState?.openEndDrawer(); } },
可选方案2(无需声明GlobalKey)
如果你的按钮在Scaffold的子组件树范围内,也可以直接通过Scaffold.of获取状态控制抽屉:
onPressed: () { Scaffold.of(context).openEndDrawer(); },
小提示:如果需要主动关闭endDrawer,在Drawer2组件内调用
Navigator.of(context).pop()即可。
内容的提问来源于stack exchange,提问作者MuhammadOsamaQureshi
相关产品推荐
相关产品推荐

