Dart 如何获取资产';颤振中的文件路径?
这是我的pubspec.yaml:Dart 如何获取资产';颤振中的文件路径?,dart,flutter,Dart,Flutter,这是我的pubspec.yaml: assets: - assets/mySecertImage.png 下面是我如何读回资产的: var data = await PlatformAssetBundle().load('assets/mySecertImage.png'); 我可以取而代之的是文件路径,而不是直接读取它吗?如果无法执行此操作,是否可以将数据更改为文件对象?谢谢 你找到解决办法了吗?(我也在找同样的) 以下是我所追求的一个解决方案(由于缺乏更好的想法)…: 我
assets:
- assets/mySecertImage.png
下面是我如何读回资产的:
var data = await PlatformAssetBundle().load('assets/mySecertImage.png');
我可以取而代之的是文件路径,而不是直接读取它吗?如果无法执行此操作,是否可以将
数据
更改为文件
对象?谢谢 你找到解决办法了吗?(我也在找同样的)
以下是我所追求的一个解决方案(由于缺乏更好的想法)…:
我有:
- 创建文档目录的新文件路径 (在下面的代码示例中命名为app.txt)
- 将资产文件夹中的文件复制到此文件夹 文档目录位置
- 从现在开始使用复制的文件(如果需要,您现在可以使用文件路径甚至字节内容)
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);
}