Flutter将不会显示资产图片

时间:2019-07-04 15:01:03

标签: image flutter

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之间的空间,并替换为tab。

有什么作用?

3 个答案:

答案 0 :(得分:1)

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

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

以及您的代码

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

我已经尝试过了,效果很好。

答案 1 :(得分: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. 请确保您已正确指定了适当的间距和文件扩展名

答案 2 :(得分:-1)

除了我的应用程序一直显示名称相同的旧版资产图片(我编辑过图片)之外,我在这件事上也遇到了问题。我花了很长时间来试图找出问题所在,包括但不限于,诸如抖动清除,从我的虚拟机清除用户数据,重命名等。重命名有效,这给了我一个线索,可能是资产图片缓存本身不会更新(例如:仅在映射新名称时创建新数据)。最后,我按CTRL-B进入AssetImage,这使我进入了image_resolution.dart文件。阅读一些代码后,我注意到它具有一个字符串常量,文件名为“ AssetManifest.json”。我在该文件的应用目录中进行了搜索,并找到了两个位置。

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

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

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

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

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

希望有帮助!

编辑:在删除文件之前,我确实必须进行抖动清除。我也删除了AVD中的用户数据,只是出于很好的考虑。