前言
大约两年前,当时我对 Flutter 还有些陌生,对它给予了很高的评价,但也对 React Native 表示了一些敬意。
我对 React Native 有更多的经验,并且喜欢(并且仍然喜欢)它的 Web OG,ReactJS。 差不多两年后,我会说我已经变得不那么公正了。
长话短说,我觉得Flutter绝对是更好的移动框架。
Flutter 无疑是卓越的移动框架。 我明白,这很大程度上与每个人、他们的发展和学习风格、目标等有关。
从我个人的经验以及我网络中一些移动开发人员的经验来看,Flutter 比 React Native 更加精简。 这种效率在 Flutter 的日益普及中显而易见。
对于 JavaScript 工程师,尤其是具有 ReactJS 经验的工程师来说,任何试图涉足移动开发的人都会选择一个与他们之前使用过的框架密切相关的框架,这是有道理的。
框架已经比原生开发更有吸引力了。 原生开发虽然很有用,但基本上要求您致力于一个平台 — iOS 或 Android。
虽然这两个平台都值得,但选择一个并不总是那么容易——特别是如果您想让一个应用程序适用于这两个平台。
现在,想象一个可以覆盖两个平台的框架(显然不像学习本机开发本身那么广泛),并且它实际上是您喜欢的另一个使用您喜欢的语言的框架的后代?
作为 JavaScript 开发人员,ReactJS 是前端框架的明显选择。
这意味着对于试图进入移动开发的 JavaScript 或 ReactJS 开发人员来说,React Native 是移动框架的明显选择。 学习另一个可能使用另一种编程语言的移动框架是不明智的。
除非你必须这样做。
我最初担任 JavaScript SDK 工程师,负责 JavaScript/ReactJS 和 React Native Capture SDK 的所有开发和文档。 然而,在工作的第一年几个月后,我的任务是学习 Flutter 并随后构建 Flutter Capture SDK。
这是我第一次体验 Flutter,我立刻喜欢上了它。
它速度快,依赖性不像 React Native 那么重,而且环境设置也相对容易。
虽然我喜欢 Flutter,但我对 React Native 仍然有一些感情,这是很自然的。 这是我的初恋(至少在移动框架方面),而且我对此有更多的经验。
但现在…
两年后
大约两年后,随着对 Flutter 有了更广泛的了解(以及对 React Native 的更多头痛),我开始意识到 Flutter 显然更好。
JavaScript/ReactJS 连接对于 React Native 来说绝对是一个优势,但是我在环境问题、依赖冲突和有缺陷的 React Native 版本上花费的时间绝对超过了在 Flutter 的类似问题上花费的时间。
不要误会我的意思,Flutter 并不都是彩虹和蝴蝶。 但请相信我,我已经完成了 Flutter SDK 上的许多功能,这些功能花了我更长的时间才在 React Native 上发布。
是的,我之前确实有过首先为 React Native 开发它们的经验。 当我需要参考如何在 Flutter 中处理类似的事情时,这绝对有帮助。
你知道还有什么帮助吗?
不必花费几个月的时间来调试 Gradle 的各种问题、不稳定的 React Native 版本和其他依赖项。
我可以自信地说,使用 React Native,我必须将至少四分之一(有时是一半)的总开发时间投入到这些问题上。
对于 Flutter,我可以轻松地说,我几乎将所有时间都投入到了产品和功能开发上。
我这么说并不夸张。
在我解决 React Native 的各种环境问题所花费的时间不到一半的时间里,我已经为 iOS 实现了 SocketCam,并在 Flutter 中添加了对 iOS 和 Android 的 NFC 读取器的支持。
原生模块
我在 Flutter 中注意到的另一件事是,合并本机模块没有出现严重问题。 React Native 夸耀 Expo 如何帮助您在几分钟内启动并运行。
然而,他们没有夸耀的是,使用 Expo 制作 React Native 应用程序会让编写和使用自己的 Native 模块变得非常困难。 这是我在尝试在 React Native SDK 中实现 Native Modules 时直接遇到的一个问题。
我需要合并自定义本机模块,以允许 React Native SDK 无缝连接到我们各自的 iOS 和 Android SDK。 这样我就可以利用它们的本机功能——这对于使用 SocketCam 来说是无价的。
我不断遇到我的自定义本机模块未定义或无法找到的问题,我的 React Native 应用程序无法访问它们。 这最终是因为测试应用程序最初使用了 Expo bootstrapping。
我最终只是以老式的方式重新制作了该应用程序。
我仍然不太清楚为什么 Native Modules 和 Expo 本质上不兼容。 我完全确定的是,我在 Flutter 中引用自定义本机模块时从未遇到过问题。
显然,最初有一些学习曲线——弄清楚文件结构、Flutter 的 Native Module 语法(而不是 React Native)等。然而,一旦我完成了这些,我就有了一个非常清晰的路径来在未来。
最后
即使您传统上是一名 JavaScript 开发人员,如果您要进入移动开发领域,我也恳请您尝试学习 Flutter。
相信我,我告诉你,你的生产力不会那么高。 Flutter 有一个初始学习曲线,请不要误会我的意思。 但一旦你通过了这一点,你的生产力将比使用 React Native 提高很多。
使用 Flutter,您将能够将绝大多数时间用于实际开发,而不是处理冲突和其他环境问题。
Flutter的学习
为了能够方便大家快速学习Flutter, 这里整理了Flutter学习路线图以及《Flutter Dart 语言编程入门到精通》&《Flutter实战:第二版》帮助大家配置相关环境,学习Flutter 的基本语法以及最后的项目实际利用。
有需要的小伙伴,可以点击下方课程链接详细了解!!!
https://edu.51cto.com/course/32703.html
学习路线:
Dart语言是Flutter的开发语言,所以我们需要掌握Dart语言的基础知识
《Flutter Dart 语言编程入门到精通》
第一章 Dart语言基础
- 环境准备
- 基础语法
第二章 Dart 异步编程
- Dart的事件循环
- 调度任务
- 延时任务
- Future详解
- async和await
- lsolate
第三章 异步之 Stream 详解
- 什么是Stream
- 单订阅流
- 广播流
- Stream Transformer
- 总结
第四章 Dart标准输入输出流
- 文件操作
第五章 Dart 网络编程
- TCP服务端
- TCP客户端
- UDP服务端
- UDP客户端
- HTTP服务器与请求
- WebSocket
第六章 Flutter 爬虫与服务端
- Dart爬虫开发
- Dart服务端
- 创建Flutter项目演示
- 总结
第七章 Dart 的服务端开发
- 注册登录实现
第八章 Dart 调用C语言混合编程
- 环境准备
- 测试Dart ffi接口
- 总结
第九章 LuaDardo中Dart与Lua的相互调用
- Lua C API
- 创建运行时
- Dart调Lua
- Lua调Dart
掌握了Dart语言之后,咱们就可以通过实战来掌握Flutter的知识点
《Flutter实战:第二版》
第一章:起步
- 1.1 移动开发技术简介
- 1.2 初始Flutter
- 1.3 搭建Flutter开发环境
- 1.4 Dart语言简介
第二章:第一个Flutter应用
- 2.1 计数器应用实例
- 2.2 Widget简介
- 2.3 状态管理
- 2.4路由管理
- 2.5包管理
- 2.6 资源管理
- 2.7 调试Flutter应用
- 2.8 Flutter异常捕获
第三章:基础组件
- 3.1 文本及样式
- 3.2 按钮
- 3.3 图片及ICON
- 3.4 单选开关和复选框
- 3.5 输入框及表单
- 3.6 进度指示器
第四章:布局类组件
- 4.1 布局类组件简介
- 4.2 布局原理与约束(constraints)
- 4.3 线性布局(Row和Column)
- 4.4 弹性布局(Flex)
- …………
第五章:容器类组件
- 5.1 填充(Paddi服务器托管网ng)
- 5.2 装饰容器(DecoratedBox)
- 5.3 变换(Transform)
- 5.4 容器组件(Container)
- 5.5 剪裁(Clip)
- 5.6 空间适配(FittedBox)
- 5.7 页面骨架(Scaffold)
第六章:可滚动组件
- 6.1 可滚动组件简介
- 6.2 SingleChildScrollView
- 6.3 ListView
- 6.4 滚动监听及控制
- ………….
第七章:功能型组件
- 7.1 导航返回拦截(WillPopScope)
- 7.2 数据共享(InheritedWidget)
- 7.3 跨组件状态共享
- 7.4 颜色和主题
- 7.5 按需rebuild(ValueListenableBuilder)
- 7.6 异步UI更新(FutureBuilder、StreamBuilder)
- 7.7 对话框详解
第八章:事件处理与通知
- 8.1 原始指针事件处理
- 8.2 手势识别
- 8.3 Flutter事件机制
- 8.4 手势原理与手势冲突
- 8.5 事件总线
- 8.6 通知 Notification
第九章:动画
- 9.1 Flutter动画简介
- 9.2 动画基本结构及状态监听
- 9.3 自定义路由切换动画
- 9.4 Hero动画
- 9.5 交织动画
- 9.6 动画切换组件(AnimatedSwitcher)
- 9.7 动画过渡组件
第十章:自定义组件
- 10.1 自定义组件方法简介
- 10.2 组合现有组件
- 10.3 组合实例:TurnBox
- 10.4 CustomPaint 与 Canvas
- 10.5 自绘实例:圆形背景渐变进度条
- 10.6 自绘组件:CustomCheckbox
- 10.7 自绘组件: DoneWidget
- 10.8 水印实例: 文本绘制与离屏渲染
第十一章:文件操作与网络请求
- 11.1 文件操作
- 11.2 通过HttpClient发起HTTP请求
- 11.3 Http请求库-dio
- 11.4 实例:Http分块下载
- ……….
第十二章:Flutter扩展
- 12.1 包和插件
- 12.2 Flutter Web
第十三章:国际化
- 13.1 让App支持多语言
- 13.2 实现Localizations
- 13.3 使用Intl包
- 13.4 国际化常见问题
第十四章:Flutter核心原理
- 14.1 Flutter UI 框架(Framework)
- 14.2 Element、BuildContext和RenderObject
- 14.3 Flutter启动流程和渲染管线
- 14.4 布局(Layout)过程
- 14.5 绘制(一)绘制原理及Layer
- ……………..
第十五章:一个完整的Flutter应用
- 15.1 Github客户端示例
- 15.2 Flutter APP代码结构
- 15.3 Model类定义
- 15.4 全局变量及共享状态
- 15.5 网络请求封装
- 15.6 APP入口及主页
- 15.7 登录页
- 15.8 多语言和多主题
有需要的小伙伴,可以点击下方课程链接详细了解!!!
https://edu.51cto.com/course/32703.html
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.服务器托管网net