我在手动设置CupertinoNavigationBar
的大小时遇到问题,并且我知道您可以通过执行以下操作,使用appBar
小部件为PreferredSize
设置大小:>
appBar: PreferredSize(
preferredSize: Size.fromHeight(60.0),
child: AppBar(
flexibleSpace: Widget(),
)
),
但是,如果您为CupertinoNavigationBar
尝试此操作,则会收到一条错误消息,指出:
'AppBar'不是'ObstructingPreferredSizeWidget'类型的子类型
有没有已知的方法可以手动设置CupertinoNavigationBar
的高度?
答案 0 :(得分:0)
通过在CupertinoNavigationBar中进行一些挖掘,看起来大小是预先确定的,但也基于MediaQuery填充。现在,这确实是一个“黑客”,但它确实给了您某种所要遵循的行为。与此相关的主要问题是,该解决方案使用Cupertino Sliver NavigationBar而不是基础解决方案。这意味着,当您向上滚动时,转换目标会以相当难看的方式放置在“中间”部分上方。您可能会想到一些解决方法。我尝试了没有Sliver的解决方案,但无法正常工作。我个人认为,构建自己的CupertinoNavigationBar版本是克服Flutter团队实现的静态高度的最简单方法。我所做的是使用CompositedTransformFollower / Target小部件,并使用MediaQuery小部件强制了应用栏的高度。这是代码:
//outside of build method
final LinkLayer link = LinkLayer();
//within build method
MediaQuery (
data: MediaQuery.of (context).copyWith (
padding: MediaQuery.of (context).padding.copyWith (
top: MediaQuery.of (context).padding.top + 90
)
),
child: Stack(
children: <Widget>[
CustomScrollView(
slivers: <Widget>[
CupertinoSliverNavigationBar (
largeTitle: CompositedTransformTarget(
link: link,
child: SizedBox(
width: 130,
height: 110,
),
),
middle: Text('middle'),
)
],
),
CompositedTransformFollower(
link: link,
child: Stack(
alignment: Alignment.bottomCenter,
children: <Widget>[
Container(
alignment: Alignment.bottomCenter,
height: 110,
color: Colors.blueGrey,
)
],
),
)
],
),
)
如果您选择复制CupertinoNavigationBar,则要解决的const是:_kNavBarPersistentHeight。