flutter 手势

71 阅读2分钟

flutter 中的widget,flutter不像html所有标签都可以添加一些交互事件, 不是所有widget都可以直接添加监听事件的。只有一些按钮和一些专门的widget来处理手势。

按钮

按钮的属性
属性说明
onPressed必填参数,按下按钮时触发的回调,接收一个方法,传null表示按钮禁用,会显示禁用相关样式
style通过ButtonStyle装饰
child组件子元素
ButtonStyle的属性
属性说明
foregroundColor文本颜色
backgroundColor按钮背景颜色
shadowColor阴影颜色
elevationdouble类型 阴影的范围,值越大阴影范围越大
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

如果它有一个孩子,它会遵从那个孩子的大小调整行为。如果它没有孩子,它会成长以适应父组件。简单看一些它的事件,

  1. onDoubleTap: 双击
  2. onDoubleTapCancel: 双击取消(触发条件是,先前触发 onDoubleTapDown 的事件,但是却没有触发onDoubleTapend事件导致双击取消。)
  3. onLongPress: 长按(当识别出带有主按钮的长按手势时调用。)
  4. onTap: 发生了带有主按钮的点击。

还有一大堆事件有需要可以参考官方文档:api.flutter-io.cn/flutter/wid…

例子

GestureDetector(
   onTap: () {
      print('on tap !'); // 点击打印出来on tap
   },
   child:Text('hello tap'),
),