【问题标题】:Flutter: How to wait for android platform channel function to complete and return the resultFlutter:如何等待android平台通道功能完成并返回结果
【发布时间】:2020-02-19 06:50:36
【问题描述】:

使用 AWS 开发工具包在 Android 上创建用于文件上传的平台通道。 现在我想在后台等待上传完成并返回结果的状态。

MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            if (call.method == "uploadToAWS") {
                new DoUpload().execute();

                // how to await here ?
                result.success(true);
            } else {
                result.notImplemented()
            }
        }

【问题讨论】:

  • 上传完成后只需拨打result.success(true);
  • 我可以从委托函数内部调用 result.success(true) 吗?
  • 你可以从任何地方调用它,唯一的限制是here - 阅读第二段
  • 最简单的方法是这样的:new DoUpload(result).execute(); - 这样你就可以在DoUpload 类中访问result

标签: flutter dart flutter-platform-channel


【解决方案1】:
  1. 不要在那里等待,而是删除“result.success(true);”从那里声明并简单地将“结果”对象分配给您自己的“MethodChannel.Result”类型的对象。

  2. 然后使用它从任何地方执行其“成功”、“错误”或“未实现”方法,如下例所示。

    public class Activity extends FlutterActivity {
    
      private MethodChannel.Result myResult;
    
      new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
            .setMethodCallHandler(
                    (call, result) -> {
                        myResult = result;
                    }
            );
    
      private void myCustomMethod {
    
        myResult.success(yourData);
    
      }
    
    }
    

现在您可以在类中的任何位置使用这些 myResult.success()、myResult.error() 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2020-08-14
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多