

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