【问题标题】:Has Flutter changed how it handles an Image as AppBar title?Flutter 是否改变了它处理 Image 作为 AppBar 标题的方式?
【发布时间】:2020-02-22 09:39:30
【问题描述】:

在我的 Flutter 应用程序中,我使用 png 图像作为 AppBar 中的标题。似乎在过去 24 小时内改变了它处理图像大小调整的方式。

在过去一两个月里,这一直运行良好:在我的MaterialApp 内部,我的StatefulWidgetScaffold 内部返回一个AppBar,它的title 设置为Image.asset(assetName)。一旦我添加了一点paddingImage 就会自动适当地缩小以整齐地适应屏幕上的AppBar

昨天,这个坏了。我已经检查了差异,并且自从它工作以来,没有任何明显影响这部分代码的变化。我现在以全尺寸显示图像,对于可用空间来说大约是 3 倍大,因此它被裁剪了。

我已经尝试添加 fit: BoxFit.contain,实际上所有其他可能的 BoxFit 选项 - 完全没有区别。

我最终在Image 上使用height: AppBar().preferredSize.height * 0.6 作为解决方法。

return Scaffold(
      appBar: AppBar(
        title: Padding(
          padding: EdgeInsets.symmetric(
                     vertical: 10,
                   ),
            child: Image.asset(kLogoImage, height: 
                     AppBar().preferredSize.height * 0.6),
                   ),
...

但我不明白为什么这突然改变了,我似乎没有做任何影响它的事情。 Flutter 本身是否发生了某种变化而破坏了这一点??

【问题讨论】:

  • 检查 8 天前的更改是否会发生这种情况:github.com/flutter/flutter/pull/42936
  • 就是这样。谢谢。 (以为我快疯了……)
  • 现在图片总是全高显示吗?

标签: flutter flutter-appbar flutter-image


【解决方案1】:

根据上面 Pablo 的评论,这确实是 Flutter 的一个变化。

【讨论】:

    【解决方案2】:

    要恢复原始 AppBar 布局行为,请将 AppBar 的标题包装在高度为 kToolbarHeight 的 SizedBox 中。

    appBar: AppBar(
      title: SizedBox(
        height: kToolbarHeight,
        child: Image.asset(kLogoImage),
      ),
    ),
    

    前面的例子引入了 10 个像素的垂直内边距,所以:

    appBar: AppBar(
      title: SizedBox(
        height: kToolbarHeight,
        child: Padding(
          padding: EdgeInsets.symmetric(vertical: 10),
          child: Image.asset(kLogoImage),
        ),
      ),
    ),
    

    也在此处讨论:https://github.com/flutter/flutter/issues/44550#issuecomment-552586000

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 2013-11-03
      • 2017-09-16
      • 2018-07-07
      • 1970-01-01
      • 2019-06-04
      • 2019-12-21
      相关资源
      最近更新 更多