什么是Widget?
一切皆是Widget,Widget是Flutter应用用户界面的基本单元,每个Widget都与最终的用户界面的展示紧紧相关
MaterialApp
Meterial应用以MaterialApp Widget开始,主要封装了应用程序实现Metrial Design所需要的一些配置
常用基础控件
text
image :要配置yaml文件,格式必须正确,缩进两位
线性布局:是指沿水平方向或者垂直方向排列子布局,flutter中荣国row(横向,行)或者column(纵向,列)来实现线性布局
弹性布局:弹性布局允许子控件按照一定比例来分配父容器空间,flutter中的弹性布局主要依靠flex和expanded来配合实现
层叠布局:层叠布局能够将子控件层叠排列,flutter中stack允许子组件堆叠,而positioned用于根据stack的四个角来确定子组件的位置
Listview Gridview: 通过build来大量创建item
路由:在flutter中,屏(screen)和页面(pager)都叫做路由(route),路由管理,就是管理页面之间如何跳转,在flutter中维护一个路由栈,路由入栈操作对应打开一个新页面,路由出栈对应关闭一个新页面,而路由管理主要是指如何来管理路由栈
通过onPressd触发点击事件,Navigator.push()进行入住管理,Navigator.pop()出栈管理
onPressed: () {
Navigator.push(context, MaterialPageRoute(builder: (context)=>SecondRoute()));
},
Flutter动画
控件与交互
基础动画
路由动画 默认MaterialPageRoute动画效果,还可以自定义。
hero动画(共享动画)hero标签,tag必须一致
交织动画
Flutter手势
指针和手势
指针事件:
PointerDownEvent:指针在特定位置与屏幕接触
PointerMoveEvent:指针从屏幕一个位置移动到另一个位置
PointerUpEvent:指针与屏幕停止接触
PointerCancelEvent:指针的指向已经不再指向该应用。
HitTestBehavior
deferToChild:子组件会一个接一个的进行命中测试,如果子组件收到事件,父级组件也会收到该事件
opaque:在命中测试时,将当前组件当成不透明处理(即时本身透明)
translucent:当点击组件透明区域时,可以对自身边界内及底部可视区域都进行命中测试
忽略指针事件
IngorePointer:阻止子树接受指针事件,本身不会参与命中测试
AbsorbPointer:组织子树接受指针事件,本身参与命中事件
手势
GestureDetector:用于手势识别的功能性组件,可以识别各种手势,是指针事件的语义化封装,内部使用一个或多个GestureRecognizer
GestureRecognizer:通过Listener将原始指针事件转化为语义手势
平台集成
flutter client通过MethodChannel反射iOS端和Android的插件,通过通道得到原生方法的执行。
总结:
目前学习flutter只是一套ui框架,包括申请权限,调用摄像头,读写文件还是需要在各个平台开发。