没有简单的方法可以改变AppBar
运行时的高度。是的,您可以将其设置为任何(固定)高度PreferredSize
,但一旦设置,通常就无法更改。
即使你让自己的类来扩展PreferredSize
,最终会是这样的:
class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
@override
Size get preferredSize => Size.fromHeight(100); // fixed custom height
@override
Widget build(BuildContext context) {...}
}
This preferredSize
getter 需要返回固定大小。它的父部件(Scaffold
)确实想知道应用程序栏的高度,以便它知道从哪里开始渲染其主体。
如果将上面的“CustomAppBar”更改为Stateful
,你很快就会意识到preferredSize
您必须覆盖,是 Widget 的一部分而不是 State。
如果您进行某种黑客攻击,例如使用全局变量来“欺骗”它:
Size get preferredSize => Size.fromHeight(myAppBarHeight); // global variable
更改后的值myAppBarHeight
,应用栏仍保持原来的高度。你必须打电话setState
在小部件上Scaffold
为了重绘应用栏,更重要的是,在不同的位置重绘 Scaffold 主体。
所以说真的,解决方案可能是控制应用栏高度Scaffold
level.
或者也许你应该看看银应用栏 https://api.flutter.dev/flutter/material/SliverAppBar-class.html.
或者不要尝试在运行时更改应用栏高度,例如,使用ListView
水平滚动你的筹码。
或者构建您自己的小部件并且不使用应用栏。