flutter 组件
基本组件
StatefulWidget
生命周期
didUpdateWidget
只要父组件调用setState方法,无论是否修改了子组件内的值,都会调用此方法
oldWidget
携带了状态变化之前的数据对象。
Scaffold
resizeToAvoidBottomInset
是否调整屏幕的大小以避免键盘遮挡住其中的元素,默认为真。
容器
Container
alignment
内部元素的对齐方式
alignment: Alignment.center,
width
宽度
width: double.infinity,// 宽度占满父元素
constraints
盒容器的约束。
decoration
装饰,通常使用 BoxDecoration
SizedBox
一个具有指定大小的盒容器。
SizedBox.shrink()
父组件允许的最小容器,默认大小0x0,可以用来占位。
AspectRatio
一个固定比例的容器
aspectRatio
宽高比
AspectRatio(
aspectRatio: 16 / 9, // 宽/高
child: Container(
color: Colors.deepPurple,
),
),
SafeArea
一个安全的小部件容器,可以保证子级小部件不会因为屏幕的形状产生变化,比如让状态栏显示再水滴屏刘海屏下方。
Stack
绝对定位容器。
alignment
设置子元素的位置。
alignment: Alignment.centerLeft,
ConstrainedBox
用于指定子元素所占空间大小的容器
ConstrainedBox(
constraints: const BoxConstraints(minHeight: 150, minWidth: 250),
child: const Card(child: Text("hello ConstrainedBox")),
)
使用BoxConstraints可以指定子元素的最大最小宽高
DecoratedBox
一个使用BoxDecoration做装饰的容器。
DecoratedBox(
decoration: BoxDecoration(
),
child:
)
Spacer
一个占位元素,多用于Row和Column
这个元素总会占用一定的空间,可以与Expanded结合使用,通过flex来确定大小
Row(
children: const <Widget>[
Text('Begin'),
Spacer(), // flex默认为1
Text('Middle'),
Spacer(flex: 2), // 占用2/3的剩余空间
Text('End'),
],
)
Divider
显示一个分割线。
GridView
显示一个可滚动的二维小部件数组。
网格布局,类似表格
GridView.count
显示固定的children
GridView.count(
crossAxisCount: 3,
padding: const EdgeInsets.all(10.0),
mainAxisSpacing: 20,
crossAxisSpacing: 10,
childAspectRatio: 2,
children: [
ElevatedButton(
child: const Text('选择城市'),
onPressed: () => Get.toNamed(Routes.CITY_SELECT),
),
],
)
crossAxisCount
每行显示的个数
childAspectRatio
每个元素的宽高比
默认1为正方形,此时元素本身的大小是不起作用的
mainAxisSpacing
纵向间距
crossAxisSpacing
横向间距
ListView
physics
当用户上下滑动时,如何响应滚动视图。
NeverScrollableScrollPhysics
不允许滚动。
itemExtent
强制子项在其滚动的方向上,拥有指定的范围。
Visibility
控制子组件的显隐
maintainState
是否保持子组件的状态,默认为false
visible
子组件是否显示
Listener
用于监听触摸事件
Listener(
child: ConstrainedBox(
constraints: BoxConstraints.tight(Size(200, 200)),
child: Center(
child: Text('click me'),
)
),
onPointerDown: (event) => print("onPointerDown")
)
behavior
表示命中过程的表现策略
deferToChild
取决于子级是否命中
opaque
子级没有命中时,仍然返回true
translucent
子级没有命中时,仍然可以响应触摸事件,但是返回的hitTest为false,以便可以继续向上冒泡
按钮
IconButton
tooltip
语义,长按会显示提醒
padding
内部间距,设定之后,icon的大小会适当缩小。
TextButton
onPressed
当为null时,按钮不可点击。
元素
Text
显示一段文本
maxLines
最大行数,超过的内容会被截取
overflow
截取字符串的形式
ellipsis
在截取的末尾显示...
textAlign
文本的对齐方式
style
文本样式
Text(content,
maxLines: maxLines,
textAlign: maxLines == 1 ? TextAlign.right : textAlign,
overflow: TextOverflow.ellipsis,
style: Theme
.of(context)
.textTheme
.subtitle2
?.copyWith(fontSize: 14.0),
)
Image
Image.asset
color
该属性可以从像素级修改图片原本的颜色
表单
Form
用于将多个表单字段小部件组合在一起的容器。
每个单独的表单字段都应该包装在一个 [FormField] 中。
使用[GlobalKey.currentState]获取Form的上下文。
//在整个应用程序中唯一的密钥,可以获取Form的上下文
final GlobalKey<FormState> _formKey = GlobalKey();
Form(
key: _formKey,
child: ...
)
在子组件中,可以通过 [Form.of] 获取上下文。
if (_formKey.currentState!.validate()) {
//表单验证通过
}
autovalidateMode
自动验证模式,设置此模式会自动验证表单下的所有字段。
disabled
不验证
always
总是进行验证
onUserInteraction
用户输入的时候进行验证。
TextFormField/TextField
包含 [TextField] 的 [FormField]。
不必须使用 [Form] 祖先。
可以通过controller设置和获取值。
final TextEditingController _passwordController = TextEditingController();
TextFormField(
//通过_passwordController.text可以设置和获取表单的值
controller: _passwordController,
)
obscureText
是否是密码域
obscureText: true,
decoration
InputDecoration,用于设置边框、标签、图标和样式。
autovalidateMode
自动验证模式
validator
验证方法,参数是该字段的值,如果返回字符串,表明验证失败,会在表单下方显示红色的错误信息。
validator: (value) {
if (ValidUtil.isStringEmpty(value)) {
return "请输入原密码";
}
},
inputFormatters
用于限制输入的内容,接收一个 TextInputFormatter 类型的集合
官方提供了两个默认的实现类,LengthLimitingTextInputFormatter 和 FilteringTextInputFormatter
TextFormField(
inputFormatters: [
LengthLimitingTextInputFormatter(5),
FilteringTextInputFormatter.allow(RegExp("[a-z]")),
FilteringTextInputFormatter.deny(RegExp("[a-g]"))
],
)
LengthLimitingTextInputFormatter
用于限制输入内容的长度
FilteringTextInputFormatter
限制输入内容的正则表达式,分为allow(允许)和deny(禁止)两种
FilteringTextInputFormatter.digitsOnly
限制输入只能为数字
TextEditingValue
TextInputFormatter 返回一个TextEditingValue,用于确定文字的内容和光标位置
baseOffset
光标的起始位置
extentOffset
光标的结束位置
- 若起始位置和结束位置一样,则不选择任何内容
- 《=0的位置代表开头
也可以使用
TextSelection.collapsed(offset: selectionIndex)
来设定光标的位置,此时起始位置和结束位置相同。
autofocus
默认为false,表示不自动获取焦点
InputDecoration? decoration
TextStyle? labelStyle
标题样式
String? hintText
提示文字
TextStyle? hintStyle
提示文字的样式
EditableText
可编辑的文本
EditableText(
backgroundCursorColor: Colors.transparent,
controller: _controller,
cursorColor: Colors.transparent,
cursorWidth: 0,
focusNode: _focusNode,
style: const TextStyle(fontSize: 18, color: Colors.transparent),
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
LengthLimitingTextInputFormatter(6)
],
textAlign: TextAlign.center,
onChanged: (v) {
},
)
backgroundCursorColor
在渲染浮动光标时绘制与文本对齐的背景光标时使用的颜色。没发现用处,不能为空。
controller
控制正在编辑的文本。
cursorColor
光标的颜色
cursorWidth
光标的宽度
focusNode
焦点
style
文本样式
keyboardType
键盘类型
inputFormatters
文本过滤
textAlign
文本对齐
onChanged
文本发生变化时触发事件
动画
AnimationController
动画控制器,可以控制动画的播放和停止,将动画设置为特定的值。
构造函数中需要使用vsync: this,所以必须混入TickerProvider。
默认情况下,线性的产生0.0-1.0的动画,每秒60帧。
不需要时应该dispose,避免内存泄漏。
forwoard
开始向前运行动画
from
起始值
CurvedAnimation
动画曲线。
Curves
linear
线性动画曲线,单位间隔恒等映射。
decelerate
先快后慢
fastLinearToSlowEaseIn
开始很快,然后变平并且非常缓慢
ease
慢-快-慢,三次动画曲线
easeIn
缓慢开始,快速结束,三次动画曲线
easeInToLinear
缓慢开始,线性结束,三次动画曲线
easeOut
快速开始,缓慢结束,三次动画曲线
linearToEaseOut
线性开始,缓慢结束,三次动画曲线
easeInOut
缓慢开始,加速,然后缓慢结束的三次动画曲线
fastOutSlowIn
快出慢入
slowMiddle
快速开始、减速然后快速结束的三次动画曲线
bounceIn
幅度增长的振荡曲线。
bounceOut
幅度减小的振荡曲线。
bounceInOut
幅度先增大然后减小的振荡曲线。
elasticIn
一条振荡曲线,其幅度在超过其界限时增长。
elasticOut
一条振荡曲线,其幅度在超过其界限时减少。
elasticInOut
一条振荡曲线,在超出其界限的同时在幅度上增长然后缩小。
easeInSine
缓慢开始,快速结束,三次动画曲线,但是比较温和,很难与linear区分。
easeInQuad,easeInCubic,easeInQuart,easeInQuint,easeInExpo
缓慢开始,快速结束,三次动画曲线,按上述顺序,逐渐陡峭一些。
easeInCirc,easeInBack
缓慢开始,快速结束,三次动画曲线
easeOutSine
快速开始,缓慢结束,三次动画曲线,但是比较温和,很难与linear区分。
easeOutQuad,easeOutCubic,easeOutQuart,easeOutQuint,easeOutExpo
快速开始,缓慢结束,三次动画曲线,按上述顺序,逐渐陡峭一些。
easeOutCirc,easeOutBack
快速开始,缓慢结束,三次动画曲线
easeInOutSine
缓慢开始,加速,然后结束的三次动画曲线,但是比较温和
easeInOutQuad,easeInOutCubic,easeInOutCubicEmphasized,easeInOutQuart,easeInOutQuint,easeInOutExpo,easeInOutCirc
缓慢开始,加速,然后结束的三次动画曲线,按上述顺序,逐渐陡峭一些。
easeInOutBack
缓慢开始,加速,然后结束的三次动画曲线
Tween
开始值和结束值之间的线性插值。通过泛型指定其类型。
begin
开始值
end
结束值
animate
缓动曲线
AnimatedBuilder
用于构建动画的通用小部件。
animation
指定监听哪个动画。
SingleTickerProviderStateMixin
在只有一个动画的时候,可以混入此类,然后将vsync: this
传递给动画控制器构造参数。
TickerProvider是Ticker对象的工厂,Ticker是一个对象,可以在每一帧触发一个回调,用于执行动画。
由于只需要一个Ticker,该类的效率比TickerProviderStateMixin高。
Animation
一个T类型的动画。让其他对象监听其值或状态的变化。
AppBar
automaticallyImplyLeading
判断前面是否有其他页面,以自动显示返回按钮。
backgroundColor
背景颜色
Widget? title
标题
IconThemeData? iconTheme
返回按钮的主题
不常用
Material
底层材质小部件。没有什么实际效果,可以用来设置样式。
TextPainter
用于绘制文本
InlineSpan? text
文本
maxLines
最大行数
textDirection
文本方向
layout()
计算文本的视觉位置,在调用之前,[text] 和 [textDirection] 属性必须为非空
InlineSpan
构成段落的一部分内联文本
Semantics
语义小部件,其实大多数情况下没什么用。
namesRoute
节点是否包含路由
header
是否代表应用程序头部,多用在自定义状态栏
RepaintBoundary
用于直接合成视图,避免重绘
MergeSemantics
合并后代语义的小部件。
将子级的所有语义合并为语义树中的一个节点。
本文来自博客园,作者:Bin_x,转载请注明原文链接:https://www.cnblogs.com/Bin-x/p/16853245.html