首页 > 其他分享 >flutter iOS 使用BasicMessageChannel 通信

flutter iOS 使用BasicMessageChannel 通信

时间:2023-12-12 19:00:50浏览次数:31  
标签:return iOS override message messageChannel flutter BasicMessageChannel

flutter代码

// main.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final BasicMessageChannel<String> messageChannel =
  BasicMessageChannel<String>('messageChannel', StringCodec());

  String _message = 'No message from iOS';

  @override
  void initState() {
    super.initState();
    messageChannel.setMessageHandler((message) async {
      print("Received message from iOS: $message");
      setState(() {
        _message = 'iOS Response: $message';
      });
      return 'ACK from Dart';
    });
  }

  Future<void> _sendMessageToiOS() async {
    try {
      final String? result = await messageChannel.send('Hello from Flutter!');
      print("Received response from iOS: $result");
    } on PlatformException catch (e) {
      print("Failed to send message to iOS: ${e.message}");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter - iOS Communication Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '$_message',
              style: TextStyle(fontSize: 16),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _sendMessageToiOS,
              child: Text('Send Message to iOS'),
            ),
          ],
        ),
      ),
    );
  }
}

iOS代码

// AppDelegate.swift
import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        let controller = window?.rootViewController as! FlutterViewController
        let messageChannel = FlutterBasicMessageChannel(
            name: "messageChannel",
            binaryMessenger: controller.binaryMessenger,
            codec: FlutterStringCodec.sharedInstance()
        )

        messageChannel.setMessageHandler { [weak self] (message, reply) in
            guard let strongSelf = self else { return }

            print("Received message from Flutter: \(message ?? "")")
            let response = "Hello from iOS! You said: \(message ?? "")"
            reply(response)
        }

        GeneratedPluginRegistrant.register(with: self)
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }
}

 

标签:return,iOS,override,message,messageChannel,flutter,BasicMessageChannel
From: https://www.cnblogs.com/ZhangShengjie/p/17897614.html

相关文章

  • 苹果ios在线签名ipa应用检测工具,制作实现参考方案
    Hello同学们,我是咕噜签名分发可爱多。今天跟大家分享在线签名详解苹果IPA文件在线反编译、插件注入和重新签名的工具步骤。学习iOS开发是一个复杂而丰富的过程,而产品的开发与修复是一个需要不断进步的领域。这里我给大家提供一个详细的步骤,讲解如何分析苹果IPA文件,在线反编译应用程......
  • 【flutter对抗】blutter使用+ACTF习题
    最新的能很好反编译flutter程序的项目‍1、安装gitclonehttps://github.com/worawit/blutter--depth=1​然后我直接将对应的两个压缩包下载下来(通过浏览器手动下载)不再通过python的代码来下载,之前一直卡在这个地方。如果读者可以正常运行init_env_win.py,手动这一步可以省......
  • 【教程】制作 iOS 推送证书
    ​ 【教程】制作iOS推送证书如需向iOS设备推送数据,您首先需要在消息推送控制台上配置iOS推送证书。iOS推送证书用于推送通知,本文将介绍消息推送服务支持的证书类型,并引导您制作iOS推送证书。证书类型消息推送服务仅支持ApplePushService类型的证书。有关苹果证......
  • 车机 Android 环境下利用 CarAudioService 实现自定义 Java 服务自启动
    注意:本文基于Android11进行分析Qidi2023.11.28(MarkDown&Haroopad)0.简介AndroidRO(ResourceOverlay)机制Overlay实现的效果正如其字面意思,就是“在原有效果的基础上再叠加一些效果”。Android提供了两种实现方式:编译时:https://source.android.com/docs/set......
  • 车机 Android 环境下利用 CarAudioService 实现自定义 Java 服务自启动
    注意:本文基于Android11进行分析Qidi2023.11.28(MarkDown&Haroopad)0.简介AndroidRO(ResourceOverlay)机制Overlay实现的效果正如其字面意思,就是“在原有效果的基础上再叠加一些效果”。Android提供了两种实现方式:编译时:https://source.android.com/docs/set......
  • 车机 Android 环境下利用 CarAudioService 实现自定义 Java 服务自启动
    注意:本文基于Android11进行分析Qidi2023.11.28(MarkDown&Haroopad)0.简介AndroidRO(ResourceOverlay)机制Overlay实现的效果正如其字面意思,就是“在原有效果的基础上再叠加一些效果”。Android提供了两种实现方式:编译时:https://source.android.com/docs/set......
  • App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
    iOS备案查看信息iOS平台BundleID公钥证书SHA-1指纹IOS平台服务器域名获取BundleID:或者https://developer.apple.com/account/resources/identifiers/list获取公钥与签名SHA1值:https://developer.apple.com/account/resources/certificates/list......
  • 真机调试 Flutter 报错:Lookup failed: title in @getters in MyHomePage in package:f
    发生缘由学习Flutter更改lib目录下面的main.dart文件之后真机调试运行flutterrun报错:1#小组件库异常2══╡EXCEPTIONCAUGHTBYWIDGETSLIBRARY╞═══════════════════════════════════════════════════......
  • MDM介绍:4. macOS和iOS下软件安装一触即发
    不管是在工作中还是生活中,只要使用电子产品,都离不开软件。软件一般分为系统软件和应用软件,无论是哪一种软件都避免不了安装、升级、卸载等操作。在企业、学校中,如果内部有100台设备,每台设备有15个软件,平均每个软件每3个月有一个更新,那么每3个月就有1500次更新,如果有500台就有7500次......
  • 通俗易懂的 Axios 拦截器指南:提升前端开发效率的利器
    Axios 提供了一种称为 “拦截器(interceptors)” 的功能,使我们能够在请求或响应被发送或处理之前对它们进行全局处理。拦截器为我们提供了一种简洁而强大的方式来转换请求和响应、进行错误处理、添加认证信息等操作。在本文中,我们将深入探讨如何使用Axios的拦截器,并提供一个实际......