最近学习了一周flutter,做了一下笔记,之前看到一个推荐入门的视频,初步看了一下很不错,推荐给大家。全新升级小码哥Flutter实战教学完整版附资料 ,如果有Android和IOS原生开发经验的感觉学起来是相对好理解一点。最后面也分享一下写的一个页面代码,由于最近一周公司内部的业务笔记多相对较忙,然后断断续续的学。
1、stl 回车快捷键创建 StatelessWidget。
2、如果像IOS UITableViewCell中子视图设置间距的话,可以使用SizeBox(height: 8),就是设置上下之前的控件距离8个像素,
有点类似IOS ToolBar中添加多个item时的 UIBarButtonSystemItemFlexibleSpace.
3、去掉APP展示debug LOGO时在启动 MaterialAPP内 使用debugShowCheckedModeBanner: false。
4、 关于widget 有状态的Widget:StatefulWidget在运行过程中有一些状态data数据需要改变,无状态的widget:StatelessWidget内容是确定的没有状态data数据的改变。
5、两个组件widget并排时用Row组件可以放多个组件,想要水平居中,使用Center组件包裹。想要Row里面的子元素在父widget x轴居中 使用mainAxisAlignment: MainAxisAlignment.center.
6、想要子元素垂直流水布局使用Cloumn组件,也是widget但是如果里面的元素超出手机最大长度,就是不能滚动的区域,会展示黄色条纹斑马线的多余区域,解决办法就是使用ListView 可滚动的widget。
7、使用网络加载图片Image.network(url)。
8、statelessWidget里的属性必须是不可修改的 用final修饰。并且是实现构造函数就是当前类型传进去的命名的各个参数。
9、如果使用Checkbox组件有按钮点击回调参数如 onChangeed:(value) =>flag = value.
10、@immutable注解标明的类或者子类都必须是不可变的。所以比如statelessWidget类的属性用final修饰。
11、StatefullWidget继承自StatefulWidget的类(可以接受父Widget传过来的数据/state类(状态))。StatefulWidget 要实现 createState()方法,然后实现State类 这个类就是实现可变的属性。
12、如果实现边框和内间距可以使用Container,alt + enter 快捷键可实现一个Widget快速包裹一个Container. Container其中有一个属性decoration翻译过来为装饰,BoxDecoration(border: Border.all( width: 5,//设置边框的宽度, color: Colors.purple//设置边框的颜色))。如果设置Container内间距(子视图到Container的内部间距) padding: EdgeInsets.all(8) 上下左右为8个像素的间距。
13、Text组件中的textAlign相当于IOS中的UILable中的属性textAlignment。
14、Column中属性主轴和交叉轴 mainAxisAlignment: MainAxisAlignment.center 交叉轴crossAxisAlignment: CrossAxisAlignment.start(就是开始元素在) Column中开始最左边显示。如果CrossAxisAlignment.end 从右边开始显示相当于。(Column垂直方向就是主轴,Row来说水平方向是主轴).
14、一个类中如果有@protected 如: createState()修饰表示该方法是必须实现的。widget类是不加下划线的,暴露给别人使用,State是加下划线的,状态这个类只给widget使用。为什么Flutter在设计的时候StatefulWidget的build方法放在State中?原因有 一、build出来的Widget是需要依赖State中的变量(状态/数量) 二、在运行的过程中 widget是不断的销毁和创建的。当自己的状态发生改变时,并不希望重新创建一个新的State类。
15、RaisedButton按钮组件 Raisebutton( child; Icon(Icons.add)),onPressed:()=> print("点击+")) Icon是展示图标。
16、如果在State状态类中想可变的参数和不可变的参数(接受StatefulWidget的值时),State本身会持有所归属的widget组件,所以在StatefulWidget类中之间申请属性然后直接可以使用${widget.message} 这儿的widget就是前面自定义的StatefulWidget组件 message属性就是自定义的StatefulWidget类的属性。
17、StatelessWidget的生命周期: 只有本身的构造方法和build(BuildContext context)方法。
StatefulWidget 的生命周期包括两个类widget和state,其中StatefulWidget的生命周期是Constructor、Widget.createState(). State类生命周期 先调用Constructor(构造方法)、initState(初始化状态)、didChangeDependencies(状态值发生改变的时候)、build、dispose(销毁方法),这儿如果子类中实现了initState方法,这个方法在父内中是@mustCallSuper意思是自内必须调用的。调用会对父类做一些初始化,同理dispose方法也是一样子。
18、state类里调用setState(VoidCallback fn),会去先执行fn(),然后setState里会去执行markneedsBuild()方法,然后去执行build(),刷新UI。
19、带边框的按钮OutlineButton、平坦的按钮FlatButton、浮动按钮FloatingActionButton(child: Icon(Icons.add),onPressed:()=>)、凸出的按钮RaiseButton.
20、当自定义按钮时FlatButton(color: Colors.red,child: Row(mainAxisSize: MainAxisSize.max,children: <widget>[Icon(Icons.favorite,color: Colors.red,),Text("A")]),onPressed:(){}), mainAxisSize 主轴上的大小。
21、FlatButton使用圆角时shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8))。
22、加载图片Image(image: NetworkImage("https://~")),width: 200,height:200,fit:BoxFit.fitWidth,alignment: Alignment.BottomCenter)。其中如果设置了图片的背景颜色是会覆盖在最上层,不过可以设置颜色混入模式与图片融合一体,color: Colors.red,colorBlendMode: BlendMode.colorDodge.
Read More