getPurposes method
Implementation
@override
Future<List<Purpose>> getPurposes() async {
try {
debugPrint('Calling getPurposes method...');
final result = await methodChannel.invokeMethod<List<dynamic>>('getPurposes');
debugPrint('getPurposes raw result: $result');
debugPrint('getPurposes result type: ${result?.runtimeType}');
if (result == null) {
debugPrint('getPurposes result is null');
return [];
}
List<Purpose> purposes = [];
for (var i = 0; i < result.length; i++) {
try {
var item = result[i];
debugPrint('Purpose ${i+1} type: ${item.runtimeType}');
if (item is Map) {
// Use our helper to convert the entire nested structure
Map<String, dynamic> convertedMap = _convertMapToStringDynamic(item);
debugPrint('Successfully converted purpose map at index $i');
purposes.add(Purpose.fromJson(convertedMap));
} else {
debugPrint('Skipping non-map item at index $i');
}
} catch (e) {
debugPrint('Error processing purpose at index $i: $e');
}
}
debugPrint('Final purposes list length: ${purposes.length}');
return purposes;
} catch (e) {
debugPrint('Error in getPurposes: $e');
debugPrint('Stack trace: ${StackTrace.current}');
return [];
}
}