#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. Хаха. Глупая я. Я действительно попробовал то, что вы сказали, но забыл вызвать этот метод со стороны дротика. Спасибо, что разобрался в этом, братан 🙂