InstallResult.fromPlatformPayload constructor
InstallResult.fromPlatformPayload(
- Map? payload
Parse a variety of platform payloads (Android PendingIntent extras, iOS completion result, etc.) into a conservative InstallResult. This helps normalize different platform callback shapes.
Implementation
factory InstallResult.fromPlatformPayload(Map<dynamic, dynamic>? payload) {
if (payload == null) {
return InstallResult(status: InstallStatus.failed, message: 'empty payload');
}
// If the platform already provides a clear `status`, prefer that.
if (payload['status'] != null) {
return InstallResult.fromMap(payload);
}
// iOS-style: accepted boolean and optional error
final accepted = payload['accepted'];
if (accepted is bool) {
if (accepted) {
return InstallResult(status: InstallStatus.success, message: payload['message']?.toString());
}
return InstallResult(status: InstallStatus.failed, message: payload['message']?.toString());
}
// Android-style: look for numeric result codes (common keys)
final int? code = (payload['resultCode'] is int)
? payload['resultCode'] as int
: (payload['result'] is int)
? payload['result'] as int
: (payload['code'] is int)
? payload['code'] as int
: null;
if (code != null) {
// Heuristic: 0 => success, other => failure (we don't assume other meanings)
if (code == 0) {
return InstallResult(status: InstallStatus.success, message: 'resultCode=0');
}
return InstallResult(status: InstallStatus.failed, message: 'resultCode=$code');
}
// Fallback: look for known message or error fields
final msg = payload['message'] ?? payload['error'] ?? payload['msg'];
if (msg != null) {
return InstallResult(status: InstallStatus.failed, message: msg.toString());
}
// Unknown payload shape — return failed conservatively but include raw payload as message
return InstallResult(status: InstallStatus.failed, message: 'unrecognized payload: ${payload.toString()}');
}