Fix timer keeps active when resampling disabled in some cases (#97197)

This commit is contained in:
wangying 2022-02-09 18:25:06 +08:00 committed by GitHub
parent 3669e3669a
commit 499e900e39
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 0 deletions

View File

@ -180,6 +180,7 @@ class _Resampler {
}
_resamplers.clear();
_frameTime = Duration.zero;
_timer?.cancel();
}
void _onSampleTimeChanged() {

View File

@ -123,4 +123,20 @@ void main() {
expect(events[3].timeStamp, currentTestFrameTime() + kSamplingOffset);
expect(events[3], isA<PointerUpEvent>());
});
testWidgets('Timer should be canceled when resampling stopped', (WidgetTester tester) async {
// A timer will be started when event's timeStamp is larger than sampleTime.
final ui.PointerDataPacket packet = ui.PointerDataPacket(
data: <ui.PointerData>[
ui.PointerData(
timeStamp: Duration(microseconds: DateTime.now().microsecondsSinceEpoch),
),
],
);
GestureBinding.instance.resamplingEnabled = true;
ui.window.onPointerDataPacket!(packet);
// Expected to stop resampling, but the timer keeps active if _timer?.cancel() not be called.
GestureBinding.instance.resamplingEnabled = false;
});
}