首页 > 解决方案 > Flutter:如何将 URI 转换为文件?

问题描述

我想将路径“content://media/external/images/media/138501”转换为文件并在图像中设置。

代码:

File imageFile = File("content://media/external/images/media/138501");

不工作:

DecorationImage(image: ExactAssetImage(imageFile.path),fit: BoxFit.fill)

标签: flutter

解决方案


您可以使用uri_to_file包。它支持 content:// URI。

易于使用(更新)

import 'package:uri_to_file/uri_to_file.dart';

try {
  String uriString = 'content://sample.txt';

  // Don't pass uri parameter using [Uri] object via uri.toString().
  // Because uri.toString() changes the string to lowercase which causes this package to misbehave

  // If you are using uni_links package for deep linking purpose.
  // Pass the uri string using getInitialLink() or linkStream

  File file = await toFile(uriString);
} on UnsupportedError catch (e) {
  print(e.message);
} on IOException catch (e) {
  print(e);
} catch (e) {
  print(e);
}

那么你可以随意使用这个文件

重要的提示

不要像这样传递uri值

File file = await toFile(uri.toString());

如果您使用uni_links包进行深度链接,请像这样使用。使用 getInitialLink() 或 linkStream

String? uriString = await getInitialLink();
if (uriString != null) {
  File file = await toFile(uriString);
}

linkStream.listen((uriString) async {
  if (uriString != null) {
    File file = await toFile(uriString!);
  }
});

这不会修改 uri 字符串,因为我们没有使用 uri.toString()

所以这个包可以正常工作

工作示例: 工作示例

有关更多详细信息:uri_to_file


推荐阅读