第二十三回:Flutter中的事件处理

文章介绍了Flutter中的事件处理机制,重点讲解了PointerEvent类和Listener组件。PointerEvent用于封装触摸事件,而Listener作为Widget,允许开发者监听并响应这些事件,如down、up和move。通过onPointerDown、onPointerMove和onPointerUp属性,可以绑定处理函数来处理不同类型的触摸事件,同时提供了事件的位置信息。文章提供了示例代码,展示如何在Text组件中应用这些事件处理方法。


我们在上一章回中介绍了对齐和边距类Widget相关的内容,,本章回中将介绍 事件处理相关的知识.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在这里说的事件表示点击和滑动屏幕时触发的事件,类似Android中的TouchEvent.Flutter提供了PointerEvent类及其子类来封装不同类型的事件。同时还提供了Listener组件来管理事件,当事件被触发后Listener将把事件传递到相应的组件上,进而完成组件对事件的响应。本章回中将详细介绍该组件的使用方法。

使用方法

Listener也是一个Widget,它的使用方法类似容器类Widget,它提供了相关的属性用来处理不同类型的事件,它还提供了一个child属性,它把事件传递给该属性对应的组件,进而让组件来响应不同的事件。接下来我们介绍一下Listener提供的属性。

  • onPointerDown属性,用来响应down事件,比如手指在屏幕上按下时就会触发这类事件;
  • onPointerUp属性,用来响应up事件,比如手指在屏幕上松开时就会触发这类事件;
  • onPointerMove属性,用来响应move事件,比如手指在屏幕上滑动时就会触发这类事件;

Listener还提供了其它的属性,这里不再一一介绍。这三个属性是Listener中常用的属性,这三个属性已经可以满足决大部分的程序需求。

给这三个属性赋值时需要使用带有参数的方法,这里的参数必须是PointerEvent类及其子类的对象,从参数中可以获取到事件类型,以及其它与事件相关的信息,常用的是触发事件点的坐标。我们可以通过PointerEvent类的position属性来获取到事件的坐标值。

示例代码

  void _eventDown(PointerDownEvent event) => print("Event Down: position:${event.position}");
  void _eventUp(PointerEvent event) => print("Event Up: position:${event.position}");
  void _eventMove(PointerEvent event) => print(
      "Event Move: position:${event.position} transform: ${event.transform},delta: ${event.delta}");
Listener(
  onPointerDown: _eventDown,
  onPointerMove: _eventMove,
  onPointerUp: _eventUp,
  child: const Text(
    "Event Listener inside",
    style: TextStyle(
      color: Colors.black87,
      fontSize: 16,
      backgroundColor: Colors.white,
    ),
  )),

上面的代码中定义了三个方法,把它们分别赋值给不同的属性,这样可以响应不同类型的事件。在三个方法中我们打印出了事件的类型,以及事件触发点的坐标值。最后我们把Text组件赋值给了Listener的child属性,这相当于让Text组件来响应不同类型的事件。

我们在这里只列出了核心代码,完成的代码可以到Github上ex014文件中查看。编译并且运行上面的程序,就会出现一个白底黑字区域,点击此区域时就会触发相应的事件,大家可以在日志中看到代码中打印出的内容。我们在这里就不演示日志的内容了,建议看官们自动动手试一试。

看官们,关于"Flutter中事件处理"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

setState() or markNeedsBuild() called when widget tree was locked. This BetterPlayerSubtitlesDrawer widget cannot be marked as needing to build because the framework is locked. The widget on which setState() or markNeedsBuild() was called was: BetterPlayerSubtitlesDrawer state: _BetterPlayerSubtitlesDrawerState#42f65 When the exception was thrown, this was the stack: #0 Element.markNeedsBuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:5193:9) #1 Element.markNeedsBuild (package:flutter/src/widgets/framework.dart:5203:6) #2 State.setState (package:flutter/src/widgets/framework.dart:1224:15) #3 _BetterPlayerSubtitlesDrawerState._updateState (package:better_player_plus/src/subtitles/better_player_subtitles_drawer.dart:79:7) #4 ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:437:24) #5 ValueNotifier.value= (package:flutter/src/foundation/change_notifier.dart:559:5) #6 VideoPlayerController.pause (package:better_player_plus/src/video_player/video_player.dart:442:5) #7 BetterPlayerController.pause (package:better_player_plus/src/core/better_player_controller.dart:584:34) #8 BetterPlayerController.dispose (package:better_player_plus/src/core/better_player_controller.dart:1207:9) #9 _BetterPlayerState.dispose (package:better_player_plus/src/core/better_player.dart:115:23) #10 StatefulElement.unmount (package:flutter/src/widgets/framework.dart:5840:11) #11 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2078:13) #12 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #13 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:7012:16) #14 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #15 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #16 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #17 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #18 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #19 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #20 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #21 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #22 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #23 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #24 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #25 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #26 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #27 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #28 MultiChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:7012:16) #29 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #30 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #31 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #32 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #33 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #34 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #35 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #36 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #37 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #38 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #39 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #40 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #41 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #42 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #43 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #44 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #45 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #46 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #47 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #48 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #49 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #50 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #51 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #52 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #53 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #54 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #55 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #56 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #57 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #58 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #59 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #60 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #61 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #62 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #63 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #64 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #65 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #66 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #67 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #68 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #69 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #70 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #71 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #72 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #73 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #74 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #75 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #76 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #77 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #78 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #79 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #80 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #81 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #82 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #83 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #84 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #85 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #86 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #87 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #88 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #89 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #90 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #91 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #92 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #93 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #94 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #95 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #96 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #97 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #98 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #99 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #100 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #101 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #102 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #103 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #104 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #105 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #106 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #107 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #108 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #109 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #110 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #111 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #112 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #113 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #114 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #115 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #116 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #117 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #118 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #119 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #120 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #121 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #122 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #123 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #124 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #125 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #126 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #127 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #128 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #129 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #130 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #131 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #132 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #133 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #134 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #135 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #136 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #137 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #138 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #139 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #140 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #141 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #142 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #143 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #144 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #145 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6900:14) #146 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #147 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #148 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #149 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #150 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #151 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #152 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #153 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #154 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #155 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #156 _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:2076:7) #157 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5683:14) #158 _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:2074:13) #159 ListIterable.forEach (dart:_internal/iterable.dart:49:13) #160 _InactiveElements._unmountAll (package:flutter/src/widgets/framework.dart:2087:25) #161 BuildOwner.lockState (package:flutter/src/widgets/framework.dart:2954:15) #162 BuildOwner.finalizeTree (package:flutter/src/widgets/framework.dart:3264:7) #163 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1183:19) #164 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:475:5) #165 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1397:15) #166 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1318:9) #167 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1176:5) #168 _invoke (dart:ui/hooks.dart:312:13) #169 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:427:5) #170 _drawFrame (dart:ui/hooks.dart:283:31) The VideoPlayerController sending notification was: VideoPlayerController#77d27(VideoPlayerValue(duration: 0:51:26.720000, size: Size(1920.0, 960.0), position: 0:00:08.695000, absolutePosition: null, buffered: [DurationRange(start: 0:00:00.000000, end: 0:00:08.695000)], isPlaying: false, isLooping: false, isBuffering: false, volume: 1.0, errorDescription: null)) ==================================================================================================== E/flutter (17057): [ERROR:f. 问题还在
最新发布
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值