代码之家  ›  专栏  ›  技术社区  ›  DNB5brims

如何在flutter中获取资产的文件路径?

  •  3
  • DNB5brims  · 技术社区  · 8 年前

      assets:
        - assets/mySecertImage.png
    

    以下是我如何读回资产:

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

    不是直接读取,我可以得到文件路径吗?如果无法这样做,则可以更改 data 成为 File 反对?谢谢。

    1 回复  |  直到 8 年前
        1
  •  11
  •   iKK    7 年前

    这里有一个解决办法,我追求(由于缺乏更好的想法)。。。:

    • 创建指向文档目录的新文件路径 (命名应用程序.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);
    

    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);
    }
    
        2
  •  0
  •   Cristi    6 年前

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

    https://flutter.dev/docs/development/ui/assets-and-images#asset-bundling

    应用程序在运行时从中读取的资产包。