gpt4 book ai didi

dart - 如何在 flutter 中获取 Assets 的文件路径?

转载 作者:IT老高 更新时间:2023-10-28 12:47:06 27 4
gpt4 key购买 nike

这是我的 pubspec.yaml:

  assets:
- assets/mySecertImage.png

这是我读回 Assets 的方式:

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

我可以获取文件路径而不是直接读取它吗?如果不能这样做,是否可以将 data 更改为 File 对象?谢谢。

最佳答案

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

这是我追求的一种解决方法(由于缺乏更好的想法)...:

我愿意:

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

这是 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);

有些人还使用 getDatabasesPath() 而不是 getApplicationDocumentsDirectory()。但我认为在 iOS 模拟器上这最终是完全相同的位置。 (未在 Android 上验证)...所以,它会说:

var dbDir = await getDatabasesPath();
var dbPath = join(dbDir, "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);
}

关于dart - 如何在 flutter 中获取 Assets 的文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52353764/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com