dispose method
IMPORTANT: call this from your widget's dispose(), same as any
other ChangeNotifier-based controller (e.g. a TextEditingController).
Implementation
@override
void dispose() {
_disposed = true;
_holdTimer?.cancel();
unawaited(_releaseCamera());
super.dispose();
}