Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何获取资产';颤振中的文件路径?_Dart_Flutter - Fatal编程技术网

Dart 如何获取资产';颤振中的文件路径?

Dart 如何获取资产';颤振中的文件路径?,dart,flutter,Dart,Flutter,这是我的pubspec.yaml: assets: - assets/mySecertImage.png 下面是我如何读回资产的: var data = await PlatformAssetBundle().load('assets/mySecertImage.png'); 我可以取而代之的是文件路径,而不是直接读取它吗?如果无法执行此操作,是否可以将数据更改为文件对象?谢谢 你找到解决办法了吗?(我也在找同样的) 以下是我所追求的一个解决方案(由于缺乏更好的想法)…: 我

这是我的pubspec.yaml:

  assets:
    - assets/mySecertImage.png
下面是我如何读回资产的:

  var data = await PlatformAssetBundle().load('assets/mySecertImage.png');

我可以取而代之的是文件路径,而不是直接读取它吗?如果无法执行此操作,是否可以将
数据
更改为
文件
对象?谢谢

你找到解决办法了吗?(我也在找同样的)

以下是我所追求的一个解决方案(由于缺乏更好的想法)…:

我有:

  • 创建文档目录的新文件路径 (在下面的代码示例中命名为app.txt)
  • 将资产文件夹中的文件复制到此文件夹 文档目录位置
  • 从现在开始使用复制的文件(如果需要,您现在可以使用文件路径甚至字节内容)
以下是Dart代码:

import 'package:path/path.dart';

Directory directory = await getApplicationDocumentsDirectory();
var dbPath = join(directory.path, "app.txt");
ByteData data = await rootBundle.load("assets/demo.txt");
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(dbPath).writeAsBytes(bytes);
对于iOS模拟器:在上述两个示例中,您可以在以下文件夹下找到复制的文件:

/Users/username/Library/Developer/CoreSimulator/Devices/AE5C3275-CD65-3537-9B32-53533B97477C/data/Containers/data/Application/7BE2B2EE-4E45-3783-B4BD-341DA83C43BD/Documents/app.txt

(当然,UUID与您的情况不同…)

如果您只想在文件不存在的情况下复制该文件,您可以编写:

Directory directory = await getApplicationDocumentsDirectory();
var dbPath = join(directory.path, "app.txt");
if (FileSystemEntity.typeSync(dbPath) == FileSystemEntityType.notFound) {
  ByteData data = await rootBundle.load("assets/demo.txt");
  List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
  await File(dbPath).writeAsBytes(bytes);
}
Directory=wait getApplicationDocumentsDirectory();
var dbPath=join(directory.path,“app.txt”);
if(FileSystemEntity.typeSync(dbPath)=FileSystemEntityType.notFound){
ByteData=await rootBundle.load(“assets/demo.txt”);
List bytes=data.buffer.asUint8List(data.offsetInBytes,data.lengthInBytes);
等待文件(dbPath).writeAsBytes(字节);
}

您无法获取资产文件的文件路径,因为与应用程序捆绑在一起的资产存储在存档中

请参见此处的“资产构建”部分:

在构建过程中,Flatter将资产放入一个名为 应用程序在运行时从中读取的资产包


在启动应用程序时(在主方法中),它能解决您读取捆绑包并将其保存到真实文件的问题吗?如果是这样,请告诉我,我将向您展示执行此操作的代码。那么什么是“rootBundle”?@OliverDixon rootBundle是一个flatter库。导入“包:flatter/services.dart”显示根包;有关详细信息,请参见此处:请不要忘记首先将依赖项
路径\u提供程序:^1.3.0
添加到
pubspec.yaml
中,否则
getApplicationDocumentsDirectory()
将提示错误。
Directory directory = await getApplicationDocumentsDirectory();
var dbPath = join(directory.path, "app.txt");
if (FileSystemEntity.typeSync(dbPath) == FileSystemEntityType.notFound) {
  ByteData data = await rootBundle.load("assets/demo.txt");
  List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
  await File(dbPath).writeAsBytes(bytes);
}