移动应用开发:Flutter
前言
“镜子镜子 告诉我,世界上最好的语言是什么”
“当然是... “
开始正文吧。
该篇博文主要记录了Flutter、H5、React Native 及原生开发的选择对比,以及对 Flutter 的介绍(这里主要是因为之后的移动端开发选择了 Flutter)
Flutter 介绍
Flutter 是 Google 推出的一个移动应用开发框架,支持跨平台,即开发者可以通过 Dart 语言实现一套代码同时在 Android 和 IOS 平台上运行。Flutter 除了跨平台这个特性,还在于其提供了流畅的、高保真的 UI 体验,Flutter 内置的组件,丰富的 API ,响应式框架等都给开发带来了便利。
移动应用开发:选择对比
原生开发
原生应用指的是某一移动平台特有的应用(例如 IOS 或 Android ),需要使用不同的语言及调用不同的 SDK 进行开发。
其缺点在于开发成本高,不同平台需要维护多套代码从而增大人力成本;若有新功能更新则要发布新版本,同时用户需下载新版本进行更新。
使用原生开发的优点是可以访问平台的全部功能,且速度快、性能高,整体用户体验好。
H5 技术
H5 移动端开发主要是网页+JavaScript,目前比较流行的 JS 框架有 Vue、React、AngularJS 等都是为了构建网页。这些针对移动端所构建出来的网页可以实现跨平台,相比于原生开发而言,减少了开发及维护的成本;且用户无需每次都下载新版本进行更新。但其也存在明显的缺点:渲染效率低,用户体验差;网页调用设备的硬件 API 较为困难。
React Native
React Native ( 简称RN ) 是 Facebook 在2015年开源的一个跨平台移动应用开发框架,是 React 在原生移动应用平台的衍生产物。RN 使用 JavaScript 语言,类似于 HTML 的JSX 以及 CSS 来开发移动应用。与 H5 开发不同的是,它使用 JS 桥接技术在运行时编译成各个平台的 Native 代码。其优点在于目前的生态较为成熟,也有很多的跨平台应用使用的 React Native ;支持热部署,开发过程中可以节约很多时间。
Flutter
前面介绍了这么多移动应用开发技术,终于到 Flutter 了。在前面的 Flutter 介绍中也已了解到 Flutter 是一个跨平台的框架,可以实现一套代码在不同的平台上运行。
Flutter 在 React Native 的设计思想上又做了很大的优化,它将代码编译成原生代码,并且直接在各个平台中使用其高效渲染引擎 Skia 进行渲染,没有桥接,不调用平台相关控件。
这种设计思想完美解决了不同平台的性能问题。
Flutter 的特点:
- 有丰富的视图组件
- 支持热部署,开发时可以像网页开发一样实时看到效果
但它也存在一些不足:目前学习的资源比较少;其相关生态也没有 React Native 那样丰富。
总结
“镜子镜子 告诉我,世界上最好的语言是什么”
“当然是... “
你觉得呢?
文章总结想引用知乎上的一个问题的回答:需要开发app和h5,用Flutter靠谱吗?
flutter目前web端并不是那么友好,移动端的话目前除了流畅和生态比原生差点,其它都还好,如果小型项目,而且并不是和硬件打交道比较多,只涉及一些图形交互的业务逻辑的话,建议用uniapp这种类似的H5移动端一站式解决方案。
至于纯原生开发,除非一些经常和系统硬件打交道的App(如摄像头相关的图像处理,平衡仪相关的游戏或者其他业务需求),一般都很少用原生开发。一来项目管理和人力成本因为两个团队的原因会比较大,二来时间上肯定原生开发时间周期更长,三来是没必要。
总体结论:
根据需求来,简单的图形业务App用uniapp这种就够了,网站、移动端App、小程序一套代码稍微修改就可以上线了,稍微追求一点效率和流畅性的用flutter构建移动端,vue做H5,极限点就iOS、Android各自用原生,网页还是用vue。
选择当下最符合业务需求的、最合适的就是最好的。
参考
- Flutter 中文网
- 《Flutter实战》电子书 - 移动开发技术简介
- Flutter介绍 - Flutter,H5,React Native之间的对比
- Flutter | 什么是 Flutter?
移动应用开发:Flutter的更多相关文章
- 使用VSCode开发Flutter
前言 为什么使用VSCode? flutter官方推荐的编辑器有IDEA/Android Studio和VSCode, 之前开发Flutter用的IDEA, 不过IDEA始终比较重,于是换用VSCod ...
- Flutter Android 真机器调试 、模拟器调试、Vscode 中开发 Flutter 应用
必备条件: 1.准备一台 Android 手机 2.手机需要开启调试模式 3.用数据线把手机连上电脑 4.手机要允许电脑进行 Usb 调试 5.手机对应的 sdk 版本必须安装 注意: 1.关闭电脑上 ...
- vsCode开发flutter项目
Visual Studio Code 安装: 下载链接:https://code.visualstudio.com/ 下载完成后根据步骤自行安装. 使用vsCode开发flutter项目需要部 ...
- 安装与配置Flutter开发环境
这篇博客我们介绍了Flutter,并且对比了H5,React Native,Flutter. 由于Flutter是跨平台的开发框架,开发一次可以同时运行在Android和iOS上面,所以我们开发时最好 ...
- Flutter Plugin开发流程
这篇文章主要介绍了Flutter Plugin开发流程,包括如何利用Android Studio开发以及发布等. 本文主要给大家介绍如何开发Flutter Plugin中Android的部分.有关Fl ...
- Flutter与Android混合开发及Platform Channel的使用
相对于单独开发Flutter应用,混合开发对于线上项目更具有实际意义,可以把风险控制到最低,也可以进行实战上线.所以介绍 集成已有项目 混合开发涉及原生Native和Flutter进行通信传输,还有插 ...
- mac 上配置flutter开发环境
(ios,Android,Xcode,Android Studio,VScode,IDEA) 1)安装Flutter SDK 2)iOS 环境配置 3)Android Studio配置 4)VS co ...
- Mac版最详细的Flutter开发环境搭建
上周任务不多,闲来无事想学习一下flutter耍一耍,发现flutter的环境搭建步骤还是很繁琐的,官网的搭建教程只是按步骤让你进行操作,中间出现的问题完全没有提及,对我这种没搞过原生开发的小白来说超 ...
- 入门: 在Windows上搭建Flutter开发环境
使用镜像 由于在国内访问Flutter有时可能会受到限制,Flutter官方为中国开发者搭建了临时镜像,大家可以将如下环境变量加入到用户环境变量中: export PUB_HOSTED_URL=htt ...
- 【老孟Flutter】6种极大提升Flutter开发效率的工具包
老孟导读:本文介绍6种极大提升Flutter开发效率的工具包. [1] 强大的日志软件包 在开发 Flutter 的过程中打印日志是常用的调试方式之一,但 Flutter 内置的日志打印非常简单,下面 ...
随机推荐
- html+css第十篇-命名
命名:根据每块元素的主题 或者功能.在页面上的位置 php 每个单词中间以"_"隔开 #main_left_box{} 驼峰命名 从第二个单词开始每个单词的首字母大写 #mainL ...
- Jmeter BlazeMeter实现web录制
1. BlazeMeter安装和注册 BlazeMeter是一款与Apache JMeter兼容的chrome插件,采用BlazeMeter可以方便的进行流量录制和脚本生成,作为接口测试脚本编写的 ...
- Linux设置默认的声卡
首先查看自己电脑上的声卡 使用命令行查看 orangepi@orangepi3:~$ ll /proc/asound/ total 0 dr-xr-xr-x 4 root root 0 Dec 23 ...
- 入坑 OI 249561092 周年之际的一些感想
2018.2.10~2021.2.10 又是一年的 2 月 10 日,今天的到来意味着我 OI 生涯的第三年已经结束,即将开启 OI 生涯的第四年了.回顾这三年以来自己由懵懂.无知慢慢变成熟的历程,感 ...
- 一个画组织解剖图R包
地址: https://github.com/jespermaag/gganatogram
- Python——MacBook Pro中安装pip
1.系统已有python2和python3,如何检查MacBook Pro系统是否安装的有pip? 看到terminal的提示没有,有提示pip的,下面的提示,说明pip安装了. 要查看pip3是否安 ...
- Linux学习——Gdb基本调试方法&&多线程调试
1.Gdb的基本调试 示例代码 //e.c #include <stdio.h> void debug(char *str) { printf("debug info :%s\n ...
- Go语言缺陷
我为什么放弃Go语言 目录(?)[+] 我为什么放弃Go语言 有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题. 开 ...
- (转载)VB中ByVal与ByRef的区别
ByVal是按值传送,在传的过程中不会改变原来的值,仅仅传送的是一个副本, 而 ByRef相反,从内存地址来说,后者是同一个内存地址. ByVal 与 ByRef(默认值)这两个是子过程的参数传递时, ...
- MYSQL(3)
加载C盘下的目录 全表查询 查询部分字段 查询总数 条件过滤 and or 包含 范围检查 between and 否定结果not 匹配任意字符 like 以什么开始^ rlike 以什么结 ...