实现此功能需要3个触发事件
1.识别长按开始
2.识别长按结束
3.在开始和结束之间,自动按时间间隔执行按钮点按的操作
写出对应的事件代码
final Observable timer =
Observable.periodic(Duration(milliseconds: 100)).asBroadcastStream();
final PublishSubject longPressGesBeganSignal = PublishSubject();
final PublishSubject longPressGesEndedSignal = PublishSubject();
然后在initState中,对事件按需求进行变换
@override
void initState() {
super.initState();
longPressGesBeganSignal.flatMap((_) {
return timer.takeUntil(longPressGesEndedSignal);
}).listen(plusBtnOnclick);
}
在build方法中,GestureDetector的实例需要在onLongPressStart和onLongPressEnd回调中,调用add方法为对应的PublishSubject实例添加事件
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
plusBtnOnclick(null);
},
onLongPressStart: (longPressEndDetails) {
longPressGesBeganSignal.add('began');
},
onLongPressEnd: (longPressEndDetails) {
longPressGesEndedSignal.add('end');
},
child: Container(
child: Center(
child: Text('+'),
),
),
),