如何在 Flutter 中获取 AppBar 的高度?我正在使用 MarialApp 小部件('package:flutter/material.dart')。我有我的 Context 的高度,想减去 appbar 的高度。
final double height = MediaQuery.of(context).size.height;
Widget
的高度,并且 AppBar
是常规的 Widget
。
AppBar
的高度,而您刚刚说可以获取 AppBar
的高度。
我认为这不是一个理想的方法,但它会起作用。
首先声明您将在 Scaffold
中使用的 AppBar
小部件。
Widget demoPage() {
AppBar appBar = AppBar(
title: Text('Demo'),
);
return Scaffold(
appBar: appBar,
body: /*
page body
*/,
);
}
现在您可以使用 preferredSized
获取 appBar
的高度:
double height = appBar.preferredSize.height;
您可以使用此高度来减少屏幕高度。
final double height = MediaQuery.of(context).size.height;
你可以使用这个:
var height = AppBar().preferredSize.height;
这种方式非常简单
无需存储 AppBar
实例,或创建一个虚拟实例来获取高度。此外,AppBar.preferredSize
将始终返回与 56.0
相同的值,这是 Material Design 的标准,并且该值在某些情况下并不总是可用(例如缺少状态栏的高度)。
由于 AppBar
肯定与 Scaffold
一起使用,恕我直言,获得实际 AppBar
高度(设备顶部与 Scaffold
主体顶部之间的距离)的更智能方法是使用:
double height = Scaffold.of(context).appBarMaxHeight;
有了这个,计算的高度将包括(独立于平台):
状态栏高度
应用栏高度
底部应用栏小部件高度(如果有)(例如 TabBar)
希望这会有所帮助!
正常工具栏高度有一个常数:kToolbarHeight
只需在 AppBar 中观看
MediaQuery.of(context).padding.top + kToolbarHeight
获取身高:
MediaQuery.of(context).size.height - (MediaQuery.of(context).padding.top + kToolbarHeight)
我希望,这个解决方案也能帮助你。感谢您提出这个问题。
AppBar 的固定高度为 56。
您应该创建自己的应用栏实现 PreferredSizeWidget
class TestAppBar extends StatelessWidget implements PreferredSizeWidget {
@override
Widget build(BuildContext context) {
return AppBar(
title: Text('TEST'),
centerTitle: true,
);
}
@override
Size get preferredSize => Size.fromHeight(34);
}
您可以使用以下方法获取 AppBar 的高度:
double height = appBar.preferredSize.height;
确保您已声明 AppBar 小部件。
你可以使用这个:
@override
final Size preferredSize; // default is 56.0
WidgetAppBar({@required this.appBarTitle, @required this.appBarColor, Key key}) : preferredSize = Size.fromHeight(40), super(key: key);
使用首选尺寸
//defined as
Size preferredSize
首选大小是一个大小,其高度是 kToolbarHeight 和底部小部件的首选高度之和。
Scaffold 使用此大小来设置其应用栏的高度。
它在实现 PreferredSizeWidget 的应用栏类中定义如下
preferredSize = new Size.fromHeight(kToolbarHeight + (bottom?.preferredSize?.height ?? 0.0))
例如一个链接...
https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/material/app_bar.dart
这将给出应用栏或状态栏的高度
var height = MediaQuery.of(context).padding.top;
但是,这仅适用于移动设备,其他设备没有状态栏
kToolbarHeight
的值,但由于它是 const var 而失败。AppBar().preferredSize.height
。它将产生与上述相同的结果,但将创建 AppBar 的另一个实例appBar.preferredSize.height
=kToolbarHeight
=56.0
但MediaQuery.of(context).padding.top + kToolbarHeight
正是我想要得到的。