flutter实战对比的简单介绍

Android原生和Flutter使用过程的差异对比(二)

1、常用布局的对比

为无极等地区用户提供了全套网页设计制作服务,及无极网站建设行业解决方案。主营业务为成都网站设计、网站制作、无极网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

使用下来其他组件大致还算方便,但是相对布局而言使用便利程度上Android原生完胜,ConstraintLayout内部的所有子View可以设置互相之间的位置依赖关系。

而Flutter的Stack组件内部的Children只能通过外层包裹 Align后 固定位置,比如 Alignment.topLeft、Alignment.bottomRight 等。遇到复杂的堆叠布局需要通过外层包裹 Positioned 组件后设置固定的 top 和 left 距离以达到效果,内部子组件之间无法设置位置关联关系。

2、一些常用属性设置上的差异:

Margin外边距

Android:直接在布局文件对View设置android:layout_marginStart、android:layout_marginTop

Flutter:需嵌套 Container 组件并在内部设置具体的 margin 值

Padding内边距

Android:TextView、ImageView、各种Layout都可以直接在属性上设置android:paddingStart

Flutter:需嵌套 Padding 组件并在内部设置具体的值

组件的可见性

Android:每个view都可以通过setVisibility来设置可见、隐藏或者隐藏但占位

Flutter:没有单独设置组件是否显示的api,只能通过 bool 值控制是否添加该组件

事件监听

Android:常规的setOnClickListener和setOnLongClickListener设置单击和长按事件

Flutter:在需要添加事件监听的组件外层嵌套 InkWell 或 GestureDetector 并设置 onTap 等

3、生命周期

Android:

Activity和Fragment各自有完整的生命周期链路onCreate、onStart、onResume、onPause、onDestroy等

Flutter:

万物皆组件,组件继承 WidgetsBindingObserver 并重写 didChangeAppLifecycleState 函数进行监听

退回桌面依次执行inactive 》= paused,此时界面不可见用户不可操作,从桌面重新进入app执行resumed,状态较少如需在某些条件下触发特定操作可能要找别的方案,比如发通知之类的

Flutter实战:撸半个知乎日报

感谢 知乎日报-API-分析 提供的api帮助完成这个demo

该项目完全开源,单纯为了学习与交流,希望大家喜欢,多多提意见。

后续会将未来学到的新知识点用到该项目,持续更新

1.今日热点

2.主题分类

3.文章详情

4.抽屉列表增加缓存, 防止多次拉去数据

5.评论列表 (界面,动画优化)

6.主题列表 (界面,动画优化)

7.主页banner自动轮播,手指滑动是禁止轮播,放开则继续

8.刷新数据失败,增加重试按钮

9.分享UI

9.登录UI,联动交互(在评论界面可以点击写点评进入)

1.Flutter加载Html

1.注册

2.登录

3.发表评论

4.收藏

5.等等

Flutter混合开发实战

之前开发了一个纯Flutter的项目,结果接到个新的需求需要使用Flutter单独开一个模块集成到原有的android项目中

下面分享一下如何集成现有的项目和如何继承以及碰到的问题

1.首先第一步 修改gradle

因为 Flutter 当前仅支持为 x86_64,armeabi-v7a 和 arm64-v8a 构建预编(AOT)的库 所以我们需要修改gradle的文件限制 APK 中支持的架构,从而避免 libflutter.so找不到引起的崩溃

2.新建一个FlutterModel的工程

2.使用aar文件 因为所有工程统一使用jenkins打包所以我们放在本地肯定是不合适的

说以我们需要 打包aar并上传服务器

上传完成后在android中引用

在开发中遇到的问题

1.关于android和Ios中的跳转传参问题

这个问题在android端还是比较方便的 但是的在Ios端并不怎么好实现

最终决定使用flutter_boost来完成android和Ios与Flutter的通信操作

flutter_boost github地址:

集成文档:

集成文档给出了 但是没有android的 尴尬

下满分享下android的集成

(1)在flutter的 pubspec.yaml工程中添加

(2)修改android工程

使用本地工程的时候需要在工程共添加

使用aar的时候不需要添加

(3)在android工程中添加对应的条状路由配置

(4)在使用默认的flutter_boost启动界面的时候可能碰到状态栏丢失的情况

所以最好集成BoostFlutterActivity写一个新的activity方便处理状态栏和activity进出动画

(5)跳转并传参

//params 传多个参数可以使用json的形式

2.在flutter中的网络框架使用的dio结果在ios的弹出loading的时候出现卡顿现象

解决方式:1.服务换证书 (但是后台太忙暂时没有支持的人员)

2.ios使用原生的loading解决

3.在使用dio的时候出现ios部分手机 网络请求缓慢问题

解决方法:请求的时候使用http 2.0协议

插件地址:

Flutter 与 iOS 原生 webView 对比

本文对比的是 UIWebView、WKWebView、flutter_webview_plugin(在iOS中使用的是WKWebView)的加载速度,内存使用情况。

测试网页打开的速度,只需要获取 WebView 在开始加载网页和网页加载完成时的时间戳,时间戳的差即为打开网页的时间

为了使差异更明显,我们选择较为复杂的 新浪首页 进行加载的对比,为了减小网络对加载速度的影响,我们让手机连接同一个网络,分别进行 10 次测试然后取平均值,另外,我们需要关闭 WebView 的缓存,防止缓存对加载速度产生影响

下面使笔者进行 10 次测试所得到的数据

结果让我有点惊讶,一直以为 WKWebView 会是个王者。结果看,速度上 WKWebView 略慢一点,不过总体差异不大(该结果仅仅是测试新浪的结果,仅供参考啦)

在这里,笔者又加了一个测试,尝试记录从 viewController 的 viewDidLoad 到 webview 的 didFinish 时间,测试了新浪的数据,如下:

UIWebViewA : 4970、3808、3815、4250、3556 avg(4079.8) (加载完所有页面)

UIWebViewB : 4103、3124、3070、3256、2835 avg(3277.6)(加载sina完毕)

WKWebView : 3672、3032、2892、2912、2739 avg(3049.4)

flutter_webView : 4532、3901、4310、3496、3378 avg(3923.4)

其中可以看到,webView 有两行,UIWebViewB 的数据就是加载 sina 主站的时间;UIWebViewA 的数据是因为在加载完 sina 主站之后,新浪又加载了一个 ,所以导致总时间延长,不过即使按照 UIWebViewB 的数据来比较,也是 wkWebView 略胜一筹。

此处可以看出 flutter_webView 使用的是 wkwebView,所以它吃亏的主要原因是 flutter 包了一层。

结论:

速度(didStart - didFinish) UIWebView flutter_webview WKWebView

速度(viewDidLoad - didFinish)WKWebView UIWebView flutter_webview

这里查看内存使用的是 xcode 的 debug session 中的 memory。

首先看之前测试时,连续打开十次新浪的内存情况

接着我们在看一下打开淘宝首页的内存情况

从图上可以看出,WKWebView 在内存方面有很大的优势啊,UIWebView 的内存是真的伤啊,然后 debug 看了一下 flutter_webView,他使用的就是原生的 webView 。

他相比较原生 WKWebView 的内存开销稍大一点,从测试表现来看,一般大个 30 MB 左右。

结论:内存 WKWebView flutter_webview UIWebView

可以在 html5test 中对浏览器的兼容性进行评分,通过测试发现得分分别如下

因为 flutter 里使用的就是 WK,所以和原生的 WKWebView 一样都是 444 分,比 UIWebView 的 437 略胜一筹

结论:兼容性 WKWebView = flutter_webview UIWebView

UIWebView : 速度相比较 WKWebView 稍快一点,但是内存是一大硬伤,所以只要条件允许,就不推荐使用了

WKWebView : 速度略慢一点,不过差别不大,总体可以接受。是比UIWebView更好的选择,推荐使用。

flutter_webView_plugin :在iOS中使用的就是原生的WKWebView,所以总体和 native WKWebView 表现差不多。如果是混编项目中,因为它被包了一层,所以页面加载上存在一定的劣势,所以混编项目中仍然推荐使用 WKWebView。不过如果从多端考虑、以及项目可迁移等,那么使用也未尝不可,就是维护成本要增加一些,需要维护两套 webView。这个就需要根据自己的情况自己取舍了。

Flutter上线项目实战——Vap视频动画

透明视频动画是目前比较流行的实现动画的一种, 大厂也相继开源自己的框架,最终我们选中 腾讯vap ,它支持了Android、IOS、Web,为我们封装flutter_vap提供了天然的便利,并且它提供了将帧图片生成带alpha通道视频的工具,这简直太赞了。

VAP(Video Animation Player)是企鹅电竞开发,用于播放酷炫动画的实现方案。

video for youtube

video for qiniu

apk download

github


本文名称:flutter实战对比的简单介绍
当前路径:http://scyanting.com/article/dsispos.html