简介

今天给大家介绍的是Dart2Flutter

Dartgoogle推出的一种新的脚本语言, 希望能替代JS,

然而JS也在迭代升级, 生命力很旺盛,

目前, Dart还没能替代JS.

现在最新的Dart2, 据说相比1改变很多.

所以我直接介绍dart2.

Fluttergoogle推出的跨平台开发框架, 类似于React-native.

不过相比于React-native, 它的性能更有优势.

支持IOS, Android

•谷歌的开源移动UI框架
•支持iOS App和Android App
•调试时支持热重载
•内置Material Design, Cupertino
•简易的包管理
•接近原生的性能
                
Flutter是谷歌大力推进的开源项目, 据说更新迭代很快, 我在学习的这段时间确实遇到有几次更新提醒. 同时支持iosandroid.,调试时支持热重载. 网站描述调试过程中如果崩溃了, 还可以修复崩溃点继续热重载. 这一点react-native还没做到.
Flutter提供了两套组件库,Material Design是google主推的设计, 而Cupetino是apple主推的设计.
自动化包安装是在代码的配置里写上要引用的包和版本号.IDE就可以轻松的将正确的包同步到本地. 相比npm管理包更轻松. 不过这个过程的进度信息比较少. 从官方的介绍看, 性能比ReactNative更接近原生的app.

环境搭建

1. 下载Flutter SDK, 解压到C盘.

是一个zip包, 解压到C盘, 因为担心权限问题, 要求不要放到program Files.

https://flutter.io/sdk-archive/#windows

2. 将c:/flutter/bin添加到环境变量path

3. 添加两个环境变量的添加是为避免国内访问不到有些地址,

export PUB_HOSTED_URL=https://pub.flutter-io.cn

export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

4. 升级和检查

flutter doctor

flutter upgrade

5. 设置编辑器

vscode Extensions: Install  Flutter

6. android studio安装

7. android studio安装flutter插件

8. android studio配置虚拟安卓设备.

Dart语言

Dart类似于JS, 可以应用于web, server等应用场景, flutter框架下也支持了移动端开发.

1. 需要main入口才能运行.

2.Raw字符串, 不会发生转义

3. 多行字符串, 考虑到代码上加的空格也会体现出来, 所以如果用这种方法, 又不想要这些空格, 会破坏代码的整体美观.

4. 字符串中嵌入变量, 相比JS有些简化

5. Future相比Promise简便一点. 并且它可以加一个Duration来完成timeout的工作.

6. async/wait可以应用场景可以更自由. 比如for循环

还有一些没在这里演示, 比如类型继承, class extend, 类型安全等跟ts就比较像了.

最大的优点是具备JS的大部分优点, 所以容易上手. 又去掉了JS的大部分缺点, 比如隐式转换.

创建Flutter App

1. 创建Flutter工程

vscode命令也可以, 在命令行中输入flutter new, 填入名字, angular-cli类似, 就能生产一堆代码.

2. Vscode打开工程, 左侧可以看到android, ios各自产生的相应的工程, lib/main.dart就是业务层代码了.

其它的大部分可以不用管, 不过这里有一个pubspec.yaml是一个包管理文件, 类似与package.json.

3. 找到lib/main.dart

写上这些代码
4.  F5运行, 选择虚拟设备, 将会看到虚拟设备显示出实现的界面. (调试支持热重载)

这个例子中, 首先是main()的入口 调用 runApp创建app对象运行起来.

App对象从statelessWidget创建. 所谓statelesswidget就是属性不可变的widget意思.

widget是所有控件的基类.

Widget最基本的方法就是buildsetState

类似于Reactrender.

这里@override表示extend出来的子对象覆盖widgetbuild方法.

flutter里绝大部分的可见或不可见的界面元素都是widget, 整个页面, 路由的页面, 容器, , , 甚至是padding.

MaterialAppmaterial组件之一, 提供整体的属性的定义.

比如整体的风格, 颜色, 名称,

Scaffold提供默认的导航栏, 标题, body等属性的定义.

Appbar标题栏

Text控件

Center是一个布局控件, 可以把子对象摆在中间, 像有图所示.

这里的名称加冒号的传参方式, 前面解释了,

是可选参的传递方式,不限定传参顺序.

StateFulWidget状态控件

这个例子要演示的是StateFulWidgetStateLessWidget的不同.

这里引入了一个能产生随机单词的外部包.

这里的外部包引用只需要在yaml填入包名称和版本号,

然后触发flutter: get package命令就会完成包引用和更新.

这里需要注意的是, 缩进的多少会影响语义.

这里可以看到, StatefulWidgetoverride createState 函数

返回一个new 的对象state<RamdomWords>模板参数又引用了前面这个类型,

这个写法有点奇怪, 有一种循环引用的错觉. 不过实际上并不是循环引用.

然后再在这个state<>override 一个build方法.

state有变化时, 会触发build, 也可以手动触发.

这里里面放入一个listView listTile构成一个列表.

每次滚动到底部, 都会触发itemBuilder传入新的i.

到了这里我们对FlutterDart就有了一个初步的了解了.

接下来看一下Flutter的架构.

Navigator导航

Routeflutter中通过navigator来管理.

支持两种方式来做路由, 一种是stack push pop,

另一种就是常见的路径和页面映射.

这里演示的是第一种, 因为手机最常见的情况是跳转, 然后返回.

navigtorpush, pop, 操作widget对象来完成页面的跳转.

这种widget叫做MaterialPageRoute.

这里有一个navigator的例子, 实现的效果, 就是

点击右上角的按钮之后, 跳转到收藏页面,

点击返回又可以回到主页面.

代码实现是在右上角增加一个按钮的onPress事件触发

这个navigator.of是从当前的context也就是这个materialAppnavigator.

然后push一个MaterialPageRoute

Builder方法里返回一个Scofold页面就行了.

这里可以看到context包含app的环境信息或对象

MaterialApp的的routes属性可以设置路由路径和页面之间的映射关系.

new MaterialApp(routes: <String, WidgetBuilder> {'/a': (BuildContext context) => new MyPage(title: 'page A'),'/b': (BuildContext context) => new MyPage(title: 'page B'),}

除此以外, route还可以嵌套, 也就是说, app这一层是根路由,

而根路由里面的page还可以嵌入子路由, navigator.of访问context

按照就近原则获取当前的路由进行操作.

Icons.xxx图标

官方的图标库集成了内部的接口, 方便直接加载,基于矢量. 操作便捷, Icons.xxx就可以加载这个图标.

但是, 如果没有自己想要的图标还是需要通过图片加载的方式.

Layout布局

这里是对布局的演示,

Flutter的布局有一个特点, 就是它不用负责告诉它的父节点, 自己要显示在哪里.

主要是每种容器通过row, colum, list, card, gridview等容器来管着子节点的显示,

然后再容器的属性可配置主轴, 纵轴的对齐方式, padding, margin, border.

childrenchild嵌入子节点. 理解起来还是比较简单的.

另外, 对于全局的风格, materialApp中也有属性进行定义.

Animation动画

Animation:

1. 按时间阶段输出.value

2. 监听状态(forward, backward, completed, dismissed)

AnimationController:

1. .forward, .backward控制向前向后

2. 设置变化的时长

CurvedAnimation:

1. 曲线变化(fastOutSlowIn, bounceIn, elasticInOut, 可自定义)

2. AnimationControllerCurves组合出一个Animation对象

Tween(Animatable):

1. 设置Animation值变化范围

2. .evaluate(Animation)通过Animation可计算当前值

3. .animate(AnimationController)可以返回一个Animation

Pubspec.yaml环境配置文件

Pubspec.yaml文件, 配置包,类似于node.js的package.json文件.

前面提到配置的包在这里有修改的话,

会可以自动触发更新

相比npm install在编写代码再去输入命令要更便捷一点.

命令也支持.

然而这个国外的源可能被封禁, 所以经常get失败,

谷歌说提供了一个国内的源, 但是实际使用的时候, 发现效果也是很差.

另外还可以配置图片, 自定义字体, 本地语言等.

GestureDetector手势检测

•onTapDown :                     指针已经在特定位置与屏幕接触
•onTapUp :                           指针停止在特定位置与屏幕接触
•onTap tap:                          事件触发
•onTapCancel :                    先前指针触发的onTapDown不会在触发tap事件
•onDoubleTap :                   用户快速连续两次在同一位置轻敲屏幕.
•onLongPress :                    指针在相同位置长时间保持与屏幕接触
•onVerticalDragStart :        指针已经与屏幕接触并可能开始垂直移动
•onVerticalDragUpdate :    指针与屏幕接触并已沿垂直方向移动.
•onVerticalDragEnd :          与屏幕接触并垂直移动的指针不再与屏幕接触
•onHorizontalDragStart :    指针已经接触到屏幕并可能开始水平移动
•onHorizontalDragUpdate:  指针与屏幕接触并已沿水平方向移动
•onHorizontalDragEnd :      与屏幕接触并水平移动的指针不再与屏幕接触

大多数控件有onPress事件, 但是手机上的手势行为很多

因此并没有让每一个控件支持所有手势的属性,

所以如果想要获得哪些手势就需要使用GetureDetector

GetureDetector本身也是一种widget把它和其它控件重叠放在一起,

或者把其它控件作为GetureDetector的子控件.

它就可以检测到这个控件上发生的手势动作.

这里列举了可支持的手势动作.

Inspector

调试上除了传统的断点单步调试, 也一样支持inspector和性能分析

不过提供的inspector支持不在vscode., 而是intelliJ,

可以查看节点层次和节点属性, 只不过不能直接在inspetor里面修改属性.

android studio是基于intelliJIDE, 所以也是支持的.

Platform-Specific

Flutter与平台之间通过通信

每个API都有一个独立的路径, 获得路径对应的methodchannel对象

然后通过.invokeMethod(funcName)来访问接口.

这里为防止阻塞使用了async await.

已有的这些访问API的路径包含

如果开发发现还不够, 可以自己在native开发这一层

添加自定义的API路径和native api之间的映射.

而数据的返回有两种形式, 一种从result.success, result.error阻塞式返回.

另一种是通过event.

Achitecture架构

Flutter的框架从上到下分三个大层:

FrameWork主要包含UI组件(MaterialCupertino widgets)也包含:

widgets, Animation, getstures

Engine主要是指Dart的引擎, 还包括

Event, pipeline, 服务协议, 渲染等.

Embedder主要是native层的一些接口和线程, 事件, 包管理等.

根据介绍Flutter相比React最大的优势在于,

在上层就完成了render, 避免了diff变化的层层传递. 所以性能更好.

Publish打包发布

打包和发布, 在各自的平台有一些不同的操作流程.

本文参考:
Flutter: https://flutterchina.club/
Dart: https://www.dartcn.com/

Flutter开发App简介相关推荐

  1. WordPress+Flutter开发APP教程:2.创建项目

    说明 本小节教程,将教您如何使用 Android Studio 创建一个 APP 目录 说明 开始 1.打开 Android Studio,并点击 新建flutter 项目 如下: 2.选flutte ...

  2. android 启动白屏_从细节入手改善用户体验,Flutter跨平台App开发中设置Android和iOS的启动页

    前言 flutter开发App方便快捷,就是冷启动的时候要加载dart引擎有短暂的白屏,严重影响用户体验,这个时候我们就需要设置一个启动图片,想国内大部分App那样(例如微信那个地球),启动App的时 ...

  3. 深度解析Flutter开发大厂App(强烈推荐,值得收藏)

    之前,也写过几篇关于 Flutter 的博文,最近,又花了一些时间学习研究 Flutter,完成了高仿大厂 App 项目 (项目使用的接口都是来自线上真实App抓包而来,可以做到和线上项目相同的效果) ...

  4. Flutter开发的抖音国际版

    简介 最近花了两天时间研究使用Flutter开发一个抖音国际版. 个人感觉使用Flutter开发app快得不要不要的额.  两天就基本可以开发个大概出来.   最主要是热重载,太方便实时调整UI布局了 ...

  5. 使用Flutter开发的抖音国际版

    简介 最近花了两天时间研究使用Flutter开发一个抖音国际版. 个人感觉使用Flutter开发app快得不要不要的额.  两天就基本可以开发个大概出来.   最主要是热重载,太方便实时调整UI布局了 ...

  6. Flutter开发:设置应用名称以及图标

    最近在用Flutter开发App项目,一切都是新的,一切都要学习.不过经过一段时间的开发适应和磨合,趋于稳定状态.本篇博文来分享一下Flutter设置App的应用名字和应用logo图标的方法,知识点虽 ...

  7. 基于Flutter开发的App商城

    计算机工程系 毕业设计报告 题 目: 基于Flutter框架的电子商城制作 专 业: 软件技术 班 级: 17移动互联2班 学 号: 31702160219 学生姓名: 赖康翔 指导教师: 沈大旺 完 ...

  8. 1个人,100天业余时间,用Flutter开发完一个商业APP,手握5家大厂offer

    这个一个淘电商APP,同类型的APP有花生日记.好省.折800等等,基本上一个常规电商APP该有的,这个项目都有了.目前,该项目的完成度为80%,剩余的20%因为没有后台项目支持,所以无法完成. 为啥 ...

  9. 一款基于Flutter开发的语雀APP

    基于语雀API打造APP,由Flutter开发: 可以查阅个人仓库 可以查阅团队仓库 完善地解析markdown语法 极速渲染 欢迎使用! 下载地址:levy.ren 关于我们:femessage.g ...

  10. flutter开发的某app逆向

    参考文章: 对flutter开发的某app逆向分析 [原创]一种基于frida和drony的针对flutter抓包的方法 包名:dGVjaC5lY2hvaW5nLmt1cmls 版本:3.2.1 解压 ...

最新文章

  1. 791. Custom Sort String
  2. 著名开源项目,神秘Bug影响超20000个项目,原因竟是作者删库跑路?
  3. U3D SCENEMANAGER.LOADSCENE是半异步的
  4. 【LeetCode-SQL每日一练】—— 627. 变更性别
  5. html渲染json的插件,[ json editor] 如何在网页中使用Json editor 插件
  6. css3 Gradient 背景渐变
  7. 基于Java的汽车租赁系统
  8. [Swift]LeetCode664. 奇怪的打印机 | Strange Printer
  9. Pycharm 主题背景色的配置
  10. [需求管理-6]:需求分析 - 技术可行性研究与方案设计模板
  11. 《机械原理》上 学后感
  12. matlab的基本语法规则_MATLAB语法规则
  13. 顺丰同城赴港IPO 有望凭借高增速和生态布局成为第三方即时配送平台第一股
  14. Kindle Paperwhite2测评剧本.
  15. Latex中的花体格式
  16. 实验室gpu服务器集群 使用方法探索
  17. tempo jsnode扩展 3d图形支持。
  18. 迪恩素材教程资源图片下载站源码 dz社区论坛discuz 模板
  19. 8CRM客户案例分享
  20. 回声状态网络(ESN)教程

热门文章

  1. 网络调试助手(模拟下位机收发数据)快速指南
  2. 二广高速公路4标段道路设计--武汉理工大学本科生毕业设计
  3. android18lazuli,Free 18 Japan for you on AliExpress.
  4. layui 勾选不联动父项 树形控件,treetable-lay
  5. 通达oa php漏洞,通达OA前台任意用户登录漏洞
  6. 【单片机基础篇】共阴级四位数码管
  7. EduCoder_web实训作业--JavaScript学习手册八:JS函数
  8. 苹果手机如何上传文件到服务器,有限条件下,如何将IPhone手机照片传到Windows电脑中?...
  9. vba随机抽取人名不重复_excel启用宏,通过vba实现从数字数组里随机获取N个不重复的数字...
  10. SOUI自定义控件(4)