抽屉具有默认的三个水平条作为默认图标,但我想将其更改为其他内容。 我已经检查了Drawer()下的可能选项,但是似乎没有属性附加到该选项。 PS:我是Flutter的初学者。
答案 0 :(得分:17)
这应该有效。
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title:Text('hi'),
leading: IconButton(
icon: Icon(Icons.accessible),
onPressed: () => Scaffold.of(context).openDrawer(),
),
),
);
从文档->
{Widget前导}类型:Widget
显示在[title]前面的小部件。 如果为null,并且[automaticallyImplyLeading]设置为true,则[AppBar]将暗示适当的窗口小部件。例如,如果[AppBar]位于也具有[Drawer]的[Scaffold]中,则[Scaffold]将用打开抽屉的[IconButton]填充此小部件(使用[Icons.menu])。如果没有[抽屉],并且父级[导航器]可以返回,则[AppBar]将使用调用[Navigator.maybePop]的[BackButton]。 以下代码显示了如何手动指定抽屉按钮,而不是依靠[automaticallyImplyLeading]:
import 'package:flutter/material.dart';
Widget build(context) {
return AppBar(
leading: Builder(
builder: (BuildContext context) {
return IconButton(
icon: const Icon(Icons.menu),
onPressed: () {
Scaffold.of(context).openDrawer();
},
tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip,
);
},
),
);
}
在此示例中,使用[Builder]以确保上下文引用子树的该部分。这样,即使在创建[Scaffold]的代码中也可以使用此代码段(在这种情况下,如果没有[Builder],上下文将无法看到[Scaffold],因为它将指向该小部件的祖先)。
答案 1 :(得分:17)
appBar: AppBar(
leading: Builder(
builder: (context) => IconButton(
icon: Icon(Icons.menu_rounded),
onPressed: () => Scaffold.of(context).openDrawer(),
),
),
title: Text(
"Track your Shipment",
),
),
答案 2 :(得分:1)
appBar: AppBar(
leading: Icon(Icons.favorite),
title: Text("Drawer"),),
答案 3 :(得分:1)
假设您有:index.dart(您要使用应用栏的位置)、drawer.dart(您的抽屉或导航菜单)和 appbar.dart(您的应用栏)
你可以在抽屉里做这个:
Widget drawer(BuildContext context) {
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
Container(
...
)
);
然后是你的 appbar.dart:
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(...
然后你的 index.dart:
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
drawer: drawer(context),
appBar: CustomAppBar(),
...
这只是一个简单的。如果您想使用图标等,您可以使用 IconButton。
答案 4 :(得分:0)
实际上,我尝试了 cmd_prompter 的答案,但对我不起作用。
描述了更好的方法here
我的工作代码在这里:
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 的这部分。这很重要 - 否则它对我不起作用。
答案 5 :(得分:0)
如果有人只需要更改图标颜色:
更容易做到答案 6 :(得分:0)
您需要创建 ScaffoldKey 类型的全局键,用于打开抽屉并更改图标
Widget build(BuildContext context) {
var scafoldKey = GlobalKey<ScaffoldState>();
return Scaffold(
appBar: AppBar(
title:Text('hi'),
leading: IconButton(
icon: Icon(Icons.accessible),
onPressed: () => scafoldKey.currentState.openDrawer(),
),
),
);