Flutter插件本机iOS func句柄未被调用

Posted

技术标签:

【中文标题】Flutter插件本机iOS func句柄未被调用【英文标题】:Flutter plugin native iOS func handle not being called 【发布时间】:2021-09-20 00:20:19 【问题描述】:

所以,我正在 ios 中开发我的第一个颤振插件,但我无法使本地方法工作。

例如,从样板代码中,我有

import 'dart:async';

import 'package:flutter/services.dart';

class MobileFlutter 
  static const MethodChannel _channel =
      const MethodChannel('xyz_client');

// Asking this channel to invoke method get platform version
  static Future<String?> get platformVersion async 
    final String version = await _channel.invokeMethod('getPlatformVersion');
    return version+"d";
  

然后在 iOS 中

SwiftMobileFlutterPlugin.swift我有这个

import Flutter
import UIKit

public class SwiftMobileFlutterPlugin: NSObject, FlutterPlugin 
  public static func register(with registrar: FlutterPluginRegistrar) 
    let channel = FlutterMethodChannel(name: "xyz_client", binaryMessenger: registrar.messenger())
    let instance = SwiftMobileFlutterPlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
  
  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) 
    if ("getPlatformVersion" == call.method) 
        result("iOS " + UIDevice.current.systemVersion)
     

我使用了调试器,但它从来没有达到这一点。

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

Ps:正在调用public static func register(with registrar: FlutterPluginRegistrar)

有人可以帮我调试吗?

【问题讨论】:

【参考方案1】:

咨询this 示例代码,我想区别在于handle 函数应该在SwiftMobileFlutterPlugin 类中。喜欢:

import Flutter
import UIKit

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

  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) 
    if ("getPlatformVersion" == call.method) 
        result("iOS " + UIDevice.current.systemVersion)
     
 

【讨论】:

感谢您的回答。我把它移到课堂上,但它仍然不起作用 您是否使用调试器检查现在是否正在调用handle 我做到了。它没有被调用。 此时,我建议您仔细检查您是否调用了正确的方法等。您的完整代码是否公开托管? 哈哈。愚蠢的我。我实际上尝试了您所说的,但忘记从飞镖端调用该方法。谢谢你调查它兄弟:)

以上是关于Flutter插件本机iOS func句柄未被调用的主要内容,如果未能解决你的问题,请参考以下文章

如何从颤动中正确调用android本机代码(android/IOS)?

func tableview didSelectRowAtIndexPath 未被调用[重复]

如何使用 MethodChannel 从本机平台调用应用程序的 Dart 部分中的方法?

如何手动将 .xcframework 添加到 Flutter iOS 插件?

Flutter 模块可以充当插件/包吗?

来自 iOS 4.0.0 中 Native 的 Cordova 插件 Javascript 函数调用