如何在 flutter 中从不同的包中读取资产 JSON 文件?

How to read assets JSON file from different package in flutter?

我正在开发一个 flutter 应用程序,我在其中为主应用程序使用了多个插件

main_app
-plugin1
 -example
-plugin2
 -example
-plugin3
 --example
package as well 
- <package_name>

每个插件都有自己的示例文件夹,这有助于我测试 UI 和大多数 UI 使用常见的图像和图标,这些图像和图标分别保存在纯 flutter 包中:

framework_utilities:<--(package)
   assets:
    - assets/
    - assets/images/green/2x/
    - assets/mockup/reg_state.json <--- JSON file
   lib
     src
       constant

并且我可以通过传递包引用来访问图像和图标:

Image.asset("assets/barcode.png", package: "framework_utilities", width: 70.0, height: pad_30),

现在我的要求是我想在不将 json 文件包含到主应用程序级别的情况下模拟整个应用程序。

如果我在主应用程序的资产文件夹中包含 json 文件,它工作正常,但我不想在我想保留的插件和应用程序中制作 json 文件的副本它在一个地方并阅读它。

我试过了

rootBundle.loadString('assets/reg_state.json')

它仅适用于单个插件示例级别。

为什么我需要读取 json 文件?

如果我模拟主应用程序或单个插件,那么我可以提供一个虚拟 json 数据来查看 UI。

我是如何解决这个问题的:

在您的主应用程序中导入包和插件 pubspec.yaml 文件

registration_plugin:
  path: ../registration_plugin  <--- this is plugin
framework_utils:
  path: ../framework_utils      <--- this is package

我在 framework_utils 资产文件夹中有 json 个文件和图标,例如:

assets:
  - assets/
  - assets/images/green/2x/
  - assets/reg_state.json
  - assets/user_state.json

现在,如果您想阅读此文件或插件中的图标,我将调用如下代码:

图片

Image.asset("assets/user.png", package: "framework_utils", width: 70.0, height: pad_30),

对于JSON 文件

 String path = 'packages/framework_utils/assets/user_state.json';
 String jobsString = await rootBundle.loadString(path); 
 List<dynamic> users = await jsonDecode(jobsString);

这是适合我的解决方案。