【发布时间】:2018-10-01 14:21:08
【问题描述】:
我正在尝试为我的 Flutter 应用定义一些资产。
这是我的目录结构:
- lib
- assets
- images
└ bg_login.png <-- this one is 400x800px
└ 2.0x
└ bg_login.png <-- this one is 800x1600px.
- test
- ios
- android
- build
- pubspec.yaml
这是我的 pubspec 文件(缩进 2 个空格):
name: my_app
description: My App
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- assets/images/bg_login.png
我像这样加载图像:
new Positioned(
top: 0.0,
width: MediaQuery.of(context).size.width,
child: Image.asset(
"assets/images/bg_login.png",
fit: BoxFit.fitWidth,
)
)
有时图像会加载,有时会失败并出现以下错误:
Launching lib\main.dart on Android SDK built for x86 in debug mode...
Initializing gradle...
Resolving dependencies...
Running 'gradlew assembleDebug'...
Built build\app\outputs\apk\debug\app-debug.apk.
Installing build\app\outputs\apk\app.apk...
Syncing files to device Android SDK built for x86...
D/ ( 3460): HostConnection::get() New Host Connection established 0xb099df40, tid 3479
D/EGL_emulation( 3460): eglMakeCurrent: 0xa325a620: ver 2 0 (tinfo 0xb0983620)
I/flutter ( 3460): ══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
I/flutter ( 3460): The following assertion was thrown resolving an image codec:
I/flutter ( 3460): Unable to load asset: assets/images/bg_login.png
I/flutter ( 3460):
I/flutter ( 3460): When the exception was thrown, this was the stack:
I/flutter ( 3460): #0 PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:221:7)
I/flutter ( 3460): <asynchronous suspension>
I/flutter ( 3460): #1 AssetBundleImageProvider._loadAsync (package:flutter/src/painting/image_provider.dart:427:44)
I/flutter ( 3460): <asynchronous suspension>
I/flutter ( 3460): #2 AssetBundleImageProvider.load (package:flutter/src/painting/image_provider.dart:412:14)
I/flutter ( 3460): #3 ImageProvider.resolve.<anonymous closure>.<anonymous closure> (package:flutter/src/painting/image_provider.dart:266:86)
I/flutter ( 3460): #4 ImageCache.putIfAbsent (package:flutter/src/painting/image_cache.dart:143:20)
I/flutter ( 3460): #5 ImageProvider.resolve.<anonymous closure> (package:flutter/src/painting/image_provider.dart:266:63)
I/flutter ( 3460): (elided 8 frames from package dart:async)
I/flutter ( 3460):
I/flutter ( 3460): Image provider: AssetImage(bundle: PlatformAssetBundle#267c3(), name: "assets/images/bg_login.png")
I/flutter ( 3460): Image key: AssetBundleImageKey(bundle: PlatformAssetBundle#267c3(), name: "assets/images/bg_login.png",
I/flutter ( 3460): scale: 1.0)
I/flutter ( 3460): ════════════════════════════════════════════════════════════════════════════════════════════════════
它确实是随机发生的,有时它会起作用,但大多数时候它会抛出该错误。我也试过ImageAsset,我得到了同样的错误。
发生了什么事?我是否遗漏了有关如何正确声明和加载图像的内容?
【问题讨论】:
-
只留下一张图片会出现这个问题吗?
-
@AndreyTurkovsky 是的,确实如此。实际上我添加了
2.0x目录,因为我认为颤振由于其大小而无法加载图像。但即使管理不同的尺寸也无济于事。 -
但有时会加载图像。你还没有找到模式 - 它依赖于什么?
-
@AndreyTurkovsky 我没有。它实际上是在热重新加载时随机发生的。我可以更改文本、组件,任何东西,有时会抛出错误,有时不会。
-
assets/img/和assets/images/您的解释与错误消息和代码之间存在什么差异?
标签: android flutter image-loading