gpt4 book ai didi

swift - 如何在 swift setMethodCallHandler - self?.methodName(结果 : result)

转载 作者:IT王子 更新时间:2023-10-29 06:55:40 26 4
gpt4 key购买 nike

我正在尝试通过方法 channel 将 Flutter 中的 onPressed 函数中的参数发送到 Swift,并将这些参数作为参数传递给被调用的 Swift 方法。

我的任务是创建一个调用用 Swift 编写的 Controller 的 Flutter UI。我在这里看到了使用 Flutter 中的 platform.invokeMethod 发送的参数的示例,但它们没有在 setMethodCallHandler 方法内的方法调用中使用这些参数 swift 的一面。如果 call.method 与我发送的内容匹配,我不知道如何将这些参数包含在我要调用的方法中。

1.main.dart中的按钮组件:

    RaisedButton(
child: Text('Get a Number'),
onPressed: () => _getNumber(6, 2),
)

2。 main.dart 中的异步 Flutter 函数:

    Future<void> _getNumber(int number, int times) async {
String numberText;
try {
final int result = await platform.invokeMethod('multiply', <String, dynamic>{
"number": number,
"times": times
});
numberText = "Your number is $result .";
} on PlatformException catch (e) {
numberText = "Failed to get a number: '${e.message}'.";
}

setState(() {
_numberText = numberText;
});}

3。我在 appDelegate.swift 中的方法调用处理程序:

    let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
let customChannel = FlutterMethodChannel(name: "samples.flutter.dev",
binaryMessenger: controller)
customChannel.setMethodCallHandler({
[weak self] (call: FlutterMethodCall, result: FlutterResult) -> Void in

switch call.method {
case "getBatteryLevel":
self?.receiveBatteryLevel(result: result)
case "multiply":
self?.multiply(result: result)
default:
result(FlutterMethodNotImplemented)
}

4.我处理这个特定乘法的私有(private)函数:

    private func multiply(result: FlutterResult) {
// here I want to access the "number" and "times"
// arguments that I passed in from Flutter
result(Int(number * times))
}

由于我对 swift 和 dart 还很陌生,所以我正在努力弄清楚如何导航/利用 result: FlutterResult。如何更改该参数或访问其属性以使用我传递给 Flutter 中的 onPressed 函数的 numbertimes 参数?

最佳答案

将您的multiply 方法更改为这样开始 - 将call 传入:

private func multiply(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
if let args = call.arguments as? Dictionary<String, Any>,
let number = args["number"] as? Int,
let times = args["times"] as? Int {
// use number and times as required, for example....
result(number * times) // or your syntax
} else {
result(FlutterError.init(code: "bad args", message: nil, details: nil))
}

关于swift - 如何在 swift setMethodCallHandler - self?.methodName(结果 : result),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57664458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com