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(),
),
)
我正在尝试将 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(),
),
)