如何在flutter中更改抽屉图标?
抽屉有三个默认的水平条作为默认图标,但我想把它改成其他东西。 我已经检查了Drawer()下的可能选项,但似乎没有附加任何属性。 附:我是颤振的初学者。这应该有用如何在flutter中更改抽屉图标?,flutter,dart,navigation,uinavigationbar,drawer,Flutter,Dart,Navigation,Uinavigationbar,Drawer,抽屉有三个默认的水平条作为默认图标,但我想把它改成其他东西。 我已经检查了Drawer()下的可能选项,但似乎没有附加任何属性。 附:我是颤振的初学者。这应该有用 appBar: AppBar( leading: Icon(Icons.favorite), title: Text("Drawer"),), Widget build(BuildContext context) { return Scaffold( appBar: AppBar(
appBar: AppBar(
leading: Icon(Icons.favorite),
title: Text("Drawer"),),
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title:Text('hi'),
leading: IconButton(
icon: Icon(Icons.accessible),
onPressed: () => Scaffold.of(context).openDrawer(),
),
),
);
从文档->
{Widget leading}类型:Widget在[标题]之前显示的小部件。 如果该值为null且[automaticallyImplyLeading]设置为true,[AppBar]将暗示一个适当的小部件。例如,如果[AppBar]位于也有[Drawer]的[Scaffold]中,[Scaffold]将使用打开抽屉的[IconButton]填充此小部件(使用[Icons.menu])。如果没有[Drawer],父[Navigator]可以返回,[AppBar]将使用调用[Navigator.maybePop]的[BackButton]。 以下代码显示了如何手动指定抽屉按钮,而不是依赖[automaticallyImplyLeading]: 本例中使用[Builder]来确保上下文引用子树的该部分。这样,即使在创建[Scaffold]的代码内部也可以使用此代码段(在这种情况下,如果没有[Builder],上下文将无法看到[Scaffold],因为它将引用该小部件的祖先)
假设您有:index.dart(您要使用appbar的位置)、drawer.dart(您的抽屉或导航菜单)和appbar.dart(您的appbar) 您可以在抽屉中执行此操作:
Widget drawer(BuildContext context) {
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
Container(
...
)
);
然后你的index.dart:
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
drawer: drawer(context),
appBar: CustomAppBar(),
...
这只是一个简单的问题。如果你想使用图标等,你可以使用图标按钮。事实上,我尝试了cmd_提示器的答案,但它对我不起作用 描述了更好的方法 我的工作代码如下:
return DefaultTabController(
key: Key("homePage"),
length: 2,
child: Scaffold(
endDrawer: Drawer(
),
appBar: AppBar(
leading: BackButton(
onPressed: () {
},
),
title: Text(profile.selectedCity!),
actions: [
Padding(
padding: EdgeInsets.symmetric(horizontal: baseUnit(3)),
child: Builder(
builder: (context) => IconButton(
icon: Icon(Icons.account_circle),
onPressed: () => Scaffold.of(context).openEndDrawer(),
)
)
)
它对我来说效果很好-尤其是关于使用Builder的这一部分。这很重要-否则它对我不起作用。如果有人只需要更改图标颜色:
在我的例子中,我得到“在处理手势时抛出了以下断言:Scaffold.of()使用不包含Scaffold的上下文调用。从传递给Scaffold.of()的上下文开始,找不到任何Scaffold祖先。这通常发生在提供的上下文与构建函数实际创建要查找的脚手架小部件的上下文来自同一个StatefulWidget的情况下。”请参阅答案的第二部分@Vinodyadav。这应该是可接受的答案。
class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
@override
Widget build(BuildContext context) {
return AppBar(
backgroundColor: Colors.white,
leading: InkWell(
onTap: () => Scaffold.of(context).openDrawer(),
child: Image.asset("assets/images/imgAppBar.png"),
),
title: Container(...
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
drawer: drawer(context),
appBar: CustomAppBar(),
...
return DefaultTabController(
key: Key("homePage"),
length: 2,
child: Scaffold(
endDrawer: Drawer(
),
appBar: AppBar(
leading: BackButton(
onPressed: () {
},
),
title: Text(profile.selectedCity!),
actions: [
Padding(
padding: EdgeInsets.symmetric(horizontal: baseUnit(3)),
child: Builder(
builder: (context) => IconButton(
icon: Icon(Icons.account_circle),
onPressed: () => Scaffold.of(context).openEndDrawer(),
)
)
)