美文网首页
Flutter学习记录-交互

Flutter学习记录-交互

作者: 薰舞空 | 来源:发表于2019-08-12 15:10 被阅读0次

Flutter学习记录-汇总

这是第三篇,会根据第一篇的成品修改,UI如下:

image.png

首先,最简单的,为左上角的back按钮增加一个点击事件

在此需要引入一个widget:GestureDetector,简单来说可以称为手势监听控件

GestureDetector能监听的属性非常多,在此仅介绍常用的几项:

onTap:点击事件
onDoubleTap:双击事件
onLongPress:长按事件

详细介绍参见:GestureDetector

加入后的代码如下:


                new GestureDetector(
                  onTap: () {
                    Navigator.maybePop(context);
                  },
                  child: new Text(
                    "back",
                    style: new TextStyle(
                        decoration: TextDecoration.none,
                        fontSize: 18,
                        color: Colors.blue),
                  ),
                ),

代码很简单,外层一个GestureDetector包含了点击事件onTap和子widget:Text

实现的效果就是点击back时该页面会自动关闭。

不过使用中发现这个效果很不好触发,原因是Text的热区太小,可以使用padding优化一下:

                new GestureDetector(
                    onTap: () {
                      //Navigator.maybePop(context);
                    },
                    child: Container(
                      height: 50,
                      alignment: Alignment.center,
                      child: new Text(
                        "back",
                        style: new TextStyle(
                            decoration: TextDecoration.none,
                            fontSize: 18,
                            color: Colors.blue),
                      ),
                    )),

这样就很容易点击了,下一步再给这个按钮增加一个点击效果

widget中,有StatelessWidget和StatefulWidget之分

简单来说,如果widget会发生变化,那么它就是StatefulWidget,显然能够变色的按钮是属于StatefulWidget的

首先声明一个StatefulWidget的Button类

class Button extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return ButtonState();
  }
}

然后需要实现他的state,也就是ButtonState

class ButtonState extends State<Button> {
  var isPress = false;

  void onButtonTapDown(TapDownDetails details) {
    setState(() {
      isPress = true;
    });
  }

  void onButtonTapUp(TapUpDetails details) {
    setState(() {
      isPress = false;
    });
  }

  void onButtonTap() {}

  void onButtonTapCancel() {
    setState(() {
      isPress = false;
    });
  }

  @override
  Widget build(BuildContext context) {
    return new GestureDetector(
      onTapDown: onButtonTapDown,
      onTapUp: onButtonTapUp,
      onTap: onButtonTap,
      onTapCancel: onButtonTapCancel,
      child: Container(
        height: 50,
        alignment: Alignment.center,
        child: new Text(
          "MORE",
          style: new TextStyle(
              decoration: TextDecoration.none,
              fontSize: 18,
              color: isPress ? Colors.red : Colors.blue),
        ),
      ),
    );
  }

在state中,定义了一个bool参数isPress来表示是否在按下状态,在build中根据isPress参数来确定color的值

而isPress参数则由onTapDown, onTapUp, onTapCancel控制,同时调用setState更新状态

然后用Button来替换上面的GestureDetector,就能得到一个按下时会显示红色的按钮了

但在这个类中,我们还需要能灵活配置的Text内容,和对点击事件的响应,所以还需要进行一些扩充

class Button extends StatefulWidget {
  final String txt;
  final GestureTapCallback onClick;

  Button({@required this.txt, @required this.onClick});

  @override
  State<StatefulWidget> createState() {
    return ButtonState(txt);
  }
}
  void onButtonTap() {
    widget.onClick();
  }
child: new Text(
          txt,
          style: new TextStyle(
              decoration: TextDecoration.none,
              fontSize: 18,
              color: isPress ? Colors.red : Colors.blue),
        ),

在Button中扩充了两个参数,text和onClick,然后在onButtonTap中调用onClick方法,在Text中使用txt参数

这样我们就有了一个有按下状态,并可以动态设置文字和点击事件的按钮了。

相关文章

  • Flutter学习记录-汇总

    Flutter学习记录-布局Flutter学习记录-页面跳转Flutter学习记录-交互Flutter学习记录-基...

  • Flutter学习记录-交互

    Flutter学习记录-汇总 这是第三篇,会根据第一篇的成品修改,UI如下: 首先,最简单的,为左上角的back按...

  • 2021-03-18

    Flutter和原生iOS交互 具体集成请看下面文章此篇记录的是集成之后的iOS界面和flutter的交互,iOS...

  • Flutter入门

    学习Flutter的入门级小Demo,<>学习记录,如图:

  • flutter webview使用及js-flutter交互

    文章:Flutter WebView与JS交互简易指南使用官方的库:webview_flutter学习可参考官方d...

  • Flutter 与Native原生交互

    学习Flutter也有一段时间了,今天来介绍一下Flutter是如何与原生交互的。 原生交互的重要性就不用说了吧。...

  • Flutter 入门学习指北

    Flutter 入门学习指北 学习 Flutter 已有两个月了,记录一下自己的学习过程,flutter 的毫秒级...

  • Flutter学习:用户交互

    flutter用户交互,首先了解一下StatelessWidget(无状态)和StatefulWidget(有状态...

  • Flutter怎么与原生交互

    Flutter与原生交互 flutter端: Andoid端: 原生调用flutter方法: NativeMeth...

  • Flutter与原生的交互

    Flutter与原生的交互

网友评论

      本文标题:Flutter学习记录-交互

      本文链接:https://www.haomeiwen.com/subject/zpcujctx.html