cleanApp function

Future<CleanResult> cleanApp(
  1. CleanInput _
)

Clears the app's cache and data directories via the ext.fdb.clean VM service extension registered by fdb_helper.

Never throws; all error conditions are represented as sealed result cases.

Implementation

Future<CleanResult> cleanApp(CleanInput _) async {
  try {
    final isolateId = await checkFdbHelper();
    if (isolateId == null) return const CleanNoFdbHelper();

    final response = await vmServiceCall(
      'ext.fdb.clean',
      params: {'isolateId': isolateId},
    );
    final result = unwrapRawExtensionResult(response);

    if (result is Map<String, dynamic>) {
      final error = result['error'] as String?;
      if (error != null) return CleanError(error);

      if (result['status'] == 'Success') {
        final dirs = (result['dirs'] as List<dynamic>?)?.cast<String>() ?? [];
        final deleted = result['deletedEntries'] as int? ?? 0;
        return CleanSuccess(dirs: dirs, deletedEntries: deleted);
      }
    }

    return CleanUnexpectedResponse(jsonEncode(result));
  } on AppDiedException catch (e) {
    return CleanAppDied(logLines: e.logLines, reason: e.reason);
  } catch (e) {
    return CleanError(e.toString());
  }
}