为什么我无法在 FLutter 中捕获 Grpc 错误?

hoa*_*uyy 6 dart flutter

我的应用程序使用 grpc 将图像从客户端发送到服务器,但我无法捕捉到该错误,这是我的代码:

var response;
    try {
    response = await dataService.sendFace(
        listImageToListFaceRecImage(
            dataImages, dataTrackID, dataRect, dataLandMark),
        dataDeviceID,
        dataDoorID);
    } catch(e) {
      print('Caught error: $e');
    }
    response.first.then((value) {
      isSending = false;
      print("receive");
      print(value.result);
      if (value.result.isNotEmpty) {
        Map<String, dynamic> result =
        (jsonDecode(value.result) as List<dynamic>)[0];
        String personCode = result['person_code'];
        replyTo.send([personCode, capturedFaceImage]);
      }
    });
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

捕获错误://此处出错

但它显示了这个错误,我不知道为什么它无法捕获:

gRPC 错误(14,连接错误:SocketException:连接失败(操作系统错误:网络无法访问,errno = 101),地址 = 172.16.0.39,端口 = 4001)

Lui*_*lez 4

这可以通过将错误捕获为 GrpcError 来解决,然后您可以访问错误的所有部分:

\n
try {\nresponse = await dataService.sendFace(\n    listImageToListFaceRecImage(\n        dataImages, dataTrackID, dataRect, dataLandMark),\n    dataDeviceID,\n    dataDoorID);\n} on GrpcError catch(e) {\n    print(\'Caught error: ${e.message}\');\n} catch (e){\n    // any other error\n}\n...\n
Run Code Online (Sandbox Code Playgroud)\n

也不要\xc2\xb4t 忘记导入:\nimport \'package:grpc/grpc.dart\';

\n

您现在可以访问所有错误字段:

\n
final int code;\nfinal String? message;\nfinal Object? rawResponse;\nfinal Map<String, String>? trailers;\nfinal List<GeneratedMessage>? details;\n
Run Code Online (Sandbox Code Playgroud)\n

参考:https://github.com/grpc/grpc-dart/blob/master/lib/src/shared/status.dart

\n