Я разрабатываю приложение флаттера, используя Grpc для подключения к серверу. Некоторым сервисам требуются дополнительные метаданные для аутентификации, поэтому первое, что приходит мне в голову, — реализовать перехватчик для добавления метаданных к таким запросам, например:
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 использует неизменяемую карту.
Первый вопрос: как лучше всего добавлять аутентификацию в некоторые запросы вместо создания клиентской заглушки с этими метаданными?
Во-вторых: как я могу скопировать метаданные из опций, изменить их и использовать измененный объект?