startCamera method
Future<int>
startCamera({
- required CameraConfig cameraConfig,
- HandConfig? handConfig,
- FaceConfig? faceConfig,
override
Implementation
@override
Future<int> startCamera({
required CameraConfig cameraConfig,
HandConfig? handConfig,
FaceConfig? faceConfig,
}) async {
// Clamp to 1-60 if set, 0 means no throttle
final maxResults = cameraConfig.maxResultsPerSecond <= 0
? 0
: cameraConfig.maxResultsPerSecond.clamp(1, 60);
final result = await _commandChannel.invokeMethod<int>('startCamera', {
'cameraFacing': cameraConfig.facing.index,
'resolution': cameraConfig.resolution.index,
'maxResultsPerSecond': maxResults,
'enableHand': handConfig != null,
'enableFace': faceConfig != null,
if (handConfig != null) ...{
'maxHands': handConfig.maxHands,
'minDetectionConfidence': handConfig.minDetectionConfidence,
'minPresenceConfidence': handConfig.minPresenceConfidence,
'minTrackingConfidence': handConfig.minTrackingConfidence,
// Each custom gesture serializes its fingerStates in thumb→pinky order.
'customGestures': handConfig.customGestures
.map(
(g) => {
'name': g.name,
'fingerStates': [
_fingerStateToNative(g.fingerStates[Finger.thumb]),
_fingerStateToNative(g.fingerStates[Finger.indexFinger]),
_fingerStateToNative(g.fingerStates[Finger.middle]),
_fingerStateToNative(g.fingerStates[Finger.ring]),
_fingerStateToNative(g.fingerStates[Finger.pinky]),
],
},
)
.toList(),
..._serializeGestureFilters(handConfig),
},
if (faceConfig != null) ...{
'detectEmotion': faceConfig.detectEmotion,
'detectLandmarks': faceConfig.detectLandmarks,
'detectContours': faceConfig.detectContours,
'minFaceSize': faceConfig.minFaceSize,
'enableFaceTracking': faceConfig.enableTracking,
'minEmotionConfidence': faceConfig.minEmotionConfidence,
'accurateMode': faceConfig.accurateMode,
},
});
// result! is safe: native always returns an int on success, throws on failure.
return result!;
}