在现有iOS项目中,接入新的Flutter项目或现有的Flutter项目

news2024/11/24 9:45:05

文章参考自Flutter官网:进入Flutter官网

目录

一、背景

二、在现有iOS项目中,接入新的Flutter工程

1、创建新的Flutter工程

2、将iOS工程与Flutter工程进行关联

三、在现有iOS项目中,接入现有的Flutter工程

1、修改Flutter工程中的pubspec.yaml

2、将iOS工程与Flutter工程进行关联


一、背景

根据Flutter官网给的方式,将Flutter接入现有的iOS工程中,提供了三种方案

第一种:通过在Podfile文件中指定Flutter工程目录的方式。这种方式相对在已经开发中的iOS项目比较友好,改动较小,而且可以实现在Flutter编码后,直接运行原生工程就可以看到效果。

第二种:将Flutter工程打包为插件,供原生工程引入,这种方式可以做到原生工程与Flutter工程分离,但是对于调试较麻烦,需要每次更新Flutter工程后,都要打包成插件,再替换到原生工程的原依赖插件。

第三种:使用 CocoaPods 在 Xcode 和 Flutter 工程中内嵌应用和插件框架,这种方式也就是使用Android Studio开发工具创建新的Flutter工程时默认的方案,新的Flutter工程创建好后,默认会创建iOS和Android的原生工程,在原生工程内,会有Flutter内嵌进去的包体,这种方案对于已经在开发中的原生工程进行对接较麻烦。

二、在现有iOS项目中,接入新的Flutter工程

1、创建新的Flutter工程

//创建一个名字为my_flutter的Flutter工程
flutter create --template module my_flutter

创建好后的my_flutter工程目录如下:

其中.ios和.android为隐藏文件,文件中的内容为flutter编译相应平台的缓存代码,删掉后会再下次编译时重新生成。

重要:在my_flutter工程中的pubspec.yaml文件中,最下方会有一个module属性的配置。该配置决定了Flutter使用哪种方式与原生工程进行关联,配置了下图中的module属性以及androidPackage和iosBundleIdentifier的包名,.ios和.android目录才会自动生成,不配置的话,Flutter则会采用第三种方案进行编译,即:在Flutter工程内编译android和ios文件夹内的代码,而不是.android或.ios文件内的代码。

#注意不要顶格写  
  module:
    androidX: true
    androidPackage: 填写android工程的包名
    iosBundleIdentifier: 填写iOS工程的包名

2、将iOS工程与Flutter工程进行关联

  • 打开iOS工程中的Podfile文件,在文件中配置Flutter目录,以上面的my_flutter举例,假设my_flutter与iOS工程目录为同一根目录下,则配置如下:
flutter_application_path = '../my_flutter'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')
  • 在每个需要集成 Flutter 的 Podfile target节点下,加入如下代码:
target 'my_flutter' do
  install_all_flutter_pods(flutter_application_path)
end
  • 在 Podfile 文件的 post_install 部分,添加如下代码:
post_install do |installer|
  flutter_post_install(installer) if defined?(flutter_post_install)
end
  • 在my_flutter目录下,执行同步命令:
 flutter pub get
  • 然后再在iOS原生工程内执行远程库的安装:
pod install

添加完以上代码,表示着iOS原生工程已经与新创建的my_futter项目进行了关联,Flutter项目中的每次编码,都可以直接在iOS原生工程中运行显示。

三、在现有iOS项目中,接入现有的Flutter工程

1、修改Flutter工程中的pubspec.yaml

使用这种方式只需要修改Flutter工程中的pubspec.yaml文件即可,打开pubspec.yaml文件,在最后添加以下:

#注意不要顶格写  
  module:
    androidX: true
    androidPackage: 填写android工程的包名
    iosBundleIdentifier: 填写iOS工程的包名

之后编译Flutter项目,会在Flutter工程下生成 .ios 文件夹,该 .ios 为隐藏文件。

2、将iOS工程与Flutter工程进行关联

该步骤与上面的【二、在现有iOS项目中,接入新的Flutter工程】——【2、将iOS工程与Flutter工程进行关联】步骤一致,参考上面的步骤即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何提高程序员的代码质量?

作为一名程序员,我们需要不断学习、探索新的技术,以便编写出高质量、可维护、安全且高效的代码。但是,即使是经验丰富的程序员也容易遇到一些技术陷阱,这些陷阱可能会导致运行时错误、性能问题或安全漏洞。下面是一些程序员绝对不…

DSOL:一种快速的直接稀疏里程计方案

文章:DSOL: A Fast Direct Sparse Odometry Scheme 作者:Chao Qu, Shreyas S. Shivakumar, Ian D. Miller and Camillo J. Taylor 编辑:点云PCL 代码:https://github.com/versatran01/dsol.git 来源:arXiv2022 欢迎各位…

Elastic 发布 Elasticsearch Relevance Engine™ — 为 AI 革命提供高级搜索能力

作者:Matt Riley 今天我们将向大家介绍 Elasticsearch Relevance Engine™(ESRE™),这是一种创建高度相关的 AI 搜索应用程序的新功能。ESRE 建立在 Elastic 在搜索领域的领导地位以及超过两年的机器学习研究和开发基础之上。Elas…

Java agent入门及demo示例(附源码)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 背景 继之前我们研究了下skywalking是什么以及skywalking如何监控skywalking 我们并没有探讨过多的skywalking原理 实际上skywalking的实现原理就是java的agent…

Android 12系统源码_窗口管理(一)WindowManagerService的启动流程

前言 WindowManagerService是Android系统中重要的服务,它是WindowManager的管理者,WindowManagerService无论对于应用开发还是Framework开发都是重要的知识点,究其原因是因为WindowManagerService有很多职责,每个职责都会涉及重要…

RabbitMQ发送方确认机制

1、前言 RabbitMQ消息首先发送到交换机,然后通过路由键【routingKey】和【bindingKey】比较从而将消息发送到对应的队列【queue】上。在这个过程有两个地方消息可能会丢失: 消息发送到交换机的过程。消息从交换机发送到队列的过程。 而RabbitMQ提供了…

中国移动董宁:深耕区块链的第八年,我仍期待挑战丨对话MVP

区块链技术对于多数人来说还是“新鲜”的代名词时,董宁已经成为这项技术的老朋友。 董宁2015年进入区块链领域,现任中国移动研究院技术总监、区块链首席专家。作为“老友”,董宁见证了区块链技术多个爆发式增长和平稳发展的阶段,…

基于STC8G1K08A的水压检测系统

基于STC8G1K08A的水压检测系统 前言先来一饱眼福设计和硬件的选型压力传感器选择单片机的选择WIFI透传模块选择 核心代码的开发STC8G1K08A单片机代码读取水压传感器的电压计算对应电压水的压力值猪场水压正常、漏水、喝光水提醒功能的实现 数据通过ESP8266上报到云端代码的实现…

低功耗定时器(LPTIMER)

概述 LPTIM 是运行在Always-On 电源域下的16bits 低功耗定时/计数器模块。通过选择合适的工作时钟,LPTIM 在在各种低功耗模式下保持运行,并且只消耗很低的功耗。LPTIM 甚至可以在没有内部时钟的条件下工作,因此可实现休眠模式下的外部脉冲计数…

新手怎么玩转Linux

Linux是一个非常强大、灵活和可定制的操作系统,这使得它成为了程序员的首选操作系统之一。程序员喜欢使用Linux的原因有以下几点:开源、稳定性、安全性、命令行界面、社区支持。那么新手改如何玩转Linux呢?跟着我一起来看看吧。 以下是对新…

Meta 开源语音 AI 模型支持 1,100 多种语言

自从ChatGPT火爆以来,各种通用的大型模型层出不穷,GPT4、SAM等等,本周一Meta 又开源了新的语音模型MMS,这个模型号称支持4000多种语言,并且发布了支持1100种语言的预训练模型权重,最主要的是这个模型不仅支…

行业报告 | 2022文化科技十大前沿应用趋势(上)

文 | BFT机器人 前言 Introduction 文化科技是文化科技融合过程中诞生的系列新技术成果,是文化强国和科技强国两大战略的交又领域。2012 年 8月,科技部会同中宣部、财政部、文化部、广电总局、新闻出版总署发布《文化科技创新工程纲要》,开启…

为何AI无法完全理解人类情感?GPT-4能否理解人类的情绪?

在科幻小说和电影里,我们经常看到超级AI人工智能机器人可以理解、感知甚至模拟人类的情感,但在现实世界中,我们距离这个目标还有一段相当长的距离,即使是强大的GPT-4甚至未来的GPT-5。过高夸大AI的体验和性能,往往并不…

gin框架返回json

一、使用gin web框架开发的两种模式: 前端浏览器去请求服务器,服务器把完整的HTML文件的内容返回给前端浏览器Vue、reactor等前端框架都自己提前定义好模板,后端(服务器)只需要返回JSON格式的数据给前端框架即可&…

如何在MyEclipse中使用JavaScript编写代码?

MyEclipse v2022.1.0正式版下载 JavaScript 项目 在 MyEclipse 2021 及更高版本中,JavaScript 支持对大多数 JavaScript 源代码都是开箱即用的——不需要特殊的 JavaScript Eclipse 项目或 JavaScript facet。但是,我们建议使用jsconfig.json文件来指定…

SAP 物料主数据基本数据1视图 参数有效值 字段的作用测试 <转载>

原文链接:https://blog.csdn.net/weixin_40672823/article/details/104773643 1.在物料主数据基本数据1视图中有个字段 参数有效值 如下图 有什么用途? 这个字段作用主要用在 BOM里面,官方说明如下 看说明很难理解下面通过一个业务实例来说明 业务要…

HOOPS平台助力Xometry数字化转型:即时报价产品实现三维模型轻量化、Web端可视化!

所属行业:制造业 挑战:为在线客户的制造平台提供流畅的客户体验、支持使用多种类型CAD文件格式的不同客户群、根据模型提供准确的报价和可制造性反馈、快速准确地可视化定制零 解决方案: HOOPS Platform 提供web端和移动设备的3D数据转换、…

擎创技术流 | 一文读懂eBPF对kubernetes可观测的重要性

一、云原生技术发展的背景与问题 当前,云原生技术主要是以容器技术为基础围绕着 Kubernetes的标准化技术生态,通过标准可扩展的调度、网络、存储、容器运行时接口来提供基础设施,同时通过标准可扩展的声明式资源和控制器来提供运维能力。两层…

Servlet【最复杂的hello world】

目录 一、Hello World 1.创建项目 2.引入依赖 3.创建目录 4.编写代码 4.1 继承 HttpServlet 父类,重写 doGet 方法 4.2 在 doGet 中编写代码,打印 hello world 4.3 给 HelloServlet 加上注解 4.4 完整代码 5.打包代码 6.部署 7.验证程序 二…

分享一个403界面给大家

先看效果图&#xff08;说明&#xff1a;小鬼影会飘来飘去&#xff0c;长时间停留会有小惊喜&#xff0c;具体大家跑一下就知道&#xff09;&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UT…