Плагин Flutter родной функционал iOS дескриптор не вызывается

#swift #objective-c #xcode #flutter #dart

Вопрос:

Итак, я разрабатываю свой первый плагин flutter в 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:

Сверяясь с этим примером кода, я полагаю, что разница в том, что 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)
    } 
 }
}
 

Комментарии:

1. Спасибо, что ответили. Я переместил его в класс, но он все еще не работает

2. Вы использовали отладчик, чтобы проверить, вызывается ли handle он сейчас?

3. Я сделал. это не называется.

4. На этом этапе я могу порекомендовать дважды проверить, вызываете ли вы правильные методы и тому подобное. Ваш полный код размещен публично?

5. Хаха. Глупая я. Я действительно попробовал то, что вы сказали, но забыл вызвать этот метод со стороны дротика. Спасибо, что разобрался в этом, братан 🙂