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
    }
    
    
}
相关推荐
yuanlaile9 小时前
2026年全新Flutter 跨平台开发全栈学习资料整理
flutter·getx·鸿蒙 next·flutter开发鸿蒙·flutter入门实战·flutter全栈
Anhty14 小时前
2026最新免费手机音频处理工具 !!
android·功能测试·ios·智能手机·音视频
2501_9159090616 小时前
iOS应用从开发到上架App Store的完整发布流程与步骤指南
android·ios·小程序·https·uni-app·webview
初雪云17 小时前
UniApp 云打包拿到 IPA 后,真正的发布工作才刚开始
ios·自动化·编辑器·产品经理·iphone
Lancker19 小时前
没有 Mac 也能上架 iOS:GitHub Actions 全自动构建 + 签名 + TestFlight 送审实录
macos·ios·github
茶底世界之下19 小时前
晚霞要多暖?用 Awaking 只改色温做一次取舍
ios
恋猫de小郭20 小时前
Genkit Dart 1.0 发布,Flutter 原生的 AI Agent 终于完整了
android·前端·flutter
第10086个小白20 小时前
flutter桌面端打包方式(Inno Setup Compiler)版本
前端·flutter
酒神dnspup21 小时前
多地区网站可用性监控怎么做?DNSPup 从基线到告警的完整实战
运维·ios·云计算·iphone·dns·网络监控
福兮说1 天前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic