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

问题描述 投票:0回答:2

我的应用程序使用 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]);
      }
    });

我想要的结果是:

捕获错误://此处错误

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

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

flutter dart
2个回答
4
投票

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

try {
response = await dataService.sendFace(
    listImageToListFaceRecImage(
        dataImages, dataTrackID, dataRect, dataLandMark),
    dataDeviceID,
    dataDoorID);
} on GrpcError catch(e) {
    print('Caught error: ${e.message}');
} catch (e){
    // any other error
}
...

也不要忘记导入:

import 'package:grpc/grpc.dart';

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

final int code;
final String? message;
final Object? rawResponse;
final Map<String, String>? trailers;
final List<GeneratedMessage>? details;

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


0
投票

这很有帮助。我只需要导入 grpc 包即可。

© www.soinside.com 2019 - 2024. All rights reserved.