enroll static method

Future<void> enroll({
  1. EnrollmentCallback? onComplete,
  2. EnrollmentProgressCallback? onProgress,
  3. EnrollmentFlowOptions? options,
})

Simplified single callback API for enrollment (similar to MAUI EnrollmentFlow.Run)

Presents the enrollment flow and calls the provided callback once with the result. User information (customId, groups, glasses) is collected through the native UI.

Parameters:

  • onComplete: Callback invoked when enrollment completes or fails
  • onProgress: Optional callback for progress updates during enrollment
  • options: Optional enrollment settings (camera position, etc.)

Example:

await EnrollmentFlow.enroll(
  onComplete: ({
    required bool success,
    required String customId,
    String? descriptor,
    String? imagePath,
  }) {
    if (success) {
      print('User enrolled: $customId');
      if (descriptor != null) {
        print('Descriptor: $descriptor');
      }
    } else {
      print('Enrollment failed');
    }
  },
  onProgress: ({String? phase, int? percentage, int? countdown}) {
    print('Enrolling: $percentage% (phase: $phase)');
  },
  options: EnrollmentFlowOptions(
    cameraPosition: SmartfaceCameraPosition.front,
  ),
);

Implementation

static Future<void> enroll({
  EnrollmentCallback? onComplete,
  EnrollmentProgressCallback? onProgress,
  EnrollmentFlowOptions? options,
}) async {
  final streams = await present(options: options);

  // Listen for results
  streams['results']?.listen((result) {
    if (result is EnrollmentResult) {
      onComplete?.call(
        success: result.success,
        customId: result.customId,
        descriptor: result.descriptor,
        imagePath: result.imagePath,
      );
    }
  });

  // Listen for progress updates
  streams['progress']?.listen((progress) {
    if (progress is EnrollmentProgress) {
      onProgress?.call(
        phase: progress.phase,
        percentage: progress.percentage,
        countdown: progress.countdown,
      );
    }
  });

  // Listen for errors
  streams['errors']?.listen((error) {
    if (error is String) {
      onComplete?.call(
        success: false,
        customId: error,
      );
    }
  });
}