Flutter:作为包使用时如何获取本地的AssetBundle?

Flutter: How to get the local AssetBundle when being used as a package?

我正在尝试将 1 个 flutter 应用程序嵌套在另一个应用程序中,比如一个链接到许多演示应用程序的图库应用程序:

图库

--> 演示 1

--> 演示2

等等

Demo1 使用:rootBundle.load('images/image.png') 加载图像。

当从 Gallery 中使用 Demo1 时,这会中断,大概是因为 rootBundle 现在指的是 Gallery Bundle,而不是 Demo 1。

有没有一种方法可以构建 Demo1,使其始终从它自己的 AssetBundle 中提取?我试过了

捆绑 = DefaultAssetBundle.of(上下文);

不过好像没什么区别。

注意:我可以解决这个问题,方法是将图像移动到 /lib 中,并将它们声明为 'packages/package_name/images/glow.png',然后使用 rootBundle.load('packages/package_name/images/glow.png'),但是我们希望避免这种要求,而只是访问正确的 AssetBundle。

我认为您可以使用 DefaultAssetBundle 包装包含的应用程序的屏幕或小部件,然后将其传递给 PlatformAssetBundle 的自定义实现,您可以在其中覆盖其 load(String) 方法。在其中,您在关键参数前加上包名称。包名称可以作为自定义实现的构造函数参数提供。示例:

Container(
  child: DefaultAssetBundle(
    bundle: PackageAssetBundle(packageName: 'demo1'),
    child: Demo1WidgetWithPackageAssets(),
   ),
)