前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter - 处理手势

Flutter - 处理手势

作者头像
AnRFDev
发布2021-02-01 15:18:48
1.3K0
发布2021-02-01 15:18:48
举报
文章被收录于专栏:AnRFDevAnRFDev

Flutter - 处理手势

点击,滑动等等手势。

处理点击

步骤

  • 创建自定义button类
  • 在其中使用GestureDetector并复写onTap回调

代码实现

代码语言:javascript
复制
import 'package:flutter/material.dart';

/// 自定义button
class ButtonSample1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        final snackBar = SnackBar(content: Text("Now you tap the $this"),);
        Scaffold.of(context).showSnackBar(snackBar);
      },
      child: Container(
        padding: EdgeInsets.all(12.0),
        margin: EdgeInsets.all(12.0),
        decoration: BoxDecoration(color: Theme
            .of(context)
            .buttonColor,
            borderRadius: BorderRadius.circular(8.0)),
        child: Text("$this"),),
    );
  }

}

参考: https://flutter.io/cookbook/gestures/handling-taps/

带波纹效果的按钮

使用InkWell

代码语言:javascript
复制
/// 带有波纹效果的按钮
class ButtonSample2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: () {
        final snackBar = SnackBar(content: Text("Now you tap the $this"),);
        Scaffold.of(context).showSnackBar(snackBar);
      },
      child: Container(
        padding: EdgeInsets.all(12.0),
        child: Text("$this"),
      ),
    );
  }
}

Flutter提供的按钮控件还有RaisedButtonFlatButton

列表侧滑删除

步骤:

  • 创建一个列表
  • Dismissible包装每一个item
  • 提供删除时的UI显示

创建列表

代码语言:javascript
复制
final items = List<String>.generate(10, (i) => "Item $i");

创建字符串列表。这个列表不能放在build中,要定义为State的全局变量。 否则删除item时,无法从view tree中移除item,从而报错。

删除时的UI

设置Dismissible的background,可以在删除时显示。

示例界面代码

代码语言:javascript
复制
import 'package:flutter/material.dart';

/// 侧滑删除列表界面
class SwipeToDismissPage extends StatefulWidget {
  SwipeToDismissPage({Key key}) : super(key: key);

  @override
  State<StatefulWidget> createState() {
    return SwipeState();
  }
}

class SwipeState extends State<SwipeToDismissPage> {
  final items = List<String>.generate(10, (i) => "Item $i"); // 列表必须放在外面定义

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          "Swipe to dismiss",
        ),
      ),
      body: ListView.builder(
          itemCount: items.length,
          itemBuilder: (context, index) {
            final item = items[index];
            return Dismissible(
              key: Key(item),
              onDismissed: (direction) {
                setState(() {
                  items.removeAt(index);
                  print(direction);
                });
                Scaffold.of(context)
                    .showSnackBar(SnackBar(content: Text('remove $item')));
              },
              child: ListTile(
                title: Text('$item'),
              ),
              background: Container(
                color: Colors.red,
              ),
            );
          }),
    );
  }
}

选择GestureDetector的响应形式

代码语言:javascript
复制
behavior: HitTestBehavior.opaque

https://docs.flutter.io/flutter/rendering/HitTestBehavior-class.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Flutter - 处理手势
    • 处理点击
      • 步骤
    • 列表侧滑删除
      • 创建列表
      • 删除时的UI
    • 选择GestureDetector的响应形式
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档