Насколько я понимаю, они избавляются от всего за вас, поэтому, если вы больше не будете использовать их виджет, все будет правильно удалено.
Вот код, о котором я говорю:
@override
void dispose() {
_camera.dispose().then((_) {
_barcodeDetector.close();
_faceDetector.close();
_imageLabeler.close();
_cloudImageLabeler.close();
_recognizer.close();
_cloudRecognizer.close();
});
_currentDetector = null;
super.dispose();
}
Действительно, когда объект удаляется из дерева виджетов, он вызывает его метод dispose . Поэтому программисты используют это, чтобы закрыть вещи, которые больше не нужны (например, камеру в вашем случае).
Пожалуйста, отметьте https://api.flutter.dev/flutter/widgets/State/dispose.html, чтобы узнать больше об утилизации.
Предупреждение с Navigator.pu sh
Если вы используете Navigator.pu sh, флаттер не уничтожает виджет. Вы должны использовать метод deactivate, чтобы что-то делать, когда вызывается Navigator.pu sh. Там вы можете либо вызвать метод dispose своего виджета, либо скрыть его от своего дерева, установив для переменной _isVIsible значение false. В противном случае просто используйте Navigator.pushReplacement, который удалит виджет должным образом.