Dart 如何将资产图像转换为文件?

Dart 如何将资产图像转换为文件?,dart,flutter,Dart,Flutter,是否有一种方法可以将资产映像用作文件。 我需要一个文件,以便它可以用于测试它在互联网上使用http。我尝试了Stackoverflow.com()中的一些答案,但得到一个错误“无法打开文件,(操作系统错误:没有这样的文件或目录,errno=2)”。附加的代码行也给出了一个错误 File f = File('images/myImage.jpg'); RaisedButton( onPressed: ()=> showDialog( context: context,

是否有一种方法可以将资产映像用作文件。 我需要一个文件,以便它可以用于测试它在互联网上使用http。我尝试了Stackoverflow.com()中的一些答案,但得到一个错误“无法打开文件,(操作系统错误:没有这样的文件或目录,errno=2)”。附加的代码行也给出了一个错误

File f = File('images/myImage.jpg');

RaisedButton(
   onPressed: ()=> showDialog(
     context: context,
     builder: (_) => Container(child: Image.file(f),)),
   child: Text('Show Image'),)
使用Image.memory小部件(works)

Future myGetByte()异步{
_byteData=wait rootBundle.load('images/myImage.jpg');
}
///调用内部构建函数
Future fileByte=myGetByte();
///显示图像
容器(子:fileByte!=null
?Image.memory(_byteData.buffer.asUint8List(_byteData.offsetInBytes
byteData.长度(字节))
:Text(“无图像文件”),
您可以通过访问字节数据。然后,您可以将其保存到设备的临时目录中,该目录由获得(您需要将其添加为依赖项)

有关写入字节数据的详细信息

您需要等待未来,为此,使函数异步:

RaisedButton(
   onPressed: () async => showDialog(
     context: context,
     builder: (_) => Container(child: Image.file(await getImageFileFromAssets('images/myImage.jpg')))),
   child: Text('Show Image'));

使用颤振路径包

颤振绝对路径:^1.0.6

在pubsec.yaml

要从该格式转换文件路径,请执行以下操作:

“content://media/external/images/media/5275”

======

List <File> fileImageArray = [];
assetArray.forEach((imageAsset) async {
final filePath = await FlutterAbsolutePath.getAbsolutePath(imageAsset.identifier);

File tempFile = File(filePath);
if (tempFile.existsSync()) {
    fileImageArray.add(tempFile);
}
List fileImageArray=[];
forEach((imageAsset)异步{
final filePath=await-AbsolutePath.getAbsolutePath(imageAsset.identifier);
File tempFile=文件(文件路径);
if(tempFile.existsSync()){
fileImageArray.add(tempFile);
}

从资产获取文件,但不提供路径

import 'package:path_provider/path_provider.dart';


Future<File> getImageFileFromAssets(Asset asset) async {
    final byteData = await asset.getByteData();

    final tempFile =
        File("${(await getTemporaryDirectory()).path}/${asset.name}");
    final file = await tempFile.writeAsBytes(
      byteData.buffer
          .asUint8List(byteData.offsetInBytes, byteData.lengthInBytes),
    );

    return file;
  }
import'package:path_provider/path_provider.dart';
未来getImageFileFromAssets(资产资产)异步{
final byteData=wait asset.getByteData();
最终临时文件=
文件(“${(wait getTemporaryDirectory()).path}/${asset.name}”);
最终文件=等待tempFile.writeAsBytes(
字节数据缓冲区
.asuint8列表(byteData.offsetInBytes、byteData.lengthInBytes),
);
返回文件;
}

使用AssetBundle将其读入内存并存储到文件中。我对其进行了测试,发现一个错误:“参数类型Future无法分配给参数类型文件”。我已在上面添加了测试代码。@CreativeCreatorOrmaybeno现在无法正常工作。我遇到的问题是,函数“getImageFileFromAssets”正在将“images/myImage.jpg”添加到getTemporaryDirectory(),而不仅仅是“/myImage.jpg”。最后我有了一个文件!谢谢。您好,我遵循了解决方案,但我得到了关于未处理异常的错误:FileSystemException:无法打开文件,路径=”/data/user/0/com.example.myApp/cache/images/black.png“(操作系统错误:没有这样的文件或目录,错误号=2)@CreativeCreatorOrmaybeno我认为您不应该将
final file=file('${(wait-getTemporaryDirectory()).path}/$path');
替换为
final file=file('${(wait-getTemporaryDirectory()).path}/image.png');
这将为未来商业节省时间添加
wait-file.create(递归:true);
创建文件后。因为如果您的路径包含尚不存在的目录,则写入该文件失败,因为默认情况下,create使用recursive false。您忘记了“;”在最后一行中,编辑它以使其他人更容易感谢很多人,你在下一行旁边问我。对于iOS 14中图像选择器有问题的人。xAsset类在我能找到的任何地方都不存在。有什么见解吗?
“content://media/external/images/media/5275”
"/storage/emulated/0/DCIM/Camera/IMG_00124.jpg”
List <File> fileImageArray = [];
assetArray.forEach((imageAsset) async {
final filePath = await FlutterAbsolutePath.getAbsolutePath(imageAsset.identifier);

File tempFile = File(filePath);
if (tempFile.existsSync()) {
    fileImageArray.add(tempFile);
}
import 'package:path_provider/path_provider.dart';


Future<File> getImageFileFromAssets(Asset asset) async {
    final byteData = await asset.getByteData();

    final tempFile =
        File("${(await getTemporaryDirectory()).path}/${asset.name}");
    final file = await tempFile.writeAsBytes(
      byteData.buffer
          .asUint8List(byteData.offsetInBytes, byteData.lengthInBytes),
    );

    return file;
  }