加载 txt 文件作为 dart 包的资产

テッド*_*テッド 5 dart

在 flutter 中,通过在 pubspec.yaml 文件中指定它或其文件夹,然后使用 .txt 加载它,可以轻松地在运行时加载 .txt 资源rootBundle。然而,我正在开发一个纯 dart 包,并且我正在努力弄清楚如何让包加载相对于它自己的目录结构的 .txt 文件。

当我在正在处理的单独 dart 命令行应用程序中使用该包时,我在包源代码文件之一中指定的相对路径会导致抛出错误,指出 txt 文件不存在。我理解为什么会抛出此错误,因为相对路径被解释为来自命令行应用程序的根目录而不是包的根目录,但我不确定如何在不指定 .txt 的绝对路径的情况下解决此问题文件。我宁愿不指定绝对路径,因为它会使包的可移植性降低。

有没有类似flutter的纯dart包的资源加载?

小智 0

我认为您需要resolveSymbolicLinksresolveSymbolicLinksSync方法来解码相对路径,然后使用解析的路径读取txt文件:

import 'dart:io';

void main() async {
  String file = '../lib/main.dart';
  var path = Uri.parse('.').resolveUri(Uri.file(file)).toFilePath();
  print(path);
  if (path == '') path = '.';
  var resolved = await File(path).resolveSymbolicLinks();
  print(resolved);

  File(resolved).readAsString().then((String contents) {
    print(contents);
  });
}

Run Code Online (Sandbox Code Playgroud)