访问包内主应用程序的资产

Accessing assets of main application inside package

我目前正在尝试使用 Kotlin 为 Flutter 应用程序开发一个包。我的问题是我需要为包提供一个配置文件,该文件只能在主应用程序中定义。由于 Dev 和 Prod 环境的配置不同,应用程序应通过方法通道传递文件的路径。问题是包无法访问调用应用程序的资产文件夹。 路径:"assets/config.json"(根是主应用程序)

我已经尝试过的步骤:

  1. 在 res/raw 中创建文件并通过资源 ID 访问配置文件 -> Kotlin 给我一个“未解析的引用”错误,除非我在包中创建文件 res/raw

  2. 我没有通过路径,而是尝试通过配置的内容并将其写入一个空的临时文件。 Kotlin 中的代码是这样的:

        val config = File(applicationContext.filesDir,"config.json")
        config.writeText(configContent)
    

-> 这可行,但似乎是解决问题的奇怪方法。

如果我需要提供更多信息,请告诉我,提前谢谢!

编辑:

初始化时调用的Java方法:

public static void createMultipleAccountPublicClientApplication(@NonNull final Context context,
                                                                @NonNull final File configFile,
                                                                @NonNull final IMultipleAccountApplicationCreatedListener listener)

Flutter 资产不是文件 - 它们被打包并且只能通过 rootBundle 获得。因此,如果您想从文本资产制作文件,则必须有人加载资产并将其写入文件。

由于您的插件用户将负责资产,因此他们必须完成第一部分(并以 String 结尾)。问题来了,谁来写。

您可以让插件用户使用 path_provider 找到临时目录并将其写入那里,然后将文件路径传递给您。最终,在 Java 中,你 new File(theTempFilePath)。或者他们可以将字符串传递给插件的 Dart 部分,然后您以相同的方式创建临时文件。

如果他们将字符串传递给您的插件可能会更方便,您将其传递给本机端并让本机端创建一个临时文件并将字符串写入其中。 (顺便说一句,我假设我们正在谈论这个配置文件:https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-configuration#how-to-use-a-configuration-file

查看这个创建临时文件的答案:Creating temporary files in Android

请注意,您的插件用户实际上没有理由需要使用资产。相反,如果配置从未真正改变,他们可以只在代码中硬编码字符串。

有一种说法认为,由于这是一个 JSON 配置文件,您可能不想用此 JSON 配置文件的详细信息来打扰您的用户。你可能想在你的 Dart 代码中默认它(为什么不将它硬编码为字符串,如上所述,如果它从未真正改变过)然后提供一些方法来覆盖特定值,如客户端 id 和重定向 uri,这可能是用户在实践中唯一改变的事情。因此,与其让他们提供完整的 JSON 文件,他们只是给你这两个字符串,然后你将它们插入默认的 JSON。也许是版本 2 的功能:)