Flutter 调用原生IOS接口

直接上代码有注释

服务类

dart 复制代码
import 'package:flutter/services.dart';

class TNativeChannel{
  static const methChanal = MethodChannel("flutter_native");
  static const eventChanal = EventChannel("flutter_native_event");

  //获取ios版本信息
  static Future<String?> getPlatformVersion()async{
    try{
      final String? version = await methChanal.invokeMethod("getPlatformVersion");
      return version;
    }on PlatformException catch (e){
      return "获取失败 ${e.message}";
    }
  }

  static Future<String?> greet(String name)async{
    final String? response = await methChanal.invokeMethod("greet",{'name':name});
    return response;
  }


 static void listenToEvent(){
    eventChanal.receiveBroadcastStream().listen((event){
      print("iOS 发送过来的事件 $event");
    });
 }
}

测试代码块

dart 复制代码
Widget createWidget(){
    return ListView(
      children: [
        ElevatedButton(onPressed: (){
          TNativeChannel.listenToEvent();
        },  child: Text("测试openNativeView")),

        FutureBuilder(future: TNativeChannel.getPlatformVersion(), builder: (context,snop){
          return Text(snop.data ?? "加载中");
        }),
      ],
    );
  }

ios 端代码 Appdelegate

dart 复制代码
import Flutter
import UIKit

@main
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
      setUpFlutter1()
      setFlutter2()
      setEventChannel()
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
    
    
    func setUpFlutter1(){
        let flutterVc = window.rootViewController as! FlutterViewController
        //通道名称必须和flutter端定义的一致
        let channel = FlutterMethodChannel(name: "flutter_native", binaryMessenger: flutterVc.binaryMessenger)
        //监听方法
        channel.setMethodCallHandler { call, result in
            if call.method == "getPlatformVersion"{
                let version = UIDevice.current.systemVersion
                result("iOS \(version)")
            }else{
                result(FlutterMethodNotImplemented)
            }
        
        }
    }
    
    //带参数的调用
    func setFlutter2(){
        guard let fluttervc = window.rootViewController as? FlutterViewController else{return}
        let channel = FlutterMethodChannel(name: "flutter_native", binaryMessenger: fluttervc.binaryMessenger);
        channel.setMethodCallHandler { call, result in
            if call.method == "greet"{
                let args = call.arguments as? [String:Any]
                let name = args?["name"] as? String ?? "Unknown"
                result("Hello \(name) from iOS")
            }else{
                result(FlutterMethodNotImplemented)
            }
        }
        
    }
    
    
    func setEventChannel(){
        let flutterVc = window.rootViewController as! FlutterViewController
        let eventChannal = FlutterEventChannel(name: "flutter_native_event", binaryMessenger: flutterVc.binaryMessenger);
        let handler = FEventStreamHandler()
        eventChannal.setStreamHandler(handler)
    }
}


class FEventStreamHandler:NSObject,FlutterStreamHandler{
    var eventSink:FlutterEventSink?
    func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
        self.eventSink = events
        
        //发送测试数据
        DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
            self.eventSink?("NFC 扫描成功");
        }
        
        return nil
    }
    
    func onCancel(withArguments arguments: Any?) -> FlutterError? {
        eventSink = nil
        return nil
    }
    
    
}
相关推荐
liulian091610 小时前
Flutter for OpenHarmony 跨平台开发:单位转换功能实战指南
flutter
千码君201611 小时前
Trae:一些关于flutter和 go前后端开发构建的分享
android·flutter·gradle·android-studio·trae·vibe code
maaath12 小时前
【maaath】Flutter for OpenHarmony 手表配饰应用实战开发
flutter·华为·harmonyos
maaath13 小时前
【maaath】Flutter for OpenHarmony 跨平台计算器应用开发实践
flutter·华为·harmonyos
空中海16 小时前
iOS 动态分析、抓包与 Frida Hook
ios·职场和发展·蓝桥杯
maaath18 小时前
【maaath】Flutter for OpenHarmony 闹钟时钟应用开发实战
flutter·华为·harmonyos
maaath19 小时前
【maaath】Flutter for OpenHarmony 短信管理应用实战
flutter·华为·harmonyos
空中海19 小时前
iOS 静态逆向、IPA 结构与 Mach-O 分析
ios·华为·harmonyos
Mr -老鬼19 小时前
EasyClick 双端自动化智能体|Android&iOS 全平台 EC 脚本开发助手
android·ios·自动化·易点云测·#easyclick·#ios自动化
maaath19 小时前
【maaath】Flutter for OpenHarmony打造跨平台便签备忘录应用
flutter·华为·harmonyos