我正在制作一个自定义AppBar,其高度比典型的AppBar高。我也想调整领先的小部件/图标的大小,并利用automaticallyImplyLeading
的默认行为(因此菜单图标和后退图标会自动实现)。
这是我想实现的解决方案:
class AppAppBar extends PreferredSize{
AppAppBar(String title) : super(
preferredSize: Size.fromHeight(56.0),
child: AppBar(
centerTitle: true,
title: Text(title, style: textStyle)
)) {
(child as AppBar).leading =
SizedBox(width: 30.0, height: 30.0, child: (child as AppBar).leading);
}
static const textStyle = TextStyle(fontSize: 32.0);
}
但是这当然是行不通的,因为(child as AppBar).leading
是最终的。
因此,在下面的AppBar中(出于说明目的,文本大小显着变大了),我想比较一下自动添加的汉堡包图标。
您怎么看?有解决方案吗?还是我应该放弃自动图标并自己添加它们?
编辑:添加了一张图片以显示我的意思
答案 0 :(得分:2)
您不能,因为它是预定义的小部件。
您可以使用“行”小部件来解决此问题:
Scaffold(
key:_scaffoldKey,
drawer: Drawer(),
appBar: AppBar(
automaticallyImplyLeading: false
title: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
SizedBox(
height: 20, // Your Height
width: 20, // Your width
child: IconButton( // Your drawer Icon
onPressed: () => _scaffoldKey.currentState.openDrawer()),
icon: Icon(Icons.arrow_back, color: Colors.white),
),)
// Your widgets here
],
),
),
)
您需要使用Key才能通过 _scaffoldKey.currentState.openDrawer()打开抽屉。
automaticallyImplyLeading:false 将阻止默认抽屉图标。
答案 1 :(得分:1)
一个简单的例子来演示拉菲·乔纳斯的回答
AppBar(
automaticallyImplyLeading: false,
title: Row(
children: [
Expanded(
child: Text('One'),
),
Center(
child: Text('Two'),
),
Expanded(
child: Align(
alignment: Alignment.centerRight,
child: Text('Three'),
),
),
],
),
),
答案 2 :(得分:0)
您想要的是Flutter中的自定义应用栏。大多数人尝试在title
的{{1}}参数中给出自己的小部件。但是,让我向您展示如何正确进行操作。
AppBar
答案 3 :(得分:0)
可以使用 leadingWidth
属性调整 Flutter 中 AppBar 的前导 Widget 宽度。
例如:
AppBar(
title: const Text('Title'),
leadingWidth: 50,
leading: Container()
)
答案 4 :(得分:0)
要使用自定义 appBar 前导按钮,这里是代码。
appBar: AppBar(
title: Text('hello'),
// automaticallyImplyLeading: false,
elevation: 0,
leadingWidth: 58,
actions: [
ProfileBar(),
],
leading: Container(
width: 14,
//color: Colors.yellow,
child: Row( // <--- Using row to avoid force resizing of leading
children: [
Padding( // <--- Padding to make it look more nicer
padding: const EdgeInsets.only(left: 24.0),
child: GestureDetector(
onTap: () {
Navigator.of(context).pop();
},
child: SvgPicture.asset( // <-- Using SvgPicture package
'assets/svg/icons/backbtn.svg',
width: 24,
height: 24,
),
),
),
],
),
),
),
答案 5 :(得分:0)
您可以设置高度或宽度的边距。
AppBar(
leading: Container(
margin: EdgeInsets.symmetric(vertical: 15),
child: IconButton(
icon: Icon(CupertinoIcons.chevron_left),
onPressed: () {},
),
),