Flutter: 无法加载文本资源

9

我的文件 endpoints.json 存放在 /WORKPLACE_DIR/assets/json/endpoints.json 中。

{
  "key": "value"
}

我已经更新了pubspec.yaml文件。

assets:
    - assets/json/endpoints.json

/tests/some_test.dart文件中,
我执行了...
test('my test', () async {
      final endpoints = json.decode(await rootBundle.loadString("assets/json/endpoints.json"));
    }

它仍然显示错误。
ERROR: Unable to load asset: assets/json/endpoints.json
package:flutter/src/services/asset_bundle.dart 221:7  PlatformAssetBundle.load
===== asynchronous gap ===========================
dart:async                                            _AsyncAwaitCompleter.completeError
package:flutter/src/services/asset_bundle.dart        PlatformAssetBundle.load
===== asynchronous gap ===========================
dart:async                                            _asyncThenWrapperHelper
package:flutter/src/services/asset_bundle.dart        PlatformAssetBundle.load
package:flutter/src/services/asset_bundle.dart 67:33  AssetBundle.loadString

我尝试过flutter clean,但仍然出现此错误。我不确定该怎么做。


你的 json.decode 调用中,扩展名 .txt 不正确吧? - Jonathan
抱歉,我复制了错误的日志。已更正。应该是JSON格式。 - Souradeep Nanda
你能确认你的资产文件夹在应用程序目录的根目录下吗?你能访问文件夹中的其他资产,例如图片吗? - F-1
这里也有同样的问题,不知道该怎么修复。 - Unnikrishnan
我仍然没有解决方法。我只是使用了一个 constants.dart 文件,并将常量分配给了 JSON。值得庆幸的是,JSON 和 dart HashMap 具有相同的语法。 - Souradeep Nanda
在运行测试之前尝试添加 TestWidgetsFlutterBinding.ensureInitialized(); - blaffie
3个回答

5

我曾经也遇到过类似图片的问题。原因很简单,我没有在“assets:”之前加制表符。如果你的pubspec.yaml文件中的“flutter:”和“assets:”处于同一级别,那么就会出现“无法加载资源”的错误。所以只需在“assets:”之前添加制表符并在其后添加“- assets / json / endpoints.json”即可。


4

你好,也许将这些资源添加到 pubspec.yaml 可以帮助解决问题。 enter image description here


1
如果您在子模块中,需要将packages/your_submodule_name/放在资源路径的前面。
例如:
await rootBundle.loadString("packages/my_module/assets/json/endpoints.json");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接