bespokeCamera method
Future<void>
bespokeCamera(
- BuildContext context,
- ShowCameraAction cameraAction,
- ScopeManager? scopeManager
Opens Ensemble's custom camera widget.
Implementation
Future<void> bespokeCamera(BuildContext context,
ShowCameraAction cameraAction, ScopeManager? scopeManager) async {
Widget? overlayWidget;
Widget? loadingWidget;
if (cameraAction.overlayWidget != null) {
overlayWidget = buildOverlayWidget(scopeManager, cameraAction);
}
if (cameraAction.loadingWidget != null) {
loadingWidget = buildLoadingWidget(scopeManager, cameraAction);
}
Camera camera = Camera(
overlayWidget: overlayWidget,
loadingWidget: loadingWidget,
onCapture: cameraAction.onCapture == null
? null
: () {
ScreenController()
.executeAction(context, cameraAction.onCapture!);
},
onComplete: cameraAction.onComplete == null
? null
: () {
ScreenController()
.executeAction(context, cameraAction.onComplete!);
},
onError: cameraAction.onError == null
? null
: (error) {
ScreenController().executeAction(
context,
cameraAction.onError!,
event: EnsembleEvent(
null,
error: error.toString(),
),
);
},
);
if (cameraAction.id != null) {
final previousAction =
scopeManager?.dataContext.getContextById(cameraAction.id!) as Camera?;
if (previousAction != null) camera = previousAction;
scopeManager?.dataContext.addInvokableContext(cameraAction.id!, camera);
}
if (cameraAction.options != null) {
if (cameraAction.options!['assistAngle'] != null) {
camera.setProperty('assistAngle', true);
for (var option in cameraAction.options!['assistAngle'].keys) {
final property = _angleAssistOptions[option];
if (property != null) {
camera.setProperty(
property, cameraAction.options!['assistAngle']![option]);
}
}
}
if (cameraAction.options!['assistSpeed'] != null) {
camera.setProperty('assistSpeed', true);
for (var option in cameraAction.options!['assistSpeed'].keys) {
final property = _speedAssistOptions[option];
if (property != null) {
camera.setProperty(
property, cameraAction.options!['assistSpeed']![option]);
}
}
}
for (var option in cameraAction.options!.keys) {
final property = _optionMappings[option];
if (property != null) {
final value =
scopeManager?.dataContext.eval(cameraAction.options![option]);
camera.setProperty(property, value);
}
}
}
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => camera,
),
);
if (cameraAction.onClose != null) {
try {
// ignore: use_build_context_synchronously
ScreenController().executeAction(context, cameraAction.onClose!);
} catch (_) {}
}
if (cameraAction.id != null) {
scopeManager?.dispatch(
ModelChangeEvent(WidgetBindingSource(cameraAction.id!), camera));
}
}