我正在开发使用Grpc连接到服务器的Flutter应用。一些服务需要额外的元数据进行身份验证,所以我首先想到的是实现一个拦截器来像这样添加元数据到这些请求中:
class MyClientInterceptor implements ClientInterceptor {
@override
ResponseFuture<R> interceptUnary<Q, R>(ClientMethod<Q, R> method, Q request, CallOptions options, invoker) {
var newOptions = CallOptions.from([options])
..metadata.putIfAbsent('token', () => 'Some-Token');
return invoker(method, request, newOptions);
}
}
但是,我得到了 "Caught error: Unsupported operation: Cannot modify unmodifiable map" 的错误,因为CallOptions使用的是不可修改的map。
第一个问题:除了使用Client stub创建元数据之外,添加身份验证到某些请求的最佳实践是什么?
第二个问题:如何复制选项中的元数据,修改它并使用修改后的对象?