Flutter:添加Material 3搜索栏与抽屉导航时图标位置异常
解决Material3 SearchBar与Drawer导航图标位置问题
问题原因
你直接将SearchBar设为AppBar的title,导致AppBar默认的Drawer导航图标(菜单按钮)显示在SearchBar外部,不符合预期的Material3样式。
解决方案
要让导航图标融入SearchBar内部,需调整AppBar和SearchBar的配置,具体代码修改如下:
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( clipBehavior: Clip.none, // 关闭AppBar自动生成的leading图标 automaticallyImplyLeading: false, title: SizedBox( width: double.infinity, child: SearchBar( // 在SearchBar内部添加Drawer触发按钮 leading: Builder( builder: (context) => IconButton( icon: const Icon(Icons.menu), onPressed: () => Scaffold.of(context).openDrawer(), ), ), // 可选:添加搜索图标到右侧,贴合Material3风格 trailing: const [Icon(Icons.search)], ), ), ), drawer: Drawer( child: ListView( padding: EdgeInsets.zero, children: [ const DrawerHeader( decoration: BoxDecoration( color: Colors.blue, ), child: Text('Drawer Header'), ), ListTile( title: const Text('Item 1'), onTap: () { // 此处添加页面跳转或状态更新逻辑 }, ), ListTile( title: const Text('Item 2'), onTap: () { // 此处添加页面跳转或状态更新逻辑 }, ), ], ), ), body: CustomScrollView( scrollDirection: Axis.vertical, slivers: [ HomeScreen(), ], ), ); }
关键修改说明
automaticallyImplyLeading: false:禁用AppBar默认的leading图标,避免重复显示菜单按钮SizedBox(width: double.infinity):让SearchBar填满整个AppBar宽度Builder包裹IconButton:确保Scaffold.of(context)能正确获取当前上下文,实现Drawer的打开逻辑
内容的提问来源于stack exchange,提问作者Mervin Hemaraju
相关产品推荐
相关产品推荐

