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高度? 的相关文章

随机推荐

  • 如何使用 telnet 测试我的 LDAP 服务器 URL

    我的本地和远程都有一个 LDAP 服务器 我可以 telnet 到本地 ldap url 但无法 telnet 到远程 telnet www ilovebears com 389我得到一个空屏幕 光标闪烁 这是因为某些套接字配置还是端口不可
  • Android getIntent().getExtras() 返回 null

    我正在尝试在两个活动之间传递一个字符串 我已经在其他项目中使用相同的方法完成了此操作 但由于某种原因 当我调用intent getStringExtra String 时 我收到了NullPointerException 我还尝试通过以下方
  • 使用正则表达式验证十六进制字符串

    我正在使用正则表达式验证字符串是否为十六进制 我使用的表达是 A Fa f0 9 当我使用这个时 字符串AABB10被识别为有效的十六进制 但字符串10AABB被认定为无效 我该如何解决这个问题 您很可能需要一个 so regex a fA
  • ChartJs自定义工具提示位置

    那里 我使用 ChartJS 并自定义工具提示 但第一个和最后一个工具提示的位置有问题 看 I suppose that in order to fix the problem I need to use the https www cha
  • 有没有办法在 C++ 中延迟初始化成员变量(类)?

    我有 Java 背景 我有以下程序 include
  • 在 Java 中强制释放大缓存对象

    我使用一个大型 数百万 条目哈希图来缓存算法所需的值 键是两个对象的组合作为一个长 由于它不断增长 因为映射中的键发生变化 因此不再需要旧的键 因此能够强制擦除其中包含的所有数据并在执行期间重新开始会很好 有没有一种方法可以有效地做到这一点
  • 是否有元组的 zipWith 类似物?

    初步说明 这是SeanD 删除的问题 https stackoverflow com q 50020370 2751851 就像有一样zipWith对于列表 GHCi gt zipWith 1 2 3 4 4 6 感觉应该有一些类似于元组的
  • 如何在 lambda 中进行 sql 连接?

    有时 我会偶然发现这个问题 我使用了 lambda 连接的子集 鉴于我可以使用任何 LINQ 扩展 我应该如何实现以下连接 为了简单起见 表定义为 CREATE TABLE dbo TableA Key INT IDENTITY 1 1 N
  • 可可中的客户端到客户端消息传递?

    嗯 现在我尝试在两个客户端之间而不是客户端到服务器之间进行消息传递 因此 如果我没记错的话 我们无法单独启动服务 但如何查看是单独设置还是两者都连接到同一服务 我的启动服务的代码 void startService Start listen
  • 解析错误:语法错误,意外的 T_STRING 59 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 请修复这段
  • 使用 pywin32 获取 GUIThreadInfo()

    我正在尝试遵循这个答案 https stackoverflow com a 11901591 5510469我已经到了 a 应该打电话的地步 GetGUIThreadInfo 但我找不到pywin32 文档 http timgolden m
  • 读取解决方案 sln 的所有 csproj 项目的引用列表(以编程方式)

    我有解决方案 sln 其中有许多 csproj 项目 有人知道如何以编程方式读取 VS2008 的 sln 文件中所有 csproj 项目的引用列表吗 csproj 文件只是 XML 文件 为此 您可以使用 NET 框架中的 XDocume
  • setTimeout() 的 JavaScript 执行顺序

    假设我有以下代码 function testA setTimeout testB 1000 doLong function testB doSomething function doLong takes a few seconds to d
  • CMP 证书请求

    我使用下面的代码将 CMP 证书请求发送到端点 public static void main String args try System out println In final BigInteger certReqId BigInte
  • 如何使用flexbox调整div的宽度以适应内容

    我想适应 flexrowdiv 的宽度到内容 但我无法使用 flex 设置它 HTML div class fullwidth div class sidebar p sidebar p p sidebar p p sidebar p p
  • Android 使用数据绑定库动态包含布局

    我正在使用带有数据绑定库的 Android 应用程序的 MVVM 框架 我有一些可重用的组件 应该包含所有活动 FE工具栏 菜单 浮动操作按钮 我想创建一个通用活动 它将实现所有这些可重用功能 然后每个活动类都将从这个通用活动继承 我还有
  • 如何获得工具栏上的“向上”按钮?

    这是一个简短的问题 我试图强制操作栏 由工具栏使用 使用 LTR 对齐方式 我已经成功地使布局本身使用 LTR 但没有使用 向上 按钮 正如我所做的那样 here https stackoverflow com q 22602453 878
  • 如何在 Apache 2.4.18 服务器中实现没有 ssl 的 http2

    我制作了一个使用 HTTP 2 协议的网站 该网站在 Apache 2 4 18 HTTP 服务器上运行 目前我已经使网站启用了 SSL 因为我在某处读到 HTTP 2 默认情况下需要 SSL 我可能不需要确保我的网站安全 所以我不想花钱购
  • Javascript 设置左侧样式不起作用

    xpos xpos 1 document getElementById img style left xpos 我无法将 xpos 值分配给 JavaScript 中的 left 属性 尝试向其中添加一个单位 否则 由于 CSS 无效 浏览
  • Flutter中如何根据AppBar内容在运行时动态改变AppBar高度?

    我正在尝试实施一个颤动标记 https flutterawesome com a textfield flutter package with tagging functionality 在 的里面AppBar 我设法添加了标记TextFi