Flutter iOS 与 flutter 相互通信

这篇具有很好参考价值的文章主要介绍了Flutter iOS 与 flutter 相互通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在混合开发中避免不了通信,简单记录一下,Flutter iOS工程与Flutter 之间相互通信。
Flutter中通过Platform Channel实现Flutter和原生端的数据传递,是怎么进行数据通信,以及怎么配置,下面一一进行详解。

  1. 通过Platform channel 将传递的数据以发送消息的形式。
  2. 跨线程发送到iOS端和Android 原生端收到Platform
    Channel传递过来的消息后,进行相应处理 。
    原生端处理完毕,将结果以同样的方式原路返回给应用对应的Flutter部分。

FlutterMethodChannel 使用
注:iOS 端简单设置

class HYFlutterNavChannel: NSObject {
    
     public static let share = HYFlutterNavChannel()
    // 声明 FlutterMethodChannel
    var channel: FlutterMethodChannel
    // 
    lazy var map: [String: (_ call: FlutterMethodCall, _ result: FlutterResult) -> Void] = {
        return [
            "pop":pop,
        ]
    }()
    
    
    override init() {
        // name 一定需要和  flutter里面约定好,保持一致
        channel = FlutterMethodChannel.init(name: "Flutter/navigation", binaryMessenger: FlutterBoost.instance().engine().binaryMessenger)
        
        super.init()
        
        channel.setMethodCallHandler {[weak self] (call, reslt) in
            let method = self?.map[call.method]
            method?(call, reslt)
        }
        
    }
    
     public static func start() {
        _ = HYFlutterNavChannel.share
    }
    
    
    // pop
    func pop(call: FlutterMethodCall, result: FlutterResult)  {
        UINavigationController.topNavigationController()?.navigationController?.popViewController(animated: true)
    }
    
}

在iOS 注册Flutter 引擎的地方使用

// 案例是放到 AppDelegate中
[FlutterBoost.instance setup:application delegate:delegate callback:^(FlutterEngine *engine) {
        NSLog(@"FlutterBoost 开始操作");
        // 使用 MethodChannel
        [HYFlutterNavChannel start];
        [HYFlutterCommonChannel start];
    }];

上述就把iOS端,使用FlutterMethodChannel简单进行通信集成完毕。

  • Flutter 端 MethodChannel 集成与使用
import 'dart:collection';

import 'package:flutter/services.dart';

class NavigationChannel {
  // 这里需要和原生保存一致  "Flutter/navigation"
  // ignore: constant_identifier_names
  static const MethodChannel channel_navigation =
      MethodChannel("Flutter/navigation");

  // ignore: non_constant_identifier_names
  static final channel_navigation_handlers =
      HashMap<String, MethodCallHandler>();

  NavigationChannel() {
    init();
  }

  void init() {
    channel_navigation_handlers["nativeQuitFlutter"] = nativeQuitFlutter;
    channel_navigation.setMethodCallHandler((call) async {
      channel_navigation_handlers[call.method]?.call(call);
    });
  }

  //  native 提供的功能方法

  Future<void> finishHostPage() async {
    return channel_navigation.invokeMethod("pop");
  }

  Future<void> nativeQuitFlutter(MethodCall call) async {}

// -------------flutter提供的功能-----------------
  void registerInitRoute(MethodCallHandler handler) {
    channel_navigation_handlers["initRoute"] = handler;
  }
}

typedef MethodCallHandler = Future<dynamic> Function(MethodCall call)?;

以上 Flutter MethodChannel 集成完毕

  • Flutter 使用MethodChannel
    这里使用了一个类进行统一管理 通信类
import 'package:my_flutter/common_channel.dart';

import 'navigation_channel.dart';

class Channels {
  // ignore: empty_constructor_bodies
  Channels._() {}

// 注册 Channel
  static final navigation = NavigationChannel();
  static final common = CommonChannel();
}

在Flutter使用的地方进行调用

Channels.navigation.finishHostPage();

上述完成,flutter就可以调用原生里面注册的pop方法了。文章来源地址https://www.toymoban.com/news/detail-636181.html

到了这里,关于Flutter iOS 与 flutter 相互通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter:Android/iOS集成Flutter模块

    一、Android工程集成Flutter模块工程: 1.使用命令创建Flutter模块工程lib_flutter(与Android工程属于同级目录): 2.更新Android工程配置: (1)将Android工程Support V4/V7包替换为AndroidX包,右键点击工程,在弹出菜单中选择 Refactor   Migrate to AndroidX...,然后在左下角弹出的框中,点击Do Refac

    2024年02月06日
    浏览(41)
  • Flutter打包iOS

    1.使用Xcode打开flutter项目 双击这个文件 2、确认项目Bundle ID和开发者网站一致 参考链接https://blog.csdn.net/qq_34010941/article/details/113771702 IOS证书配置 https://blog.csdn.net/qq_34010941/article/details/113770509 解决iOS 证书不受信任的问题 https://blog.csdn.net/constant_rain/article/details/122314877 参考 htt

    2023年04月15日
    浏览(47)
  • Flutter iOS上架指南

    本文探讨了使用Flutter开发的iOS应用能否上架,以及上架的具体流程。苹果提供了App Store作为正式上架渠道,同时也有TestFlight供开发者进行内测。合规并通过审核后,Flutter应用可以顺利上架。但上架过程可能存在一些挑战,因此可能需要专业技术人员或上架服务商的协助。

    2024年04月10日
    浏览(47)
  • flutter 打包iOS安装包

    flutter iOS Xcode打包并导出ipa文件安装包 1、 Xcode配置 1、 启动打包 1、 等待打包 1、 打包完成、准备导出ipa 1、 选择模式 1、 选择配置文件 1、 导出 1、 选择导出位置 1、 得到ipa podfile文件如下 原来是这样子的,删掉了一部分代码

    2024年02月15日
    浏览(40)
  • flutter ios 运行报错

    解决方式 cd /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/ 在git上下载arc文件 解压之后,放在步骤2的地址里面就可以了

    2024年04月13日
    浏览(55)
  • flutter 打包IOS及常用配置

    项目名字配置是在 ios/Runner/Info.plist 文件中的 dict 下的 CFBundleName testapp 。如下图所示: String里面就可以修改名称 iOS 项目 Logo的配置是在 ios/Runner/Assets.xcassets/AppIcon.appiconset 文件下,直接更换图片,名字不要改动 。 XCODE打开IOS文件夹下的项目,打开Runner.xcworkspace 在ios 工程中配

    2024年01月25日
    浏览(38)
  • Flutter - 搭建引擎调试环境(iOS)

    刚开始学Flutter开发时搭建过,没有记录。现在有需要时又忘了,果然好记性不如烂笔头。 注意,调试环境搭建会占用较大硬盘空间。粗略统计,Flutter引擎项目(包含依赖的第三方库)约20GB, host_debug_unopt 构建编译后约16GB, ios_debug_xxx 构建编译后约5GB。所以如果想搭建成功

    2024年02月05日
    浏览(54)
  • Flutter 笔记 | Flutter 文件IO、网络请求、JSON、日期与国际化

    Dart的 IO 库包含了文件读写的相关类,它属于 Dart 语法标准的一部分,所以通过 Dart IO 库,无论是 Dart VM 下的脚本还是 Flutter,都是通过 Dart IO 库来操作文件的,不过和 Dart VM 相比,Flutter 有一个重要差异是文件系统路径不同,这是因为 Dart VM 是运行在 PC 或服务器操作系统下,

    2024年02月07日
    浏览(100)
  • Flutter 与原生交互(Android,iOS)

    本质上 Flutter 和 原生通信是通过 Channel 来完成的:Flutter中消息的传递是完全异步的; 消息使用 Channel(平台通道) 在客户端(UI) 和主机(p平台) Flutter 与 native端交互三种方式 1.BasicMessageChannel (用于传递字符串和半结构化信息,持续通信使用,例如dart端将服务器的数据陆续传入到

    2024年02月17日
    浏览(49)
  • xcode 设置 ios苹果图标,为Flutter应用程序配置iOS图标

    工具网址:https://icon.wuruihong.com/ 下载之后文件目录如下 拷贝到项目的iosRunnerAssets.xcassetsAppIcon.appiconset目录下,如下图

    2024年01月23日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包