cancel sensor subscription when dispose

This commit is contained in:
Mark Hu 2020-12-21 16:55:08 +08:00
parent 90dab5cd65
commit 21130bad54

View file

@ -114,6 +114,8 @@ class _PanoramaState extends State<Panorama> with SingleTickerProviderStateMixin
AnimationController _controller; AnimationController _controller;
double screenOrientation = 0.0; double screenOrientation = 0.0;
Vector3 orientation = Vector3(0, radians(90), 0); Vector3 orientation = Vector3(0, radians(90), 0);
StreamSubscription _orientationSubscription;
StreamSubscription _screenOrientSubscription;
void _handleScaleStart(ScaleStartDetails details) { void _handleScaleStart(ScaleStartDetails details) {
_lastFocalPoint = details.localFocalPoint; _lastFocalPoint = details.localFocalPoint;
@ -231,14 +233,14 @@ class _PanoramaState extends State<Panorama> with SingleTickerProviderStateMixin
switch (widget.sensorControl) { switch (widget.sensorControl) {
case SensorControl.Orientation: case SensorControl.Orientation:
motionSensors.orientationUpdateInterval = Duration.microsecondsPerSecond ~/ 60; motionSensors.orientationUpdateInterval = Duration.microsecondsPerSecond ~/ 60;
motionSensors.orientation.listen((OrientationEvent event) { _orientationSubscription = motionSensors.orientation.listen((OrientationEvent event) {
orientation.setFrom(Vector3(event.yaw, event.pitch, event.roll)); orientation.setFrom(Vector3(event.yaw, event.pitch, event.roll));
_updateView(); _updateView();
}); });
break; break;
case SensorControl.AbsoluteOrientation: case SensorControl.AbsoluteOrientation:
motionSensors.absoluteOrientationUpdateInterval = Duration.microsecondsPerSecond ~/ 60; motionSensors.absoluteOrientationUpdateInterval = Duration.microsecondsPerSecond ~/ 60;
motionSensors.absoluteOrientation.listen((AbsoluteOrientationEvent event) { _orientationSubscription = motionSensors.absoluteOrientation.listen((AbsoluteOrientationEvent event) {
orientation.setFrom(Vector3(event.yaw, event.pitch, event.roll)); orientation.setFrom(Vector3(event.yaw, event.pitch, event.roll));
_updateView(); _updateView();
}); });
@ -256,6 +258,8 @@ class _PanoramaState extends State<Panorama> with SingleTickerProviderStateMixin
@override @override
void dispose() { void dispose() {
_orientationSubscription?.cancel();
_screenOrientSubscription?.cancel();
_controller.dispose(); _controller.dispose();
super.dispose(); super.dispose();
} }