Flutter中如何根据AppBar内容在运行时动态改变AppBar高度?

2023-12-21

我正在尝试实施一个颤动标记 https://flutterawesome.com/a-textfield-flutter-package-with-tagging-functionality/在 - 的里面AppBar。我设法添加了标记TextField在 - 的里面AppBar并调整大小AppBar using PreferredSize小部件使用以下代码:

return PreferredSize(
    preferredSize: Size.fromHeight(110),
    child: AppBar(
      backgroundColor: HexColor('171551'),
      leading: const BackButton(),
      flexibleSpace: Padding(
        padding: const EdgeInsets.only(top: 48.0, left: 10, right: 10),
        child: buildTaggedSearch(),
      ),
      title: Container(),
      actions: _buildActions(),
    ),
  );

这是结果:

我无法解决的问题是当用户输入太多标签并且标签转到第二​​行时会发生什么,这就是发生的情况:

我对 Flutter 还很陌生,也许我错过了一些东西,但我将如何解决这个问题并使AppBar根据标签的内容调整大小。我在这里讨论了大多数有关 AppBar 调整大小的问题,所有这些问题都使用PreferredSize我在这里使用的小部件。所以我想知道是否还有其他选择?


没有简单的方法可以改变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 preferredSizegetter 需要返回固定大小。它的父部件(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水平滚动你的筹码。

或者构建您自己的小部件并且不使用应用栏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter中如何根据AppBar内容在运行时动态改变AppBar高度? 的相关文章