From a69edeb49d3239bc5e9d2ccf4ffe25426d9a71aa Mon Sep 17 00:00:00 2001 From: olehdavydenko Date: Mon, 22 Jun 2026 17:06:37 +0200 Subject: [PATCH 1/5] Add onfido sdk locale support --- .../serializer/OnfidoBuilderSerializer.kt | 5 ++ .../flutter/serializer/WorkflowSerializer.kt | 5 ++ .../Helpers/OnfidoLocalizationHelper.swift | 81 +++++++++++++++++++ .../Serializer/OnfidoBuilderSerializer.swift | 8 +- .../WorkflowConfigurationSerializer.swift | 8 +- lib/src/onfido.dart | 73 +++++++++-------- lib/src/platform/onfido_method_channel.dart | 76 +++++++++-------- lib/src/platform/onfido_platform.dart | 40 ++++----- .../serializer/start_options_serializer.dart | 25 +++--- .../serializer/start_studio_serializer.dart | 23 +++--- 10 files changed, 232 insertions(+), 112 deletions(-) create mode 100644 ios/Classes/Helpers/OnfidoLocalizationHelper.swift diff --git a/android/src/main/kotlin/com/onfido/sdk/flutter/serializer/OnfidoBuilderSerializer.kt b/android/src/main/kotlin/com/onfido/sdk/flutter/serializer/OnfidoBuilderSerializer.kt index 11bd4c5..56b1f03 100644 --- a/android/src/main/kotlin/com/onfido/sdk/flutter/serializer/OnfidoBuilderSerializer.kt +++ b/android/src/main/kotlin/com/onfido/sdk/flutter/serializer/OnfidoBuilderSerializer.kt @@ -10,6 +10,7 @@ import com.onfido.android.sdk.capture.ui.options.stepbuilder.DocumentCaptureStep import com.onfido.sdk.flutter.helpers.CustomMediaCallback import io.flutter.embedding.engine.plugins.FlutterPlugin import com.onfido.android.sdk.capture.model.NFCOptions +import java.util.Locale internal fun Any?.deserializeOnfidoBuilder( context: Context @@ -22,6 +23,10 @@ internal fun Any?.deserializeOnfidoBuilder( builder.withSDKToken(it) } + (this["locale"] as? String)?.takeIf { it.isNotBlank() }?.let { localeTag -> + builder.withLocale(Locale.forLanguageTag(localeTag)) + } + val flowSteps = this["flowSteps"] as? Map<*, *> ?: throw Exception("Invalid arguments for start method (flow steps)") diff --git a/android/src/main/kotlin/com/onfido/sdk/flutter/serializer/WorkflowSerializer.kt b/android/src/main/kotlin/com/onfido/sdk/flutter/serializer/WorkflowSerializer.kt index e8d1c7f..696ee49 100644 --- a/android/src/main/kotlin/com/onfido/sdk/flutter/serializer/WorkflowSerializer.kt +++ b/android/src/main/kotlin/com/onfido/sdk/flutter/serializer/WorkflowSerializer.kt @@ -4,6 +4,7 @@ import com.onfido.workflow.WorkflowConfig import com.onfido.android.sdk.capture.EnterpriseFeatures import com.onfido.sdk.flutter.helpers.BiometricTokenCallbackBridge import com.onfido.sdk.flutter.helpers.CustomMediaCallback +import java.util.Locale fun Any.deserializeWorkflowConfig(): WorkflowConfig { if (this !is Map<*, *>) throw Exception("Invalid arguments for start method") @@ -16,6 +17,10 @@ fun Any.deserializeWorkflowConfig(): WorkflowConfig { val builder = WorkflowConfig.Builder(sdkToken, workflowRunId) + (this["locale"] as? String)?.takeIf { it.isNotBlank() }?.let { localeTag -> + builder.withLocale(Locale.forLanguageTag(localeTag)) + } + val withMediaCallback = this["shouldUseMediaCallback"] as? Boolean ?: false if (withMediaCallback) { builder.withMediaCallback(mediaCallback = CustomMediaCallback()) diff --git a/ios/Classes/Helpers/OnfidoLocalizationHelper.swift b/ios/Classes/Helpers/OnfidoLocalizationHelper.swift new file mode 100644 index 0000000..d960751 --- /dev/null +++ b/ios/Classes/Helpers/OnfidoLocalizationHelper.swift @@ -0,0 +1,81 @@ +import Foundation +import Onfido + +enum OnfidoLocalizationHelper { + private static var onfidoBundle: Bundle { + Bundle(for: WorkflowConfiguration.self) + } + + static func localizedBundle(for locale: String) -> Bundle? { + for candidate in localizationCandidates(for: locale) { + guard let path = onfidoBundle.path(forResource: candidate, ofType: "lproj"), + let bundle = Bundle(path: path) else { + continue + } + return bundle + } + return nil + } + + static func applyLocalization( + to builder: OnfidoConfigBuilder, + locale: String?, + customLocalizationFileName: String? + ) { + if let customLocalizationFileName { + builder.withCustomLocalization(andTableName: customLocalizationFileName) + return + } + + guard let locale, !locale.isEmpty, let localizedBundle = localizedBundle(for: locale) else { + return + } + + builder.withCustomLocalization(andTableName: "Localizable", in: localizedBundle) + } + + static func applyLocalization( + to configuration: WorkflowConfiguration, + locale: String?, + customLocalizationFileName: String? + ) { + if let customLocalizationFileName { + configuration.withCustomLocalization(withTableName: customLocalizationFileName, in: .main) + return + } + + guard let locale, !locale.isEmpty, let localizedBundle = localizedBundle(for: locale) else { + return + } + + configuration.withCustomLocalization(withTableName: "Localizable", in: localizedBundle) + } + + private static func localizationCandidates(for locale: String) -> [String] { + let normalized = locale.replacingOccurrences(of: "_", with: "-") + let components = normalized.split(separator: "-", omittingEmptySubsequences: true) + + guard let language = components.first else { + return [normalized] + } + + var candidates = [String]() + + if components.count >= 2 { + let region = String(components[1]) + candidates.append("\(language)-\(region)") + candidates.append("\(language)-\(region.uppercased())") + candidates.append("\(language)-\(region.lowercased())") + } + + candidates.append(String(language)) + candidates.append(normalized) + + var uniqueCandidates: [String] = [] + for candidate in candidates where !uniqueCandidates.contains(candidate) { + uniqueCandidates.append(candidate) + } + + return uniqueCandidates + } +} \ No newline at end of file diff --git a/ios/Classes/Serializer/OnfidoBuilderSerializer.swift b/ios/Classes/Serializer/OnfidoBuilderSerializer.swift index 6e488e3..5179197 100644 --- a/ios/Classes/Serializer/OnfidoBuilderSerializer.swift +++ b/ios/Classes/Serializer/OnfidoBuilderSerializer.swift @@ -17,9 +17,11 @@ extension OnfidoConfig { onfidoBuilder.withSDKToken(token) } - if let fileName = dictionary["iosLocalizationFileName"] as? String { - onfidoBuilder.withCustomLocalization(andTableName: fileName) - } + OnfidoLocalizationHelper.applyLocalization( + to: onfidoBuilder, + locale: dictionary["locale"] as? String, + customLocalizationFileName: dictionary["iosLocalizationFileName"] as? String + ) var appearance = Appearance() if let iosAppearance = dictionary["iosAppearance"] as? NSDictionary { diff --git a/ios/Classes/Serializer/WorkflowConfigurationSerializer.swift b/ios/Classes/Serializer/WorkflowConfigurationSerializer.swift index 3807fb8..3f9066e 100644 --- a/ios/Classes/Serializer/WorkflowConfigurationSerializer.swift +++ b/ios/Classes/Serializer/WorkflowConfigurationSerializer.swift @@ -20,9 +20,11 @@ extension WorkflowConfiguration { if let enterpriseFeatures = dictionary["enterpriseFeatures"] as? NSDictionary { withEnterpriseFeatures(EnterpriseFeatures.builder(with: enterpriseFeatures)) } - if let fileName = dictionary["iosLocalizationFileName"] as? String { - withCustomLocalization(withTableName: fileName, in: Bundle.self.main) - } + OnfidoLocalizationHelper.applyLocalization( + to: self, + locale: dictionary["locale"] as? String, + customLocalizationFileName: dictionary["iosLocalizationFileName"] as? String + ) var appearance = Appearance() if let iosAppearance = dictionary["iosAppearance"] as? NSDictionary { diff --git a/lib/src/onfido.dart b/lib/src/onfido.dart index 2297848..dbf69d1 100644 --- a/lib/src/onfido.dart +++ b/lib/src/onfido.dart @@ -11,26 +11,29 @@ class Onfido { /// - The [enterpriseFeatures] is a set of features for advanced customisation, get in touch to enable this for your account. /// - The [nfcOption] is the configuration for NFC (DISABLED, OPTIONAL, REQUIRED). You can see [Parameter Details](https://documentation.onfido.com/sdk/flutter/#parameter-details) for the details /// - The [onfidoTheme] is an enum used to determine which theme the UI will be rendered with (DARK, LIGHT, AUTOMATIC) - Onfido( - {required String sdkToken, - String? iosLocalizationFileName, - IOSAppearance? iosAppearance, - EnterpriseFeatures? enterpriseFeatures, - NFCOptions? nfcOption, - OnfidoMediaCallback? mediaCallback, - BiometricTokenCallback? biometricTokenCallback, - OnfidoTheme? onfidoTheme}) - : _sdkToken = sdkToken, - _iOSLocalizationFileName = iosLocalizationFileName, - _enterpriseFeatures = enterpriseFeatures, - _iosAppearance = iosAppearance, - _nfcOption = nfcOption, - _mediaCallback = mediaCallback, - _biometricTokenCallback = biometricTokenCallback, - _onfidoTheme = onfidoTheme; + Onfido({ + required String sdkToken, + String? iosLocalizationFileName, + String? locale, + IOSAppearance? iosAppearance, + EnterpriseFeatures? enterpriseFeatures, + NFCOptions? nfcOption, + OnfidoMediaCallback? mediaCallback, + BiometricTokenCallback? biometricTokenCallback, + OnfidoTheme? onfidoTheme, + }) : _sdkToken = sdkToken, + _iOSLocalizationFileName = iosLocalizationFileName, + _locale = locale, + _enterpriseFeatures = enterpriseFeatures, + _iosAppearance = iosAppearance, + _nfcOption = nfcOption, + _mediaCallback = mediaCallback, + _biometricTokenCallback = biometricTokenCallback, + _onfidoTheme = onfidoTheme; final String _sdkToken; final String? _iOSLocalizationFileName; + final String? _locale; final EnterpriseFeatures? _enterpriseFeatures; final IOSAppearance? _iosAppearance; final NFCOptions? _nfcOption; @@ -42,26 +45,30 @@ class Onfido { /// - The [flowSteps] allows you to configure which screens are going to be displayed in the flow. For more information see the [Start the Flow](https://github.com/onfido/flutter-sdk/#start-the-flow) section. Future> start({required FlowSteps flowSteps}) { return OnfidoPlatform.instance.start( - sdkToken: _sdkToken, - flowSteps: flowSteps, - iosAppearance: _iosAppearance, - iosLocalizationFileName: _iOSLocalizationFileName, - enterpriseFeatures: _enterpriseFeatures, - nfcOption: _nfcOption, - mediaCallback: _mediaCallback, - onfidoTheme: _onfidoTheme); + sdkToken: _sdkToken, + flowSteps: flowSteps, + iosAppearance: _iosAppearance, + iosLocalizationFileName: _iOSLocalizationFileName, + locale: _locale, + enterpriseFeatures: _enterpriseFeatures, + nfcOption: _nfcOption, + mediaCallback: _mediaCallback, + onfidoTheme: _onfidoTheme, + ); } /// Start Onfido SDK using [Workflow]. Future startWorkflow(String workflowRunId) { return OnfidoPlatform.instance.startWorkflow( - sdkToken: _sdkToken, - workflowRunId: workflowRunId, - iosAppearance: _iosAppearance, - mediaCallback: _mediaCallback, - biometricTokenCallback: _biometricTokenCallback, - iosLocalizationFileName: _iOSLocalizationFileName, - enterpriseFeatures: _enterpriseFeatures, - onfidoTheme: _onfidoTheme); + sdkToken: _sdkToken, + workflowRunId: workflowRunId, + iosAppearance: _iosAppearance, + mediaCallback: _mediaCallback, + biometricTokenCallback: _biometricTokenCallback, + iosLocalizationFileName: _iOSLocalizationFileName, + locale: _locale, + enterpriseFeatures: _enterpriseFeatures, + onfidoTheme: _onfidoTheme, + ); } } diff --git a/lib/src/platform/onfido_method_channel.dart b/lib/src/platform/onfido_method_channel.dart index 005e984..2fc10c0 100644 --- a/lib/src/platform/onfido_method_channel.dart +++ b/lib/src/platform/onfido_method_channel.dart @@ -22,24 +22,28 @@ class MethodChannelOnfido extends OnfidoPlatform { static BiometricTokenCallback? _biometricTokenCallback; @override - Future> start( - {required String sdkToken, - required FlowSteps flowSteps, - String? iosLocalizationFileName, - IOSAppearance? iosAppearance, - OnfidoMediaCallback? mediaCallback, - EnterpriseFeatures? enterpriseFeatures, - NFCOptions? nfcOption, - OnfidoTheme? onfidoTheme}) async { + Future> start({ + required String sdkToken, + required FlowSteps flowSteps, + String? iosLocalizationFileName, + String? locale, + IOSAppearance? iosAppearance, + OnfidoMediaCallback? mediaCallback, + EnterpriseFeatures? enterpriseFeatures, + NFCOptions? nfcOption, + OnfidoTheme? onfidoTheme, + }) async { final arguments = StartOptionsSerializer.serialize( - sdkToken: sdkToken, - flowSteps: flowSteps, - iosAppearance: iosAppearance, - shouldUseMediaCallback: mediaCallback != null, - iosLocalizationFileName: iosLocalizationFileName, - enterpriseFeatures: enterpriseFeatures, - nfcOption: nfcOption, - onfidoTheme: onfidoTheme); + sdkToken: sdkToken, + flowSteps: flowSteps, + iosAppearance: iosAppearance, + shouldUseMediaCallback: mediaCallback != null, + iosLocalizationFileName: iosLocalizationFileName, + locale: locale, + enterpriseFeatures: enterpriseFeatures, + nfcOption: nfcOption, + onfidoTheme: onfidoTheme, + ); _mediaCallback = mediaCallback; @@ -48,24 +52,28 @@ class MethodChannelOnfido extends OnfidoPlatform { } @override - Future startWorkflow( - {required String sdkToken, - required String workflowRunId, - IOSAppearance? iosAppearance, - OnfidoMediaCallback? mediaCallback, - BiometricTokenCallback? biometricTokenCallback, - String? iosLocalizationFileName, - EnterpriseFeatures? enterpriseFeatures, - OnfidoTheme? onfidoTheme}) async { + Future startWorkflow({ + required String sdkToken, + required String workflowRunId, + IOSAppearance? iosAppearance, + OnfidoMediaCallback? mediaCallback, + BiometricTokenCallback? biometricTokenCallback, + String? iosLocalizationFileName, + String? locale, + EnterpriseFeatures? enterpriseFeatures, + OnfidoTheme? onfidoTheme, + }) async { final arguments = StartStudioSerializer.serialize( - sdkToken: sdkToken, - workflowRunId: workflowRunId, - iosAppearance: iosAppearance, - shouldUseMediaCallback: mediaCallback != null, - shouldUseBiometricTokenCallback: biometricTokenCallback != null, - iosLocalizationFileName: iosLocalizationFileName, - enterpriseFeatures: enterpriseFeatures, - onfidoTheme: onfidoTheme); + sdkToken: sdkToken, + workflowRunId: workflowRunId, + iosAppearance: iosAppearance, + shouldUseMediaCallback: mediaCallback != null, + shouldUseBiometricTokenCallback: biometricTokenCallback != null, + iosLocalizationFileName: iosLocalizationFileName, + locale: locale, + enterpriseFeatures: enterpriseFeatures, + onfidoTheme: onfidoTheme, + ); _mediaCallback = mediaCallback; _biometricTokenCallback = biometricTokenCallback; diff --git a/lib/src/platform/onfido_platform.dart b/lib/src/platform/onfido_platform.dart index c1d9ba6..13cfce3 100644 --- a/lib/src/platform/onfido_platform.dart +++ b/lib/src/platform/onfido_platform.dart @@ -5,23 +5,27 @@ import 'onfido_method_channel.dart'; abstract class OnfidoPlatform { static OnfidoPlatform instance = MethodChannelOnfido(); - Future> start( - {required String sdkToken, - required FlowSteps flowSteps, - String? iosLocalizationFileName, - IOSAppearance? iosAppearance, - EnterpriseFeatures? enterpriseFeatures, - NFCOptions? nfcOption, - OnfidoMediaCallback? mediaCallback, - OnfidoTheme? onfidoTheme}); + Future> start({ + required String sdkToken, + required FlowSteps flowSteps, + String? iosLocalizationFileName, + String? locale, + IOSAppearance? iosAppearance, + EnterpriseFeatures? enterpriseFeatures, + NFCOptions? nfcOption, + OnfidoMediaCallback? mediaCallback, + OnfidoTheme? onfidoTheme, + }); - Future startWorkflow( - {required String sdkToken, - required String workflowRunId, - IOSAppearance? iosAppearance, - OnfidoMediaCallback? mediaCallback, - BiometricTokenCallback? biometricTokenCallback, - String? iosLocalizationFileName, - EnterpriseFeatures? enterpriseFeatures, - OnfidoTheme? onfidoTheme}); + Future startWorkflow({ + required String sdkToken, + required String workflowRunId, + IOSAppearance? iosAppearance, + OnfidoMediaCallback? mediaCallback, + BiometricTokenCallback? biometricTokenCallback, + String? iosLocalizationFileName, + String? locale, + EnterpriseFeatures? enterpriseFeatures, + OnfidoTheme? onfidoTheme, + }); } diff --git a/lib/src/serializer/start_options_serializer.dart b/lib/src/serializer/start_options_serializer.dart index d72cb3e..8b06d75 100644 --- a/lib/src/serializer/start_options_serializer.dart +++ b/lib/src/serializer/start_options_serializer.dart @@ -1,25 +1,28 @@ import 'package:onfido_sdk/onfido_sdk.dart'; class StartOptionsSerializer { - static serialize( - {required String sdkToken, - required FlowSteps flowSteps, - IOSAppearance? iosAppearance, - bool? shouldUseMediaCallback, - EnterpriseFeatures? enterpriseFeatures, - String? iosLocalizationFileName, - bool? disableNFC, - NFCOptions? nfcOption, - OnfidoTheme? onfidoTheme}) { + static serialize({ + required String sdkToken, + required FlowSteps flowSteps, + IOSAppearance? iosAppearance, + bool? shouldUseMediaCallback, + EnterpriseFeatures? enterpriseFeatures, + String? iosLocalizationFileName, + String? locale, + bool? disableNFC, + NFCOptions? nfcOption, + OnfidoTheme? onfidoTheme, + }) { return { 'sdkToken': sdkToken, 'flowSteps': flowSteps.toJson(), 'iosAppearance': iosAppearance?.toJson(), 'iosLocalizationFileName': iosLocalizationFileName, + 'locale': locale, 'nfcOption': nfcOption?.name, 'shouldUseMediaCallback': shouldUseMediaCallback, 'enterpriseFeatures': enterpriseFeatures?.toJson(), - 'onfidoTheme': onfidoTheme?.name + 'onfidoTheme': onfidoTheme?.name, }; } } diff --git a/lib/src/serializer/start_studio_serializer.dart b/lib/src/serializer/start_studio_serializer.dart index 9773a62..51a6afa 100644 --- a/lib/src/serializer/start_studio_serializer.dart +++ b/lib/src/serializer/start_studio_serializer.dart @@ -2,24 +2,27 @@ import 'package:onfido_sdk/onfido_sdk.dart'; /// convert dart code to dictionary to be passed to the platform class StartStudioSerializer { - static serialize( - {required String sdkToken, - required String workflowRunId, - IOSAppearance? iosAppearance, - String? iosLocalizationFileName, - bool? shouldUseMediaCallback, - bool? shouldUseBiometricTokenCallback, - EnterpriseFeatures? enterpriseFeatures, - OnfidoTheme? onfidoTheme}) { + static serialize({ + required String sdkToken, + required String workflowRunId, + IOSAppearance? iosAppearance, + String? iosLocalizationFileName, + String? locale, + bool? shouldUseMediaCallback, + bool? shouldUseBiometricTokenCallback, + EnterpriseFeatures? enterpriseFeatures, + OnfidoTheme? onfidoTheme, + }) { return { 'sdkToken': sdkToken, 'workflowRunId': workflowRunId, 'iosAppearance': iosAppearance?.toJson(), 'iosLocalizationFileName': iosLocalizationFileName, + 'locale': locale, 'shouldUseMediaCallback': shouldUseMediaCallback, 'shouldUseBiometricTokenCallback': shouldUseBiometricTokenCallback, 'enterpriseFeatures': enterpriseFeatures?.toJson(), - 'onfidoTheme': onfidoTheme?.name + 'onfidoTheme': onfidoTheme?.name, }; } } From 2511e4329ccc13c62332c54359d2dba7a95e6b34 Mon Sep 17 00:00:00 2001 From: olehdavydenko Date: Mon, 22 Jun 2026 17:11:43 +0200 Subject: [PATCH 2/5] formating rollback --- lib/src/onfido.dart | 76 ++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/lib/src/onfido.dart b/lib/src/onfido.dart index dbf69d1..8dd500d 100644 --- a/lib/src/onfido.dart +++ b/lib/src/onfido.dart @@ -11,25 +11,25 @@ class Onfido { /// - The [enterpriseFeatures] is a set of features for advanced customisation, get in touch to enable this for your account. /// - The [nfcOption] is the configuration for NFC (DISABLED, OPTIONAL, REQUIRED). You can see [Parameter Details](https://documentation.onfido.com/sdk/flutter/#parameter-details) for the details /// - The [onfidoTheme] is an enum used to determine which theme the UI will be rendered with (DARK, LIGHT, AUTOMATIC) - Onfido({ - required String sdkToken, - String? iosLocalizationFileName, - String? locale, - IOSAppearance? iosAppearance, - EnterpriseFeatures? enterpriseFeatures, - NFCOptions? nfcOption, - OnfidoMediaCallback? mediaCallback, - BiometricTokenCallback? biometricTokenCallback, - OnfidoTheme? onfidoTheme, - }) : _sdkToken = sdkToken, - _iOSLocalizationFileName = iosLocalizationFileName, - _locale = locale, - _enterpriseFeatures = enterpriseFeatures, - _iosAppearance = iosAppearance, - _nfcOption = nfcOption, - _mediaCallback = mediaCallback, - _biometricTokenCallback = biometricTokenCallback, - _onfidoTheme = onfidoTheme; + Onfido( + {required String sdkToken, + String? iosLocalizationFileName, + String? locale, + IOSAppearance? iosAppearance, + EnterpriseFeatures? enterpriseFeatures, + NFCOptions? nfcOption, + OnfidoMediaCallback? mediaCallback, + BiometricTokenCallback? biometricTokenCallback, + OnfidoTheme? onfidoTheme}) + : _sdkToken = sdkToken, + _iOSLocalizationFileName = iosLocalizationFileName, + _locale = locale, + _enterpriseFeatures = enterpriseFeatures, + _iosAppearance = iosAppearance, + _nfcOption = nfcOption, + _mediaCallback = mediaCallback, + _biometricTokenCallback = biometricTokenCallback, + _onfidoTheme = onfidoTheme; final String _sdkToken; final String? _iOSLocalizationFileName; @@ -45,30 +45,28 @@ class Onfido { /// - The [flowSteps] allows you to configure which screens are going to be displayed in the flow. For more information see the [Start the Flow](https://github.com/onfido/flutter-sdk/#start-the-flow) section. Future> start({required FlowSteps flowSteps}) { return OnfidoPlatform.instance.start( - sdkToken: _sdkToken, - flowSteps: flowSteps, - iosAppearance: _iosAppearance, - iosLocalizationFileName: _iOSLocalizationFileName, - locale: _locale, - enterpriseFeatures: _enterpriseFeatures, - nfcOption: _nfcOption, - mediaCallback: _mediaCallback, - onfidoTheme: _onfidoTheme, - ); + sdkToken: _sdkToken, + flowSteps: flowSteps, + iosAppearance: _iosAppearance, + iosLocalizationFileName: _iOSLocalizationFileName, + locale: _locale, + enterpriseFeatures: _enterpriseFeatures, + nfcOption: _nfcOption, + mediaCallback: _mediaCallback, + onfidoTheme: _onfidoTheme); } /// Start Onfido SDK using [Workflow]. Future startWorkflow(String workflowRunId) { return OnfidoPlatform.instance.startWorkflow( - sdkToken: _sdkToken, - workflowRunId: workflowRunId, - iosAppearance: _iosAppearance, - mediaCallback: _mediaCallback, - biometricTokenCallback: _biometricTokenCallback, - iosLocalizationFileName: _iOSLocalizationFileName, - locale: _locale, - enterpriseFeatures: _enterpriseFeatures, - onfidoTheme: _onfidoTheme, - ); + sdkToken: _sdkToken, + workflowRunId: workflowRunId, + iosAppearance: _iosAppearance, + mediaCallback: _mediaCallback, + biometricTokenCallback: _biometricTokenCallback, + iosLocalizationFileName: _iOSLocalizationFileName, + locale: _locale, + enterpriseFeatures: _enterpriseFeatures, + onfidoTheme: _onfidoTheme); } } From 3000d160b615d648c902a08d0a5b2c465a0de3f5 Mon Sep 17 00:00:00 2001 From: olehdavydenko Date: Mon, 22 Jun 2026 17:12:38 +0200 Subject: [PATCH 3/5] formating rollback --- lib/src/onfido.dart | 76 +++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/lib/src/onfido.dart b/lib/src/onfido.dart index 8dd500d..dbf69d1 100644 --- a/lib/src/onfido.dart +++ b/lib/src/onfido.dart @@ -11,25 +11,25 @@ class Onfido { /// - The [enterpriseFeatures] is a set of features for advanced customisation, get in touch to enable this for your account. /// - The [nfcOption] is the configuration for NFC (DISABLED, OPTIONAL, REQUIRED). You can see [Parameter Details](https://documentation.onfido.com/sdk/flutter/#parameter-details) for the details /// - The [onfidoTheme] is an enum used to determine which theme the UI will be rendered with (DARK, LIGHT, AUTOMATIC) - Onfido( - {required String sdkToken, - String? iosLocalizationFileName, - String? locale, - IOSAppearance? iosAppearance, - EnterpriseFeatures? enterpriseFeatures, - NFCOptions? nfcOption, - OnfidoMediaCallback? mediaCallback, - BiometricTokenCallback? biometricTokenCallback, - OnfidoTheme? onfidoTheme}) - : _sdkToken = sdkToken, - _iOSLocalizationFileName = iosLocalizationFileName, - _locale = locale, - _enterpriseFeatures = enterpriseFeatures, - _iosAppearance = iosAppearance, - _nfcOption = nfcOption, - _mediaCallback = mediaCallback, - _biometricTokenCallback = biometricTokenCallback, - _onfidoTheme = onfidoTheme; + Onfido({ + required String sdkToken, + String? iosLocalizationFileName, + String? locale, + IOSAppearance? iosAppearance, + EnterpriseFeatures? enterpriseFeatures, + NFCOptions? nfcOption, + OnfidoMediaCallback? mediaCallback, + BiometricTokenCallback? biometricTokenCallback, + OnfidoTheme? onfidoTheme, + }) : _sdkToken = sdkToken, + _iOSLocalizationFileName = iosLocalizationFileName, + _locale = locale, + _enterpriseFeatures = enterpriseFeatures, + _iosAppearance = iosAppearance, + _nfcOption = nfcOption, + _mediaCallback = mediaCallback, + _biometricTokenCallback = biometricTokenCallback, + _onfidoTheme = onfidoTheme; final String _sdkToken; final String? _iOSLocalizationFileName; @@ -45,28 +45,30 @@ class Onfido { /// - The [flowSteps] allows you to configure which screens are going to be displayed in the flow. For more information see the [Start the Flow](https://github.com/onfido/flutter-sdk/#start-the-flow) section. Future> start({required FlowSteps flowSteps}) { return OnfidoPlatform.instance.start( - sdkToken: _sdkToken, - flowSteps: flowSteps, - iosAppearance: _iosAppearance, - iosLocalizationFileName: _iOSLocalizationFileName, - locale: _locale, - enterpriseFeatures: _enterpriseFeatures, - nfcOption: _nfcOption, - mediaCallback: _mediaCallback, - onfidoTheme: _onfidoTheme); + sdkToken: _sdkToken, + flowSteps: flowSteps, + iosAppearance: _iosAppearance, + iosLocalizationFileName: _iOSLocalizationFileName, + locale: _locale, + enterpriseFeatures: _enterpriseFeatures, + nfcOption: _nfcOption, + mediaCallback: _mediaCallback, + onfidoTheme: _onfidoTheme, + ); } /// Start Onfido SDK using [Workflow]. Future startWorkflow(String workflowRunId) { return OnfidoPlatform.instance.startWorkflow( - sdkToken: _sdkToken, - workflowRunId: workflowRunId, - iosAppearance: _iosAppearance, - mediaCallback: _mediaCallback, - biometricTokenCallback: _biometricTokenCallback, - iosLocalizationFileName: _iOSLocalizationFileName, - locale: _locale, - enterpriseFeatures: _enterpriseFeatures, - onfidoTheme: _onfidoTheme); + sdkToken: _sdkToken, + workflowRunId: workflowRunId, + iosAppearance: _iosAppearance, + mediaCallback: _mediaCallback, + biometricTokenCallback: _biometricTokenCallback, + iosLocalizationFileName: _iOSLocalizationFileName, + locale: _locale, + enterpriseFeatures: _enterpriseFeatures, + onfidoTheme: _onfidoTheme, + ); } } From 444ffe62d79c0ca706c0ee9c04c339f8da2e6db5 Mon Sep 17 00:00:00 2001 From: olehdavydenko Date: Mon, 22 Jun 2026 17:13:54 +0200 Subject: [PATCH 4/5] formating rollback --- lib/src/onfido.dart | 76 ++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/lib/src/onfido.dart b/lib/src/onfido.dart index dbf69d1..8dd500d 100644 --- a/lib/src/onfido.dart +++ b/lib/src/onfido.dart @@ -11,25 +11,25 @@ class Onfido { /// - The [enterpriseFeatures] is a set of features for advanced customisation, get in touch to enable this for your account. /// - The [nfcOption] is the configuration for NFC (DISABLED, OPTIONAL, REQUIRED). You can see [Parameter Details](https://documentation.onfido.com/sdk/flutter/#parameter-details) for the details /// - The [onfidoTheme] is an enum used to determine which theme the UI will be rendered with (DARK, LIGHT, AUTOMATIC) - Onfido({ - required String sdkToken, - String? iosLocalizationFileName, - String? locale, - IOSAppearance? iosAppearance, - EnterpriseFeatures? enterpriseFeatures, - NFCOptions? nfcOption, - OnfidoMediaCallback? mediaCallback, - BiometricTokenCallback? biometricTokenCallback, - OnfidoTheme? onfidoTheme, - }) : _sdkToken = sdkToken, - _iOSLocalizationFileName = iosLocalizationFileName, - _locale = locale, - _enterpriseFeatures = enterpriseFeatures, - _iosAppearance = iosAppearance, - _nfcOption = nfcOption, - _mediaCallback = mediaCallback, - _biometricTokenCallback = biometricTokenCallback, - _onfidoTheme = onfidoTheme; + Onfido( + {required String sdkToken, + String? iosLocalizationFileName, + String? locale, + IOSAppearance? iosAppearance, + EnterpriseFeatures? enterpriseFeatures, + NFCOptions? nfcOption, + OnfidoMediaCallback? mediaCallback, + BiometricTokenCallback? biometricTokenCallback, + OnfidoTheme? onfidoTheme}) + : _sdkToken = sdkToken, + _iOSLocalizationFileName = iosLocalizationFileName, + _locale = locale, + _enterpriseFeatures = enterpriseFeatures, + _iosAppearance = iosAppearance, + _nfcOption = nfcOption, + _mediaCallback = mediaCallback, + _biometricTokenCallback = biometricTokenCallback, + _onfidoTheme = onfidoTheme; final String _sdkToken; final String? _iOSLocalizationFileName; @@ -45,30 +45,28 @@ class Onfido { /// - The [flowSteps] allows you to configure which screens are going to be displayed in the flow. For more information see the [Start the Flow](https://github.com/onfido/flutter-sdk/#start-the-flow) section. Future> start({required FlowSteps flowSteps}) { return OnfidoPlatform.instance.start( - sdkToken: _sdkToken, - flowSteps: flowSteps, - iosAppearance: _iosAppearance, - iosLocalizationFileName: _iOSLocalizationFileName, - locale: _locale, - enterpriseFeatures: _enterpriseFeatures, - nfcOption: _nfcOption, - mediaCallback: _mediaCallback, - onfidoTheme: _onfidoTheme, - ); + sdkToken: _sdkToken, + flowSteps: flowSteps, + iosAppearance: _iosAppearance, + iosLocalizationFileName: _iOSLocalizationFileName, + locale: _locale, + enterpriseFeatures: _enterpriseFeatures, + nfcOption: _nfcOption, + mediaCallback: _mediaCallback, + onfidoTheme: _onfidoTheme); } /// Start Onfido SDK using [Workflow]. Future startWorkflow(String workflowRunId) { return OnfidoPlatform.instance.startWorkflow( - sdkToken: _sdkToken, - workflowRunId: workflowRunId, - iosAppearance: _iosAppearance, - mediaCallback: _mediaCallback, - biometricTokenCallback: _biometricTokenCallback, - iosLocalizationFileName: _iOSLocalizationFileName, - locale: _locale, - enterpriseFeatures: _enterpriseFeatures, - onfidoTheme: _onfidoTheme, - ); + sdkToken: _sdkToken, + workflowRunId: workflowRunId, + iosAppearance: _iosAppearance, + mediaCallback: _mediaCallback, + biometricTokenCallback: _biometricTokenCallback, + iosLocalizationFileName: _iOSLocalizationFileName, + locale: _locale, + enterpriseFeatures: _enterpriseFeatures, + onfidoTheme: _onfidoTheme); } } From f5d54159f2d478b1c7944e30081acb2d5796585f Mon Sep 17 00:00:00 2001 From: olehdavydenko Date: Mon, 22 Jun 2026 17:15:32 +0200 Subject: [PATCH 5/5] formating rollback --- lib/src/onfido.dart | 16 ++-- lib/src/platform/onfido_method_channel.dart | 80 +++++++++---------- lib/src/platform/onfido_platform.dart | 42 +++++----- .../serializer/start_options_serializer.dart | 25 +++--- .../serializer/start_studio_serializer.dart | 23 +++--- 5 files changed, 89 insertions(+), 97 deletions(-) diff --git a/lib/src/onfido.dart b/lib/src/onfido.dart index 8dd500d..95e2cc6 100644 --- a/lib/src/onfido.dart +++ b/lib/src/onfido.dart @@ -13,14 +13,14 @@ class Onfido { /// - The [onfidoTheme] is an enum used to determine which theme the UI will be rendered with (DARK, LIGHT, AUTOMATIC) Onfido( {required String sdkToken, - String? iosLocalizationFileName, - String? locale, - IOSAppearance? iosAppearance, - EnterpriseFeatures? enterpriseFeatures, - NFCOptions? nfcOption, - OnfidoMediaCallback? mediaCallback, - BiometricTokenCallback? biometricTokenCallback, - OnfidoTheme? onfidoTheme}) + String? iosLocalizationFileName, + String? locale, + IOSAppearance? iosAppearance, + EnterpriseFeatures? enterpriseFeatures, + NFCOptions? nfcOption, + OnfidoMediaCallback? mediaCallback, + BiometricTokenCallback? biometricTokenCallback, + OnfidoTheme? onfidoTheme}) : _sdkToken = sdkToken, _iOSLocalizationFileName = iosLocalizationFileName, _locale = locale, diff --git a/lib/src/platform/onfido_method_channel.dart b/lib/src/platform/onfido_method_channel.dart index 2fc10c0..b370af6 100644 --- a/lib/src/platform/onfido_method_channel.dart +++ b/lib/src/platform/onfido_method_channel.dart @@ -22,28 +22,26 @@ class MethodChannelOnfido extends OnfidoPlatform { static BiometricTokenCallback? _biometricTokenCallback; @override - Future> start({ - required String sdkToken, - required FlowSteps flowSteps, - String? iosLocalizationFileName, - String? locale, - IOSAppearance? iosAppearance, - OnfidoMediaCallback? mediaCallback, - EnterpriseFeatures? enterpriseFeatures, - NFCOptions? nfcOption, - OnfidoTheme? onfidoTheme, - }) async { + Future> start( + {required String sdkToken, + required FlowSteps flowSteps, + String? iosLocalizationFileName, + String? locale, + IOSAppearance? iosAppearance, + OnfidoMediaCallback? mediaCallback, + EnterpriseFeatures? enterpriseFeatures, + NFCOptions? nfcOption, + OnfidoTheme? onfidoTheme}) async { final arguments = StartOptionsSerializer.serialize( - sdkToken: sdkToken, - flowSteps: flowSteps, - iosAppearance: iosAppearance, - shouldUseMediaCallback: mediaCallback != null, - iosLocalizationFileName: iosLocalizationFileName, - locale: locale, - enterpriseFeatures: enterpriseFeatures, - nfcOption: nfcOption, - onfidoTheme: onfidoTheme, - ); + sdkToken: sdkToken, + flowSteps: flowSteps, + iosAppearance: iosAppearance, + shouldUseMediaCallback: mediaCallback != null, + iosLocalizationFileName: iosLocalizationFileName, + locale: locale, + enterpriseFeatures: enterpriseFeatures, + nfcOption: nfcOption, + onfidoTheme: onfidoTheme); _mediaCallback = mediaCallback; @@ -52,28 +50,26 @@ class MethodChannelOnfido extends OnfidoPlatform { } @override - Future startWorkflow({ - required String sdkToken, - required String workflowRunId, - IOSAppearance? iosAppearance, - OnfidoMediaCallback? mediaCallback, - BiometricTokenCallback? biometricTokenCallback, - String? iosLocalizationFileName, - String? locale, - EnterpriseFeatures? enterpriseFeatures, - OnfidoTheme? onfidoTheme, - }) async { + Future startWorkflow( + {required String sdkToken, + required String workflowRunId, + IOSAppearance? iosAppearance, + OnfidoMediaCallback? mediaCallback, + BiometricTokenCallback? biometricTokenCallback, + String? iosLocalizationFileName, + String? locale, + EnterpriseFeatures? enterpriseFeatures, + OnfidoTheme? onfidoTheme}) async { final arguments = StartStudioSerializer.serialize( - sdkToken: sdkToken, - workflowRunId: workflowRunId, - iosAppearance: iosAppearance, - shouldUseMediaCallback: mediaCallback != null, - shouldUseBiometricTokenCallback: biometricTokenCallback != null, - iosLocalizationFileName: iosLocalizationFileName, - locale: locale, - enterpriseFeatures: enterpriseFeatures, - onfidoTheme: onfidoTheme, - ); + sdkToken: sdkToken, + workflowRunId: workflowRunId, + iosAppearance: iosAppearance, + shouldUseMediaCallback: mediaCallback != null, + shouldUseBiometricTokenCallback: biometricTokenCallback != null, + iosLocalizationFileName: iosLocalizationFileName, + locale: locale, + enterpriseFeatures: enterpriseFeatures, + onfidoTheme: onfidoTheme); _mediaCallback = mediaCallback; _biometricTokenCallback = biometricTokenCallback; diff --git a/lib/src/platform/onfido_platform.dart b/lib/src/platform/onfido_platform.dart index 13cfce3..d1fbdbe 100644 --- a/lib/src/platform/onfido_platform.dart +++ b/lib/src/platform/onfido_platform.dart @@ -5,27 +5,25 @@ import 'onfido_method_channel.dart'; abstract class OnfidoPlatform { static OnfidoPlatform instance = MethodChannelOnfido(); - Future> start({ - required String sdkToken, - required FlowSteps flowSteps, - String? iosLocalizationFileName, - String? locale, - IOSAppearance? iosAppearance, - EnterpriseFeatures? enterpriseFeatures, - NFCOptions? nfcOption, - OnfidoMediaCallback? mediaCallback, - OnfidoTheme? onfidoTheme, - }); + Future> start( + {required String sdkToken, + required FlowSteps flowSteps, + String? iosLocalizationFileName, + String? locale, + IOSAppearance? iosAppearance, + EnterpriseFeatures? enterpriseFeatures, + NFCOptions? nfcOption, + OnfidoMediaCallback? mediaCallback, + OnfidoTheme? onfidoTheme}); - Future startWorkflow({ - required String sdkToken, - required String workflowRunId, - IOSAppearance? iosAppearance, - OnfidoMediaCallback? mediaCallback, - BiometricTokenCallback? biometricTokenCallback, - String? iosLocalizationFileName, - String? locale, - EnterpriseFeatures? enterpriseFeatures, - OnfidoTheme? onfidoTheme, - }); + Future startWorkflow( + {required String sdkToken, + required String workflowRunId, + IOSAppearance? iosAppearance, + OnfidoMediaCallback? mediaCallback, + BiometricTokenCallback? biometricTokenCallback, + String? iosLocalizationFileName, + String? locale, + EnterpriseFeatures? enterpriseFeatures, + OnfidoTheme? onfidoTheme}); } diff --git a/lib/src/serializer/start_options_serializer.dart b/lib/src/serializer/start_options_serializer.dart index 8b06d75..ca9c4b2 100644 --- a/lib/src/serializer/start_options_serializer.dart +++ b/lib/src/serializer/start_options_serializer.dart @@ -1,18 +1,17 @@ import 'package:onfido_sdk/onfido_sdk.dart'; class StartOptionsSerializer { - static serialize({ - required String sdkToken, - required FlowSteps flowSteps, - IOSAppearance? iosAppearance, - bool? shouldUseMediaCallback, - EnterpriseFeatures? enterpriseFeatures, - String? iosLocalizationFileName, - String? locale, - bool? disableNFC, - NFCOptions? nfcOption, - OnfidoTheme? onfidoTheme, - }) { + static serialize( + {required String sdkToken, + required FlowSteps flowSteps, + IOSAppearance? iosAppearance, + bool? shouldUseMediaCallback, + EnterpriseFeatures? enterpriseFeatures, + String? iosLocalizationFileName, + String? locale, + bool? disableNFC, + NFCOptions? nfcOption, + OnfidoTheme? onfidoTheme}) { return { 'sdkToken': sdkToken, 'flowSteps': flowSteps.toJson(), @@ -22,7 +21,7 @@ class StartOptionsSerializer { 'nfcOption': nfcOption?.name, 'shouldUseMediaCallback': shouldUseMediaCallback, 'enterpriseFeatures': enterpriseFeatures?.toJson(), - 'onfidoTheme': onfidoTheme?.name, + 'onfidoTheme': onfidoTheme?.name }; } } diff --git a/lib/src/serializer/start_studio_serializer.dart b/lib/src/serializer/start_studio_serializer.dart index 51a6afa..132bc45 100644 --- a/lib/src/serializer/start_studio_serializer.dart +++ b/lib/src/serializer/start_studio_serializer.dart @@ -2,17 +2,16 @@ import 'package:onfido_sdk/onfido_sdk.dart'; /// convert dart code to dictionary to be passed to the platform class StartStudioSerializer { - static serialize({ - required String sdkToken, - required String workflowRunId, - IOSAppearance? iosAppearance, - String? iosLocalizationFileName, - String? locale, - bool? shouldUseMediaCallback, - bool? shouldUseBiometricTokenCallback, - EnterpriseFeatures? enterpriseFeatures, - OnfidoTheme? onfidoTheme, - }) { + static serialize( + {required String sdkToken, + required String workflowRunId, + IOSAppearance? iosAppearance, + String? iosLocalizationFileName, + String? locale, + bool? shouldUseMediaCallback, + bool? shouldUseBiometricTokenCallback, + EnterpriseFeatures? enterpriseFeatures, + OnfidoTheme? onfidoTheme}) { return { 'sdkToken': sdkToken, 'workflowRunId': workflowRunId, @@ -22,7 +21,7 @@ class StartStudioSerializer { 'shouldUseMediaCallback': shouldUseMediaCallback, 'shouldUseBiometricTokenCallback': shouldUseBiometricTokenCallback, 'enterpriseFeatures': enterpriseFeatures?.toJson(), - 'onfidoTheme': onfidoTheme?.name, + 'onfidoTheme': onfidoTheme?.name }; } }