【问题标题】:How to load a file from a specific package in flutter?如何在颤动中从特定包中加载文件?
【发布时间】:2023-03-27 00:27:01
【问题描述】:

这是我的包core 的文件夹结构:

/pubspec.yaml
/assets
   |-images
   |-lang
       |- en.json
       |- hi.json

我对另一个名为 moduleA 的模块有类似的结构

现在,当我加载 json 文件时,我会像这样加载它:

    await rootBundle.loadString('assets/lang/en.json');

但问题是,当我在 'moduleA' 中使用 'core' 模块的屏幕时,'core' 模块会在 'moduleA' 内部查找文件路径。我需要的是一种方法来指定从哪个包加载文件:

现在我已经查看了打击问题的答案并尝试了它,但它对我不起作用:

How to use rootBundle in flutter to load images?

执行 rootBundle.loadString('packages/core/assets/lang/en.json') 尽管已在 pubspec.yaml 文件中指定并复制了核心内的 assets/ 文件夹,但仍然给我一个文件未找到错误/lib 文件夹。

所以,当我使用以下方法加载字符串时:

await rootBundle.loadString('packages/core/assets/lang/${locale.languageCode}.json');

我收到以下错误:

Error: unable to find directory entry in pubspec.yaml: /Users/nateshmbhat/Desktop/nuclei-flutter-sdk/core/packages/core/assets/images/

这是我的 core/pubspec.yaml 内容:

flutter:
  assets:
    - packages/core/assets/lang/
    - packages/core/assets/images/

我已将 assets 文件夹移动到 core/lib/ 中。

我在这里做错了什么吗?知道如何解决这个问题吗?

【问题讨论】:

  • 资产必须是lib/assets
  • 你找到解决方案了吗?
  • 是的,请看下面的答案

标签: android flutter flutter-dependencies


【解决方案1】:

构建包时:

  • 像往常一样把你的资源放到包的 assets 文件夹中
  • assets/translations/ 添加到 pubspec,不要忘记最后一个 / 因为它表示整个目录
  • 当使用rootBundle.loadAsString 或类似的路径时,路径将为packages/package_name/assets/translations/en.json。请注意,packages 是复数形式。

【讨论】:

  • 它很有用,我救了我的命 :D 非常感谢
【解决方案2】:

原来,当我们在包中导入资产时,我们也需要包含特定的文件,而仅仅包含一个文件夹是行不通的。

所以做以下修复它:D

flutter:
  assets:
    - packages/core/assets/lang/en.json
    - packages/core/assets/lang/sp.json
    - packages/core/assets/images/myimage.png

【讨论】:

  • 我有一个包含语言 json 文件的项目,它只需要在没有文件路径的资产下定义 lang 文件夹
  • 这不是真的
猜你喜欢
  • 2019-09-06
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
相关资源
最近更新 更多