executeRtuUiWithResult<T> function

Future<Result<T>> executeRtuUiWithResult<T>(
  1. Future<String> invokeMethod(), {
  2. required T fromJson(
    1. Map<String, dynamic> data
    ),
})

Implementation

Future<Result<T>> executeRtuUiWithResult<T>(
  Future<String> Function() invokeMethod, {
  required T Function(Map<String, dynamic> data) fromJson,
}) async {
  try {
    final resultJson = await invokeMethod();
    final json = jsonDecode(resultJson) as Map<String, dynamic>;

    final OperationStatus status =
        OperationStatus.values.byName(json['status'] as String);

    switch (status) {
      case OperationStatus.OK:
        return Result.ok(fromJson(json['data']));
      case OperationStatus.CANCELED:
        return Result.cancel();
    }
  } on PlatformException catch (e) {
    Logger.root.severe(e);
    return Result.error(e.message, errorCode: e.code);
  } catch (e) {
    Logger.root.severe(e);
    return Result.error(e.toString());
  }
}