我目前正在开发一个 Flutter 应用程序,旨在在从 REST API 服务器加载的小部件中显示图像。我不打算使用
/assets
,因为资源渲染是在编译期间进行的。相反,我实现了一个 API 调用方法,在初始化期间或之后进行调用,并将所需的图像下载到外部文件夹中,然后在小部件中(重新)渲染它们。
我目前正在尝试类似
Images.file(File(path\to\local\file))
的东西。
这是我尝试加载图像时的一段代码:
Expanded(
flex: 1,
child: Container(
color: const Color(0xFFFEF3F6),
child: Center(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
color: const Color(0xFFE8AFC5),
),
height: 300,
width: 300,
child: Center(
child: Image.file(
File(
'C:\\Users\\xuyan\\OneDrive\\Desktop\\test files\\Yuzu Orange Avatar.png'
)
)
)
)
)
)
)
但是,我在
flutter run
期间遇到了这样的错误:
══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
The following PathNotFoundException was thrown resolving an image codec:
Cannot retrieve length of file, path = 'C:\\Users\\xuyan\\OneDrive\\Desktop\\test files\\Yuzu Orange Avatar.png' (OS Error: No such file
or directory, errno = 2)
我检查了路径的拼写、图像是否在文件夹中,甚至检查了 Flutter 端的访问权限。但是,即使找到我的图像,它仍然无法读取。
是否还有其他原因导致异常,或者除了使用资源之外还有其他方式在渲染后显示来自外部本地路径的图像?
OneDrive 涵盖的桌面、文档和其他目录需要管理员访问权限(或具有访问权限的用户帐户)。即使在测试阶段,最好也不要保存在那里,因为您可能会或可能不会遇到的问题可能与其他客户不同。
最好缓存您的图像,而不是手动下载然后使用它们,例如,您可以使用cached_network_image。 该软件包会缓存给定的 URL,即使未列出,它也支持 Windows。这是包自己的文档中的一个最小示例:
import 'package:cached_network_image/cached_network_image.dart';
CachedNetworkImage(
imageUrl: "http://via.placeholder.com/350x150",
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
),
这将渲染指定给
imageUrl
属性的图像 URL,同时在加载图像时显示 placeholder
,并在遇到错误时显示 errorWidget
。
另一方面,您可以使用 path_provider 获取 AppData 或 Downloads 目录的路径,最适合存储应用程序的下载并重用它们。