当前位置:网站首页>Flutter 父子组件如何都能收到点击事件
Flutter 父子组件如何都能收到点击事件
2022-08-05 04:50:00 【bawomingtian123】
在实际项目中,在使用点击事件时,由于需求设计问题,需要子组件和父组件都能收到onTap回调,故会出现类似下面demo中的源码。
按照Flutter 点击事件的设计思路,这样的源码肯定是满足不了需求,在点击组件时,只有子组件会有回调打印,父组件是没有回调的。
那父组件怎么样才能也收到长按事件呢。我们按照以下修改可以满足需求
/// Created by wuliquan on 19.7.22.
/// 测试页面
class SecondPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return SecondPageState();
}
}
class SecondPageState extends State<SecondPage> {
@override
Widget build(BuildContext context) {
return Center(
child: RawGestureDetector(
gestures: {
AllowMultipleGestureRecognizer: GestureRecognizerFactoryWithHandlers<AllowMultipleGestureRecognizer>(
() => AllowMultipleGestureRecognizer(),
(AllowMultipleGestureRecognizer instance) {
instance.onTap = () => print('tap on parent ');
},
)
},
//Parent Container
child: Container(
width: 100,
height: 100,
color: Colors.blue,
alignment: Alignment.center,
child: GestureDetector(
onLongPress: () {
print('tap on child');
},
child: Container(
width: 50,
height: 50,
color: Colors.orange,
),
),
)),
);
}
}
class AllowMultipleGestureRecognizer extends TapGestureRecognizer {
@override
void rejectGesture(int pointer) {
acceptGesture(pointer);
}
}
使用RawGestureDetector包裹手势识别器AllowMultipleGestureRecognizer
AllowMultipleGestureRecognizer是我们继承TapGestureRecognizer 复写了rejectGesture方法
@override
void rejectGesture(int pointer) {
acceptGesture(pointer);
}
重点:
这个方法在手势识别器在手势竞技场竞争失败后,我们手动处理,让它可以继续处理手势,从而我们父组件也能收到回调打印日志
这里简单说明下手势竞技的规则,在分配手势时按照深度优先的策略进行,这里由于我们只是注册了最简单的onTap回调,在底层上报up事件时,会直接返回命中测试组件列表中最后的那个组件,也就是深度最深的那个组件,也就是子组件。
以上面例子说明,在竞技场宣布子组件获胜后,会通知父组件的rejectGesture。由于我们复写了rejectGesture方法,让父手势识别器继续工作。
边栏推荐
- bytebuffer put flip compact clear 方法演示
- How to solve complex distribution and ledger problems?
- [CISCN2019 South China Division]Web11
- Application status of digital twin technology in power system
- [Surveying] Quick Summary - Excerpt from Gaoshu Gang
- Detailed explanation of each module of ansible
- 淘宝账号如何快速提升到更高等级
- 说说数据治理中常见的20个问题
- 动力小帆船制作方法简单,电动小帆船制作方法
- upload upload pictures to Tencent cloud, how to upload pictures
猜你喜欢
In the WebView page of the UI automation test App, the processing method when the search bar has no search button
AUTOCAD - dimension association
C+ +核心编程
不看后悔,appium自动化环境完美搭建
u-boot调试定位手段
[Geek Challenge 2019]FinalSQL
The log causes these pits in the thread block, you have to guard against
作业8.4 进程间的通信 管道与信号
[BJDCTF2020]EasySearch
Some conventional routines of program development (1)
随机推荐
Redis - 13、开发规范
概率论的学习和整理8: 几何分布和超几何分布
ansible各个模块详解
大学物理---质点运动学
[极客大挑战 2019]FinalSQL
flink reads mongodb data source
Feature preprocessing
Talk about 20 common problems in data governance
如何解决复杂的分销分账问题?
[8.3] Code Source - [meow ~ meow ~ meow~] [tree] [and]
七夕节赚徽章拉
University Physics---Particle Kinematics
Mysql的redo log详解
Homework 8.4 Interprocess Communication Pipes and Signals
[MRCTF2020]Ezpop(详解)
狗仔队:表面编辑多视点图像处理
LAB 信号量实现细节
Day14 jenkins部署
Please write the SparkSQL statement
Visibility of multi-column attribute column elements: display, visibility, opacity, vertical alignment: vertical-align, z-index The larger it is, the more it will be displayed on the upper layer