startAuthorization method
Initiates the Amazon Pay account linking flow.
customerId — Razorpay customer ID (e.g. 'cust_xxx')
onLinkingSuccessful — called when linking succeeds
onLinkingFailed — called when linking fails
Implementation
Future<void> startAuthorization({
required String customerId,
required Function(Map<dynamic, dynamic> data) onLinkingSuccessful,
required Function(Map<dynamic, dynamic> error) onLinkingFailed,
}) async {
try {
final result = await _channel.invokeMethod(
'amazonPayStartAuthorization',
{'customerId': customerId},
);
if (result != null && result is Map) {
final resultMap = Map<dynamic, dynamic>.from(result);
if (resultMap['type'] == 'success') {
final data = resultMap['data'] != null
? Map<dynamic, dynamic>.from(resultMap['data'] as Map)
: <dynamic, dynamic>{};
onLinkingSuccessful(data);
_eventEmitter.emit(EVENT_LINKING_SUCCESS, null, data);
} else {
final error = resultMap['data'] != null
? Map<dynamic, dynamic>.from(resultMap['data'] as Map)
: <dynamic, dynamic>{'message': 'Unknown error'};
onLinkingFailed(error);
_eventEmitter.emit(EVENT_LINKING_ERROR, null, error);
}
} else {
// Native returned null or an unexpected type — always fire onLinkingFailed
// so the merchant is never left waiting with no feedback.
final error = <dynamic, dynamic>{
'code': -1,
'message': 'Unexpected response from native layer: $result',
};
onLinkingFailed(error);
_eventEmitter.emit(EVENT_LINKING_ERROR, null, error);
}
} on PlatformException catch (e) {
final error = <dynamic, dynamic>{
'code': e.code,
'message': e.message ?? 'Platform error during Amazon Pay linking',
};
onLinkingFailed(error);
_eventEmitter.emit(EVENT_LINKING_ERROR, null, error);
}
}