热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidios交叉推广,Flutter与Android、iOS混合+交互

说明注意点:1.Flutter模块建立之后会生成隐藏文件.android和.iOS,混合混的就是这个。2.Android需要跳转到flutter页面最简

说明/注意点:

1.Flutter模块建立之后会生成隐藏文件.android和.iOS,混合混的就是这个。

2.Android需要跳转到flutter页面最简单的方式是startActivity(FlutterActivity.createDefaultIntent(this));这里FlutterActivity来自io.flutter.embedding.android.FlutterActivity,切勿弄错。

3.Android三种跳转方式(核心:FlutterEngine):

a.进入到默认flutter - main 页面

startActivity(FlutterActivity.createDefaultIntent(this));

b.进入到flutter - 指定route页面

startActivity(FlutterActivity.withNewEngine().initialRoute("123").build(this));

c.进入到指定方法页面 - 通过执行指定到方法进入到页面,默认指定的是main,所以这个算是对a,b的复杂化写法

先得创建一个FlutterEngine去启动这个方法

FlutterEngine engine =new FlutterEngine(this);

DartExecutor.DartEntrypoint dartEntrypoint =new DartExecutor.DartEntrypoint(FlutterMain.findAppBundlePath(),"test");

engine.getDartExecutor().executeDartEntrypoint(dartEntrypoint);

FlutterEngineCache.getInstance().put("test",engine);

startActivity(FlutterActivity.withCachedEngine("test").build(this));

4.iOS三种跳转方式(核心:FlutterEngine)

a.进入到默认flutter - main 页面

FlutterEngine *flutterEngine = [[FlutterEngine alloc] initWithName:@"engine"];

[flutterEngine run];

FlutterViewController *flutterViewController = [[FlutterViewController alloc] initWithEngine:flutterEngine nibName:nil bundle:nil];

[self presentViewController:flutterViewController animated:YES completion:nil];

b.进入到flutter - 指定route页面 - !!不能创建engine,如果要获取engine从 flutterViewController.engine - 官方api在setInitialRoute有说明

FlutterViewController *flutterViewController = [[FlutterViewController alloc]initWithProject:[[FlutterDartProject alloc]init] nibName:nil bundle:nil];

[flutterViewController setInitialRoute:@"123"];

[self presentViewController:flutterViewController animated:YES completion:nil];

c.进入到指定方法页面 - 通过执行指定到方法进入到页面,默认指定的是main,所以这个算是对a的复杂化写法

FlutterEngine *flutterEngine = [[FlutterEngine alloc] initWithName:@"engine1"];;

[flutterEngine runWithEntrypoint:@"test" libraryURI:nil];

FlutterViewController*flutterViewController =

[[FlutterViewController alloc] initWithEngine:flutterEngine nibName:nilbundle:nil];

[self presentViewController:flutterViewController animated:YES completion:nil];

注意:Android 中 new FlutterEngine 就必须指定这个engine执行哪个方法,即executeDartEntrypoint,所以c特殊;iOS 中run就是默认main,但是如果需要指定路由进入则不能手动调用run,所以b特殊。

5.交互:Flutter和Android方使用的是MethodChannel和EventChannel; iOS方使用的是FlutterMethodChannel和FlutterEventChannel。核心依然是FlutterEngine,Engine就是一个贯穿始终的驱动器,用哪个Engine驱动的页面也应该用哪个Engine去交互。

6.Flutter传输到Native直接创建一个MethodChannel然后methodChannel.invokeMethod()就可以;Native注意channelName和methodName保持一致,可以通过result回调函数回调结果给flutter。

7.Native传输到Flutter通过创建一个EventChannel,flutter通过eventChannel.receiveBroadcastStream().listen,涉及到stream,那么怎么把东西添加到stream呢,自然是sink。所以Native setStreamHandler 将接口/协议中的EventSink保存起来,在需要传值的地方触发回调就好了。



推荐阅读
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了一个程序,可以输出1000内能被3整除且个位数为6的所有整数。程序使用了循环和条件判断语句来筛选符合条件的整数,并将其输出。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
author-avatar
琴瑟_0203
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有