urRunBridge<T extends DartBaseClass> function

dynamic urRunBridge<T extends DartBaseClass>(
  1. Object? object,
  2. String context,
  3. dynamic func(
    1. T
    ), {
  4. dynamic defValue = null,
  5. bool nonnullable = false,
  6. bool multiApplicationCheck = false,
  7. bool reportError = true,
})

Implementation

dynamic urRunBridge<T extends DartBaseClass>(Object? object,
    String context,
    dynamic Function(T) func, {
      dynamic defValue = null,
      bool nonnullable = false,
      bool multiApplicationCheck = false,
      bool reportError = true,
    }) {
  var object_T = object as T?;
  if (object_T == null) {
    try {
      throw Exception("object_T is null, ${object}, ${context}");
    } catch (e, stack) {
      UnitRCError.report(
          e: e, stack: stack, context: context, reportError: reportError);
      if (nonnullable) {
        rethrow;
      }
    }

    return defValue;
  }

  final block = () {
    if (multiApplicationCheck) {
      if (!UnitRCApplication.isApplicationValid()) {
        try {
          throw Exception(
              "invalid application: ${UnitRCApplication
                  .getCurrApplication()}, ${object}: ${context}");
        } catch (e, stack) {
          UnitRCError.report(
              e: e, stack: stack, context: context, reportError: reportError);
          if (nonnullable) {
            rethrow;
          }
        }
        return defValue;
      }
    }
    try {
      return func(object_T);
    } catch (e, stack) {
      UnitRCError.report(
          e: e, stack: stack, context: context, reportError: reportError);
      return defValue;
    }
  };

  if (identical(Zone.current, object_T.zone)) {
    return block();
  } else {
    return object_T.zone.run(() {
      return block();
    });
  }
}