国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flutter iOS 與 flutter 相互通信

這篇具有很好參考價(jià)值的文章主要介紹了Flutter iOS 與 flutter 相互通信。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在混合開發(fā)中避免不了通信,簡(jiǎn)單記錄一下,F(xiàn)lutter iOS工程與Flutter 之間相互通信。
Flutter中通過Platform Channel實(shí)現(xiàn)Flutter和原生端的數(shù)據(jù)傳遞,是怎么進(jìn)行數(shù)據(jù)通信,以及怎么配置,下面一一進(jìn)行詳解。

  1. 通過Platform channel 將傳遞的數(shù)據(jù)以發(fā)送消息的形式。
  2. 跨線程發(fā)送到iOS端和Android 原生端收到Platform
    Channel傳遞過來的消息后,進(jìn)行相應(yīng)處理 。
    原生端處理完畢,將結(jié)果以同樣的方式原路返回給應(yīng)用對(duì)應(yīng)的Flutter部分。

FlutterMethodChannel 使用
注:iOS 端簡(jiǎn)單設(shè)置

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 注冊(cè)Flutter 引擎的地方使用

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

上述就把iOS端,使用FlutterMethodChannel簡(jiǎn)單進(jìn)行通信集成完畢。

  • 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
    這里使用了一個(gè)類進(jìn)行統(tǒng)一管理 通信類
import 'package:my_flutter/common_channel.dart';

import 'navigation_channel.dart';

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

// 注冊(cè) Channel
  static final navigation = NavigationChannel();
  static final common = CommonChannel();
}

在Flutter使用的地方進(jìn)行調(diào)用

Channels.navigation.finishHostPage();

上述完成,flutter就可以調(diào)用原生里面注冊(cè)的pop方法了。文章來源地址http://www.zghlxwxcb.cn/news/detail-636181.html

到了這里,關(guān)于Flutter iOS 與 flutter 相互通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Flutter iOS 集成使用 flutter boost

    Flutter iOS 集成使用 flutter boost

    在 Flutter項(xiàng)目中集成完 flutter boost,并且已經(jīng)使用了 flutter boost進(jìn)行了路由管理,這時(shí)如果需要和iOS混合開發(fā),這時(shí)就要到 原生端進(jìn)行集成。 注意:之前建的項(xiàng)目必須是 Flutter module 項(xiàng)目,并且原生項(xiàng)目和flutter module項(xiàng)目在同一個(gè)文件夾下面 下面是原生端集成 flutter boost的步驟

    2024年02月13日
    瀏覽(52)
  • Flutter iOS上架指南

    Flutter iOS上架指南

    本文探討了使用Flutter開發(fā)的iOS應(yīng)用能否上架,以及上架的具體流程。蘋果提供了App Store作為正式上架渠道,同時(shí)也有TestFlight供開發(fā)者進(jìn)行內(nèi)測(cè)。合規(guī)并通過審核后,F(xiàn)lutter應(yīng)用可以順利上架。但上架過程可能存在一些挑戰(zhàn),因此可能需要專業(yè)技術(shù)人員或上架服務(wù)商的協(xié)助。

    2024年04月10日
    瀏覽(22)
  • Flutter打包iOS

    Flutter打包iOS

    1.使用Xcode打開flutter項(xiàng)目 雙擊這個(gè)文件 2、確認(rèn)項(xiàng)目Bundle ID和開發(fā)者網(wǎng)站一致 參考鏈接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日
    瀏覽(26)
  • flutter 打包iOS安裝包

    flutter 打包iOS安裝包

    flutter iOS Xcode打包并導(dǎo)出ipa文件安裝包 1、 Xcode配置 1、 啟動(dòng)打包 1、 等待打包 1、 打包完成、準(zhǔn)備導(dǎo)出ipa 1、 選擇模式 1、 選擇配置文件 1、 導(dǎo)出 1、 選擇導(dǎo)出位置 1、 得到ipa podfile文件如下 原來是這樣子的,刪掉了一部分代碼

    2024年02月15日
    瀏覽(25)
  • flutter ios 運(yùn)行報(bào)錯(cuò)

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

    2024年04月13日
    瀏覽(22)
  • Flutter - 搭建引擎調(diào)試環(huán)境(iOS)

    Flutter - 搭建引擎調(diào)試環(huán)境(iOS)

    剛開始學(xué)Flutter開發(fā)時(shí)搭建過,沒有記錄?,F(xiàn)在有需要時(shí)又忘了,果然好記性不如爛筆頭。 注意,調(diào)試環(huán)境搭建會(huì)占用較大硬盤空間。粗略統(tǒng)計(jì),F(xiàn)lutter引擎項(xiàng)目(包含依賴的第三方庫)約20GB, host_debug_unopt 構(gòu)建編譯后約16GB, ios_debug_xxx 構(gòu)建編譯后約5GB。所以如果想搭建成功

    2024年02月05日
    瀏覽(28)
  • flutter 打包IOS及常用配置

    flutter 打包IOS及常用配置

    項(xiàng)目名字配置是在 ios/Runner/Info.plist 文件中的 dict 下的 CFBundleName testapp 。如下圖所示: String里面就可以修改名稱 iOS 項(xiàng)目 Logo的配置是在 ios/Runner/Assets.xcassets/AppIcon.appiconset 文件下,直接更換圖片,名字不要改動(dòng) 。 XCODE打開IOS文件夾下的項(xiàng)目,打開Runner.xcworkspace 在ios 工程中配

    2024年01月25日
    瀏覽(22)
  • Flutter 筆記 | Flutter 文件IO、網(wǎng)絡(luò)請(qǐng)求、JSON、日期與國際化

    Dart的 IO 庫包含了文件讀寫的相關(guān)類,它屬于 Dart 語法標(biāo)準(zhǔn)的一部分,所以通過 Dart IO 庫,無論是 Dart VM 下的腳本還是 Flutter,都是通過 Dart IO 庫來操作文件的,不過和 Dart VM 相比,F(xiàn)lutter 有一個(gè)重要差異是文件系統(tǒng)路徑不同,這是因?yàn)?Dart VM 是運(yùn)行在 PC 或服務(wù)器操作系統(tǒng)下,

    2024年02月07日
    瀏覽(21)
  • Flutter 與原生交互(Android,iOS)

    本質(zhì)上 Flutter 和 原生通信是通過 Channel 來完成的:Flutter中消息的傳遞是完全異步的; 消息使用 Channel(平臺(tái)通道) 在客戶端(UI) 和主機(jī)(p平臺(tái)) Flutter 與 native端交互三種方式 1.BasicMessageChannel (用于傳遞字符串和半結(jié)構(gòu)化信息,持續(xù)通信使用,例如dart端將服務(wù)器的數(shù)據(jù)陸續(xù)傳入到

    2024年02月17日
    瀏覽(42)
  • xcode 設(shè)置 ios蘋果圖標(biāo),為Flutter應(yīng)用程序配置iOS圖標(biāo)

    xcode 設(shè)置 ios蘋果圖標(biāo),為Flutter應(yīng)用程序配置iOS圖標(biāo)

    工具網(wǎng)址:https://icon.wuruihong.com/ 下載之后文件目錄如下 拷貝到項(xiàng)目的iosRunnerAssets.xcassetsAppIcon.appiconset目錄下,如下圖

    2024年01月23日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包