Flutter setMethodCallHandler 不调用其参数

Muh*_*mad 5 android flutter flutter-method-channel

我正在尝试从本机 Android 打开颤动屏幕

所以我尝试使用 MethodChannel 将数据返回到 dart,然后调用将我导航到当前屏幕的方法

但我的代码不起作用

这是我的代码

@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
    super.configureFlutterEngine(flutterEngine);
    String channelName = "app_channel";
    MethodChannel methodChannel = new MethodChannel(flutterEngine.getDartExecutor(), channelName);

    methodChannel.invokeMethod("openCaller", false, new MethodChannel.Result() {
        @Override
        public void success(@Nullable Object result) {
            Log.i("fromInvoke","success" + result.toString());
        }

        @Override
        public void error(String errorCode, @Nullable String errorMessage, @Nullable Object errorDetails) {
            Log.i("fromInvoke","failed" + errorMessage);

        }

        @Override
        public void notImplemented() {
            Log.i("fromInvoke","not implemented");

        }
    });
}
Run Code Online (Sandbox Code Playgroud)

}

  static const platform =
      const MethodChannel('app_channel');

  @override
  void initState() {
    super.initState();
    platform.setMethodCallHandler(invokedMethods);

  }
Run Code Online (Sandbox Code Playgroud)

这是一个全局函数

 Future<dynamic> invokedMethods(MethodCall methodCall) async {
    switch (methodCall.method) {
        case "openCaller":
          print("arrived to open caller");
          // Navigator.pushNamed(context, "/ring");
          
      }
  }
Run Code Online (Sandbox Code Playgroud)

Oma*_*att 0

该方法methodChannel.invokeMethod("openCaller", ...)似乎不会在您提供的代码片段上触发,它仅在configureFlutterEngine. 您需要从 Android 调用该方法来调用您在 Flutter 应用程序中配置的函数。查看这篇文章,该文章更详细地介绍了该主题并提供了示例代码。