navigateBack function

Future<BackResult> navigateBack(
  1. BackInput _
)

Triggers Navigator.maybePop() in the running Flutter app.

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

Implementation

Future<BackResult> navigateBack(BackInput _) async {
  try {
    final isolateId = await checkFdbHelper();
    if (isolateId == null) return const BackNoHelper();

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

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

      if (status == 'Success') {
        final popped = result['popped'] as bool? ?? false;
        return popped ? const BackPopped() : const BackAtRoot();
      }

      if (error != null) return BackVmError(error);
    }

    return BackUnexpectedResponse(result);
  } on AppDiedException catch (e) {
    return BackAppDied(logLines: e.logLines, reason: e.reason);
  } catch (e) {
    return BackError(e.toString());
  }
}