From 8724284259f6ad3672f7d97b7bf5734dc0b38709 Mon Sep 17 00:00:00 2001 From: "chenghuai.dtc" Date: Fri, 7 May 2021 20:46:22 +0800 Subject: [PATCH] fix: fix kraken.methodChannel.setMethodCallHandler did't get called before kraken.invokeMethod called. --- kraken/lib/src/launcher/controller.dart | 2 ++ kraken/lib/src/module/method_channel.dart | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/kraken/lib/src/launcher/controller.dart b/kraken/lib/src/launcher/controller.dart index 37b0510ec1..0613a55be2 100644 --- a/kraken/lib/src/launcher/controller.dart +++ b/kraken/lib/src/launcher/controller.dart @@ -471,6 +471,8 @@ class KrakenController { } _methodChannel = methodChannel; + setJSMethodCallCallback(this); + _view = KrakenViewController(viewportWidth, viewportHeight, background: background, showPerformanceOverlay: showPerformanceOverlay, diff --git a/kraken/lib/src/module/method_channel.dart b/kraken/lib/src/module/method_channel.dart index 7d4137158a..ad8db2272c 100644 --- a/kraken/lib/src/module/method_channel.dart +++ b/kraken/lib/src/module/method_channel.dart @@ -15,15 +15,12 @@ Future _invokeMethodFromJavaScript(KrakenController controller, String return controller.methodChannel._invokeMethodFromJavaScript(method, args); } +const METHOD_CHANNEL_NAME = 'MethodChannel'; + class MethodChannelModule extends BaseModule { @override - String get name => 'MethodChannel'; - MethodChannelModule(ModuleManager moduleManager) : super(moduleManager) { - if (moduleManager == null) return; - moduleManager.controller.methodChannel._onJSMethodCall = (String method, dynamic arguments) async { - moduleManager.emitModuleEvent(name, data: [method, arguments]); - }; - } + String get name => METHOD_CHANNEL_NAME; + MethodChannelModule(ModuleManager moduleManager) : super(moduleManager); @override void dispose() {} @@ -41,6 +38,14 @@ class MethodChannelModule extends BaseModule { } } +void setJSMethodCallCallback(KrakenController controller) { + if (controller.methodChannel == null) return; + + controller.methodChannel._onJSMethodCall = (String method, dynamic arguments) async { + controller.module.moduleManager.emitModuleEvent(METHOD_CHANNEL_NAME, data: [method, arguments]); + }; +} + class KrakenMethodChannel { MethodCallCallback _onJSMethodCallCallback;