前言
写完毕业论文闲着没事,学习了下flutter,花了些时间搭了个app出来。
我以前接触过原生安卓开发,在学习了flutter之后,我深感跨平台是客户端开发的趋势。想要接触客户端开发的朋友,不管是个人开发还是团队开发,都可以考虑一些flutter、react native这类跨平台客户端开发框架,毕竟只用编写一套代码就能得到多平台的应用真是太爽了。
下面讲一下我的flutter初体验。
flutter和dart
1. flutter概况
首先介绍下flutter概况
- flutter是谷歌2015年开源的跨平台ui构建框架,其目标是使用一套代码库在不同架构、操作系统上构建相同的应用
- flutter应用的用户界面和操作逻辑均由dart语言编写
- flutter目前支持的平台有:
- Android(arm,arm64,x86,x64)
- iOS(arm64)
- macOS(arm64,x64)
- Linux(arm64,x64)
- Windows(x64)
- Web
2. dart语言
下面简单介绍下dart
dart语言由谷歌于2011年发布,其语法和java、javaScript相似,既可以解释运行又可以编译运行。
dart在进行客户端开发时具有众多优点:
-
开发效率高的同时拥有高性能
- dart在开发时采用JIT(即时编译)模式,避免每次改动重新编译全部代码
- dart在发布时采用AOT(运行前编译)模式,在发布时可以将代码编译为高效的机器码,在客户端运行时提供良好的体验
-
单线程模型
- dart采用单线程模型,一段dart代码在执行过程中不会被其他代码打断,这保证了dart的线程安全
- dart的所有代码均运行于Isolate中,每个Isolate是一个独立的运行区域,其中包含一个单线程的事件循环模型,不同Isolate之间不共享内存。
- dart通过Isolate和循环模型保证线程安全并拥有处理异步任务的能力
- dart实现了多种异步编程的方式:
- async+await+Future
- async*+yield+Stream
- 直接操作Isolate
- 想要详细了解,可以查看一些优秀的博客
-
类型安全和空安全
- dart是类型安全的语言
- 在2.12版本后,dart支持了空安全特性,可以在编写时就避免一些问题
-
各种feature
- 参数默认值
- “…”/"??"等操作符
- with关键字
- …
上面的介绍可能不够准确也不够完善,但是可以看出,dart是一种非常优秀的适合应用于客户端开发的语言。
app简介
我用flutter搭建的第一个app叫做Device Detector,可以实现网络设备扫描功能。目前安卓版正在申请上架中,下面进行简单介绍。
- Device Detector是一个网络设备扫描器,具体功能如下:
- 根据本机ip地址或输入的ip范围扫描网络设备
- 展示可访问的ip地址、延迟时间、设备mac地址和厂商信息
- 目前还有一些功能待完善,比如:
- 实时显示扫描结果
- 程序参数设置,包括:
- 超时时间
- 后台扫描任务数
- 是否显示厂商名
- …
- 目前支持的平台有:
- android
- windows
- linux
- app的项目地址:Device Detector
- app的使用截图:
app工作流程和结构
Device Detector
的工作流程如下:
获取本地ip地址/获取输入的ip范围 --> 扫描对应的ip范围
|
v
根据ip地址查询设备mac地址 <-- 得到可达的ip列表和延迟时间
|
v
根据mac地址查询设备厂商信息 --> 展示扫描结果
根据上述工作流程,可以得出Device Detector
需要实现以下基本功能:
- 用户界面
- 设备扫描功能
- 设备mac查询功能
- 设备厂商查询功能
根据不同的基本功能,可以将app拆分为多个独立的结构:
- 首先,可以将app简要地分为ui端和逻辑端,ui端负责响应操作、显示结果,逻辑端负责逻辑处理、数据准备
- 将逻辑端细分,可以分为:设备扫描模块、mac查询模块和厂商查询模块,不同的模块相互独立,以流水线的方式实现设备扫描
在app的ui端和逻辑端编写中,存在一些要点,将在下一篇中进行介绍。