这是我现在面临的问题。 我有一个名为“ assets”的文件夹,并且在该文件夹中有一个名为“ no_icon.png”的图像。 我已将其添加到pubspec.yaml中,如下所示:
flutter:
assets:
- assets/teamShields/
- assets/no_icon.png
当我在StatelessWidget内操作
final imageP = File('assets/no_icon.png');
,然后在其中和MaterialApp:
body: Text(imageP.existsSync().toString()),
我总是在屏幕上看到错误。
此外,如果我键入Image.asset('assets/no_icon.png'),
而不是“文字”,我可以看到渲染的图像。
我不知道这是错误还是我做错了...
答案 0 :(得分:1)
您应该使用Flutter的资产支持,而不是使用文件。它旨在处理您在pubspec文件中声明的所有资产。
如果从有状态/无状态窗口小部件中使用,它将看起来像这样:
Future<ByteData> loadFile(context) async {
AssetBundle bundle = DefaultAssetBundle.of(context).bundle;
try {
return await bundle.load("path/to.file");
} catch (e) {
print("Failed to load file because of $e");
return null;
}
}
您将在任何有意义的地方调用它,即initState或使用FutureBuilder。或者您可以使用:
import 'package:flutter/services.dart' show rootBundle;
...
Future<ByteData> loadAsset() async {
return await rootBundle.load('assets/some.file');
}
但是,似乎您正在尝试加载有特殊情况的图像文件。
来自the docs:
Widget build(BuildContext context) {
// ...
return DecoratedBox(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('graphics/background.png'),
// ...
),
// ...
),
);
// ...
}
您需要做的就是使用AssetImage =)。