extractPurchases function
Implementation
List<gentype.Purchase> extractPurchases(
dynamic result, {
required bool platformIsAndroid,
required bool platformIsIOS,
required Map<String, bool> acknowledgedAndroidPurchaseTokens,
}) {
List<dynamic> list;
if (result is String) {
list = json.decode(result) as List<dynamic>;
} else if (result is List) {
list = result;
} else {
list = json.decode(result.toString()) as List<dynamic>;
}
final purchases = <gentype.Purchase>[];
for (final dynamic product in list) {
try {
if (product is! Map) {
debugPrint(
'[flutter_inapp_purchase] Skipping purchase with unexpected type: ${product.runtimeType}',
);
continue;
}
// Safely convert map keys to strings to handle cases where platform channels
// return maps with non-string keys (e.g., Map<Object?, Object?>)
final map = product.map<String, dynamic>(
(key, value) => MapEntry(key.toString(), value));
final original = map; // originalJson은 변환된 데이터를 사용 (추가 필드 접근을 위해)
purchases.add(
convertToPurchase(
map,
originalJson: original,
platformIsAndroid: platformIsAndroid,
platformIsIOS: platformIsIOS,
acknowledgedAndroidPurchaseTokens: acknowledgedAndroidPurchaseTokens,
),
);
} catch (error) {
debugPrint(
'[flutter_inapp_purchase] Skipping purchase due to parse error: $error',
);
}
}
return purchases;
}