颤振插件:调用iOS和Android方法,包括参数不起作用

颤振插件:调用iOS和Android方法,包括参数不起作用,android,swift,plugins,flutter,invoke,Android,Swift,Plugins,Flutter,Invoke,尝试我的第一个flatter插件,我尝试在iOS和Android世界中调用一个方法。我成功地在没有任何参数的情况下调用了这样一个方法 但是现在我想调用一个有参数的方法 对于iOS,由于某种原因,我无法让它工作。(也许这只是我一直在监督的自动完成的事情,因为VSCode并没有自动完成我的Swift代码)。但也许是别的原因。请在这方面提供帮助 这是我的密码: 我的lib(颤振世界)如下所示: import 'dart:async'; import 'package:flutter/services.

尝试我的第一个flatter插件,我尝试在iOS和Android世界中调用一个方法。我成功地在没有任何参数的情况下调用了这样一个方法

但是现在我想调用一个有参数的方法

对于iOS,由于某种原因,我无法让它工作。(也许这只是我一直在监督的自动完成的事情,因为VSCode并没有自动完成我的Swift代码)。但也许是别的原因。请在这方面提供帮助

这是我的密码:

我的lib(颤振世界)如下所示:

import 'dart:async';
import 'package:flutter/services.dart';

class SomeName {
  static const MethodChannel _channel =
      const MethodChannel('myTestMethod');

  static Future<String> get sendParamsTest async {
    final String version = await _channel.invokeMethod('sendParams',<String, dynamic>{
        'someInfo1': "test123",
        'someInfo2': "hello",
      });
    return version;
  }
}
import Flutter
import UIKit

public class SwiftSomeNamePlugin: NSObject, FlutterPlugin {

  public static func register(with registrar: FlutterPluginRegistrar) {
    let channel = FlutterMethodChannel(name: "myTestMethod", binaryMessenger: registrar.messenger())
    let instance = SwiftSomeNamePlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
  }

  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {

    // flutter cmds dispatched on iOS device :
    if call.method == "sendParams" {

      guard let args = call.arguments else {
        result("iOS could not recognize flutter arguments in method: (sendParams)") 
      }
      String someInfo1 = args["someInfo1"]
      String someInfo2 = args["someInfo2"]
      print(someInfo1)
      print(someInfo2)
      result("Params received on iOS = \(someInfo1), \(someInfo2)")
    } else {
      result("Flutter method not implemented on iOS")
    }
  }
}
错误消息显示:

注意:在类型后添加参数以构造该类型的值
字符串someInfo1=args[“someInfo1”]

注意:在类型后添加参数以构造该类型的值
字符串someInfo2=args[“someInfo2”]

注意:使用“.self”引用类型对象
字符串someInfo1=args[“someInfo1”]

注意:使用“.self”引用类型对象
字符串someInfo2=args[“someInfo2”]

警告:“String.type”类型的表达式未使用
字符串someInfo1=args[“someInfo1”]

警告:“String.type”类型的表达式未使用

字符串someInfo2=args[“someInfo2”]

这看起来像是一个swift语法错误

你想做的事让someInfo1:String=args[“someInfo1”]

在的帮助下,我找到了解决方案

以下是工作代码:

Dart中的颤振世界是正确的:

import 'dart:async';
import 'package:flutter/services.dart';

class SomeName {
  static const MethodChannel _channel =
      const MethodChannel('myTestMethod');

  static Future<String> get sendParamsTest async {
    final String version = await _channel.invokeMethod('sendParams',<String, dynamic>{
        'someInfo1': "test123",
        'someInfo2': 3.22,
      });
    return version;
  }
}

谢谢你,米格尔普瑞沃!当然可以:)。这些天有太多的飞镖、迅捷、爪哇混合体……;)。。。我提出工作版本作为答案。再次感谢你的提示!!没问题,很乐意帮忙。
import Flutter
import UIKit

public class SwiftSomeNamePlugin: NSObject, FlutterPlugin {
  public static func register(with registrar: FlutterPluginRegistrar) {
    let channel = FlutterMethodChannel(name: "myTestMethod", binaryMessenger: registrar.messenger())
    let instance = SwiftSomeNamePlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
  }

  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {

    // flutter cmds dispatched on iOS device :
    if call.method == "sendParams" {

      guard let args = call.arguments else {
        return
      }
      if let myArgs = args as? [String: Any],
         let someInfo1 = myArgs["someInfo1"] as? String,
         let someInfo2 = myArgs["someInfo2"] as? Double {
        result("Params received on iOS = \(someInfo1), \(someInfo2)")
      } else {
        result(FlutterError(code: "-1", message: "iOS could not extract " + 
           "flutter arguments in method: (sendParams)", details: nil))
      } 
    } else if call.method == "getPlatformVersion" {
      result("Running on: iOS " + UIDevice.current.systemVersion)
    } else {
      result(FlutterMethodNotImplemented)
    }
  }
}