dart 如何将资源图像转换为文件?

tgabmvqs  于 2023-04-03  发布在  其他
关注(0)|答案(3)|浏览(143)

有没有一种方法可以将资产映像用作文件。我需要一个文件,以便可以使用http通过互联网对其进行测试。我已经尝试了Stackoverflow.com(How to load images with image.file)的一些答案,但得到一个错误“无法打开文件,(操作系统错误:没有这样的文件或目录,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小部件(工作)

Future<Null> myGetByte() async {
    _byteData = await rootBundle.load('images/myImage.jpg');
  }

  /// called inside build function
  Future<File> fileByte = myGetByte();

 /// Show Image
 Container(child: fileByte != null
 ? Image.memory(_byteData.buffer.asUint8List(_byteData.offsetInBytes, _ 
 byteData.lengthInBytes))
 : Text('No Image File'))),
yeotifhr

yeotifhr1#

您可以通过rootBundle访问 *byte数据 *,然后将其保存到path_provider获取的设备临时目录中(需要添加依赖项)。

import 'dart:async';
import 'dart:io';

import 'package:flutter/services.dart' show rootBundle;
import 'package:path_provider/path_provider.dart';

Future<File> getImageFileFromAssets(String path) async {
  final byteData = await rootBundle.load('assets/$path');

  final file = File('${(await getTemporaryDirectory()).path}/$path');
  await file.create(recursive: true);
  await file.writeAsBytes(byteData.buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));

  return file;
}

在你的例子中,你可以这样调用这个函数:

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

有关写入字节数据的更多信息,请参见check out this answer
你需要awaitFuture,为了做到这一点,使函数async

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

frebpwbc2#

不提供路径从资源获取文件。

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;
  }
t3psigkw

t3psigkw3#

使用flutter_absolute_path包。
Flutter绝对路径:^1.0.6
在pubsec.yaml
要从此格式转换文件路径:

“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);
}

相关问题