【问题标题】:Using a relative path for File() in Flutter在 Flutter 中使用 File() 的相对路径
【发布时间】:2021-02-13 18:42:16
【问题描述】:

我正在使用 Flutter 并尝试在我的资产文件夹中打开一个 json 文件。我发现我可以使用 File() 方法,但它似乎只采用绝对路径。有没有办法可以将其转换为相对路径?我已经尝试使用文件的相对路径,但它返回一个错误,说没有这样的文件。

这是目前为止的代码。基本上我想获取 json 文件,并将其作为字符串返回(在下面的函数 readFileSync() 中)。然后我使用该数据创建一个 List 对象。如果有更好的方法将文件读入 Flutter,我也愿意!

List<Answers> myFunction2() {
  String arrayObjsText = readFileSync();
  //print(arrayObjsText);

  var tagObjsJson = jsonDecode(arrayObjsText)['tags'] as List;
  var tagObjs =
      tagObjsJson.map((tagJson) => Answers.fromJson(tagJson)).toList();

  return tagObjs;
}

String readFileSync() {
  String contents = new File(
          '/Users/pstumbaugh/Documents/Computer Science/CS492 Mobile Dev/Dart-Flutter-CallMeMaybe/project3/assets/answers.json')
      .readAsStringSync();
  return contents;
}

我不太了解 Futures 的工作原理。我尝试了这些,但似乎它总是返回一个 Future 并且我不确定如何将它解压缩为一个字符串,而不必使所有内容都成为异步函数,然后当我尝试获取 List 时会导致问题我在主页上的小部件...

【问题讨论】:

    标签: json flutter dart


    【解决方案1】:

    您应该不从您的 PC 的相对路径中获取资产。当您为设备或模拟器/模拟器安装应用程序时,它无法访问您计算机上的文件。简而言之,您可以使用 flutter/services.dart 包中的 loadString 方法(默认在 Flutter SDK 中):

    import 'package:flutter/services.dart' show rootBundle;
    
    final data = rootBundle.loadString('assets/answers.json');
    

    并确保您在 pubspec.yaml 配置中声明了资产。 Here 是关于如何使用资产的官方教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 2013-12-12
      • 1970-01-01
      • 2014-01-30
      • 2016-11-09
      • 2019-05-16
      相关资源
      最近更新 更多