flutter 中的widget,flutter不像html所有标签都可以添加一些交互事件, 不是所有widget都可以直接添加监听事件的。只有一些按钮和一些专门的widget来处理手势。
按钮
| 按钮的属性 | |
|---|---|
| 属性 | 说明 |
| onPressed | 必填参数,按下按钮时触发的回调,接收一个方法,传null表示按钮禁用,会显示禁用相关样式 |
| style | 通过ButtonStyle装饰 |
| child | 组件子元素 |
| ButtonStyle的属性 | |
|---|---|
| 属性 | 说明 |
| foregroundColor | 文本颜色 |
| backgroundColor | 按钮背景颜色 |
| shadowColor | 阴影颜色 |
| elevation | double类型 阴影的范围,值越大阴影范围越大 |
| padding | 内边距 |
| shape | 设置按钮的形状 |
| side | 设置边框 MaterialStateProperty.all(BorderSide(width:1,color:Colors.red)) |
ElevatedButton 普通的按钮,默认带有阴影和背景色,按下后有动画
ElevatedButton(
onPressed: () {},
child: const Text("普通按钮")
)
TextButton 文本按钮,啥也没有,按下后有动画
TextButton(
child: Text("文本按钮"),
onPressed: () {},
)
OutlinedButton 外边框按钮,自带外边框
OutlinedButton(
child: Text("边框按钮"),
onPressed: () {},
)
IconButton 是一个可点击的icon,不包括文字,
IconButton(
icon: Icon(Icons.thumb_up),
onPressed: () {},
)
带图标的按钮
ElevatedButton,OutlinedButton,TextButton 都有一个icon的构造函数,可以添加一个带有icon的按钮
ElevatedButton.icon(
icon: Icon(Icons.send),
label: Text("发送"),
onPressed: _onPressed,
),
OutlineButton.icon(
icon: Icon(Icons.add),
label: Text("添加"),
onPressed: _onPressed,
),
TextButton.icon(
icon: Icon(Icons.info),
label: Text("详情"),
onPressed: _onPressed,
),
GestureDetector
如果它有一个孩子,它会遵从那个孩子的大小调整行为。如果它没有孩子,它会成长以适应父组件。简单看一些它的事件,
- onDoubleTap: 双击
- onDoubleTapCancel: 双击取消(触发条件是,先前触发 onDoubleTapDown 的事件,但是却没有触发onDoubleTapend事件导致双击取消。)
- onLongPress: 长按(当识别出带有主按钮的长按手势时调用。)
- onTap: 发生了带有主按钮的点击。
还有一大堆事件有需要可以参考官方文档:api.flutter-io.cn/flutter/wid…
例子
GestureDetector(
onTap: () {
print('on tap !'); // 点击打印出来on tap
},
child:Text('hello tap'),
),