【问题标题】:Wait in Flutter Code for Completion of Async Native Request在 Flutter 代码中等待异步原生请求的完成
【发布时间】:2021-03-22 18:45:01
【问题描述】:

我正在开发一个 Flutter 应用程序,该应用程序需要从 Flutter 以本机代码 (Android/Java) 调用 API 函数 ActivityCompat.requestPermissions。 API 原生代码函数是异步的,即对 requestPermissions 的调用立即返回,而 requestPermissions 调用的结果由 Android 稍后返回。

在 Flutter 中如何等待,当我通过 methodChannel 从 Flutter 调用 API requestPermissions 时,native 代码不会立即返回 Flutter,而是等待 ActivityResult 并从 Native 代码返回最终结果给 Flutter。类似 Flutter 中的东西

int activityResult = await callNativeRequestPermission();
//Now activityResult variable contains the final result

【问题讨论】:

    标签: android flutter


    【解决方案1】:

    请求权限的最简单方法是使用包,例如permission handler

    onPressed: () async {
      if (await Permission.contacts.request() == PermissionStatus.granted) {
        ...
      }
    },
    

    这取决于您尝试从哪里调用它;如果它来自一个按钮按下它应该很容易,因为您可以将您的函数声明为async,然后使用await 关键字。如果是在您第一次打开一个稍微复杂一点的屏幕时;在这种情况下,您可以使用 FutureBuilder。

    【讨论】:

    • 感谢您的回复。我已经检查了你提到的插件。我没有走这条路的原因是您需要在 iOS 的 plist 文件中包含所有权限,即使您的应用程序不需要它。似乎有一些黑客可以修复它,但许多用户报告说苹果在审查期间仍然拒绝了他们的应用程序。这就是计划在没有插件的情况下在应用程序中执行权限逻辑的原因:(.
    最近更新 更多