Flutter Platform Channel在Android回调方法未触发怎么办?
我在用Flutter的Platform Channel调用Android原生的地理位置权限请求,但发送MethodCall后native端的回调方法完全没反应。已经确认channel名称和方法名都匹配了。
尝试过在Android端打印日志,发现onMethodCall确实收到了Flutter的请求,但调用result.success()或result.error()后,Flutter端既没收到success也没收到error回调。这是什么问题?
Android代码片段:
private final MethodChannel channel = new MethodChannel(registrar.messenger(), "location_channel");
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
if (call.method.equals("requestLocation")) {
// 权限申请逻辑...
result.success("Permission granted"); // 这里执行过但没回调到Flutter
}
}
Flutter调用代码:
await platform.invokeMethod('requestLocation').then((value) { print('收到结果'); });
有没有可能是因为Android的主线程被阻塞了?或者需要特殊处理异步调用?
你在onMethodCall里调了权限请求,通常是异步弹框或者走Activity Result,但你这里直接同步返回success,实际权限还没拿到。正确做法是把Result存成成员变量或者通过回调传递,在真正拿到结果后再回传。
最简单的改法:把Result存起来等回调
Flutter那边没问题,就是.then接结果就行。关键点就一个:Result只能在主线程调一次,而且必须等到真实结果到了再调,不能提前。不然就静默失败,不会报错也不会回调。