【问题标题】:Flutter will not display asset imageFlutter 不会显示资产图片
【发布时间】:2019-07-04 15:01:03
【问题描述】:

Pubspec.yaml

flutter:
  uses-material-design: true
  assets:
    - lib/images/
    - lib/images/app_logo.png

Main.dart

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        decoration: BoxDecoration(
          color: Colors.blueAccent,
          image: DecorationImage(
            image: ExactAssetImage('lib/images/app_logo.png'),
            fit: BoxFit.cover,
          ), //DecorationImage
        ), //BoxDecoration
      ),//Container
    ); //Scaffold
  }

应用程序完全没有错误,只是不会显示任何内容。以前从未见过这种情况。在 pubspec 中尝试了各种不同的缩进。已尝试删除 - 和 lib/images 之间的空格并替换为制表符。

什么给了?

【问题讨论】:

  • 停止运行->将图像放置在正确的位置->在终端或通过 IDE 使用flutter pub get。 ->以正确的路径运行

标签: image flutter


【解决方案1】:

代码运行良好,即使在 lib 文件夹中也是如此。分享一下我的代码

这是我的pubspec.yaml 代码

name: nav
description: A new Flutter project.

version: 1.0.0+1

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.2

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:

  uses-material-design: true

  assets:
    - lib/images/
    - lib/images/app_logo.jpg

我的main.dart 代码

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return MaterialApp( home: Scaffold(
      appBar: AppBar(),
      body: Container(
        height: 200,
        decoration: BoxDecoration(
          color: Colors.blueAccent,
          image: DecorationImage(
            image: ExactAssetImage('lib/images/app_logo.jpg'),
            fit: BoxFit.cover,
          ), //DecorationImage
        ), //BoxDecoration
      ),//Container
    )); //Scaffold
  }
}

您可以尝试的解决方案:

  1. 尝试从头开始重新启动您的应用(不是按 Shift + R)
  2. 确保您已正确提供正确的间距和文件扩展名

【讨论】:

  • 我真的不明白这里有什么不同。我只是来回移动图像并保持相同的代码,现在它工作正常。这里没有真正的答案,它只是完全被窃听了。我原以为这是因为我没有给它指定高度或宽度,但现在如果我将这些行注释掉,它仍然有效。我不知道,但这非常令人沮丧,我希望没有其他人经历过这个。如果有人在阅读本文时遇到问题:尝试更改文件夹,尝试通过将文件拖到 android studio 而不是 windows 资源管理器中的文件夹中来将文件移动到 app 文件夹中。
【解决方案2】:

尝试从 lib 中删除图像,将图像放在一个名为 images 的新文件夹中(在同一级别的 lib 文件中) 将您的 pubspec.yaml 更改为:

flutter:
  uses-material-design: true
  assets:
    - images/app_logo.png

在你的代码中

image: ExactAssetImage('images/app_logo.png'),

我试过了,效果很好。

【讨论】:

  • 已移动文件并进行了建议的更改。没啥事儿。在我以前的所有应用程序中,这是我的标准文件夹位置。出于好奇,我从之前发布的应用程序中复制了一张经过确认的工作图像。将 images/app_image.png 添加到我的 pubspec.yaml 文件中。更改代码以使用图像:ExactAssetImage('images/app_image.png'), .... Nothing....
  • 你确定你正在做获取颤振包和之后的一切吗?因为我发誓我尝试了同样的代码复制粘贴+我的更改,它工作得非常好
【解决方案3】:

我遇到了同样的问题,除了我的应用一直显示具有相同名称的旧版本资产图像(我编辑了图像)。我花了太长时间试图找出问题所在,包括但不限于诸如flutter clean、从我的虚拟机中擦除用户数据、重命名等。重命名成功了,这给了我一个线索,它可能在资产图像缓存本身不更新(如:仅在映射新名称时创建新数据)。最后,我 CTRL-B 进入 AssetImage,这将我带入 image_resolution.dart 文件。在阅读了一些代码后,我注意到它有一个字符串常量,文件名为“AssetManifest.json”。我在该文件的 app 目录中进行了搜索,并找到了两个位置。

...(您的应用)\build\app\intermediates\merged_assets\debug\out\flutter_assets

...(您的应用)\build\app\intermediates\flutter\debug\flutter_assets

在这两个目录中,您会注意到几个文件和目录。我将 AssetManifest.json 制作成一个 .bak 文件,以查看它是否在重新启动时被替换。确实如此,但仍然没有结果。所以我备份了这两个文件夹中的所有文件,然后将它们删除,使文件夹为空。当我重新启动应用程序时,文件夹会重新填充并显示该图片的编辑版本。

我的解决方案: 删除我显示的路径中两个 flutter_assets 文件夹中的内容(不是您应用的本地 assets 文件夹),然后重新启动应用。

我的猜测是,flutter 仅在映射新名称时更新图像缓存。因此,更改名称所指的实际文件不会执行任何操作。似乎删除这两个文件夹的内容,而不仅仅是清单,会强制您的项目不仅重建清单,还重建缓存本身,并将原始文件名与该文件的新版本相关联。

希望有帮助!

编辑:我确实必须在删除文件之前执行颤振清理。我还从 AVD 中擦除了用户数据,只是为了更好地衡量。

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 2021-07-03
    • 2021-03-20
    • 2021-08-13
    • 2021-11-07
    • 2022-11-19
    • 2020-08-01
    • 2021-10-24
    相关资源
    最近更新 更多