getPurposes method

  1. @override
Future<List<Purpose>> getPurposes()
override

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 [];
  }
}