Я использую его, и это является удивительным. Ниже была самая сложная для меня часть (де/сериализация). Возможно, теперь документы лучше.
запрос на отправку (query
это буфер протокола объекта для отправки)
request.send(query.writeToBuffer());
получить ответ (pb.MovieMessage
является объектом буфера протокола для десериализации ответа на)
request.onLoad.listen((ProgressEvent e) {
if ((request.status >= 200 && request.status < 300) ||
request.status == 0 || request.status == 304) {
List<int> buffer = new Uint8List.view(request.response);
var response = new pb.MovieMessage.fromBuffer(buffer);
EDIT
Мой метод t o отправить запрос PB на сервер
Future<pb.MovieMessage> send(pb.MovieMessage query) {
var completer = new Completer<pb.MovieMessage>();
var uri = Uri.parse("http://localhost:8080/public/data/");
var request = new HttpRequest()
..open("POST", uri.toString(), async: true)
..overrideMimeType("application/x-google-protobuf")
..setRequestHeader("Accept", "application/x-google-protobuf")
..setRequestHeader("Content-Type", "application/x-google-protobuf")
..responseType = "arraybuffer"
..withCredentials = true // seems to be necessary so that cookies are sent
..onError.listen((e) {
completer.completeError(e);
})
..onProgress.listen((e){},
onError:(e) => _logger.severe("Error: " + e.errorMessage));
request.onReadyStateChange.listen((e){},
onError: (e) => _logger.severe("OnReadyStateChange.OnError: " + e.toString())
);
request.onLoad.listen((ProgressEvent e) {
if ((request.status >= 200 && request.status < 300) ||
request.status == 0 || request.status == 304) {
List<int> buffer = new Uint8List.view(request.response);
var response = new pb.MovieMessage.fromBuffer(buffer);
response.errors.forEach((pb.Error e) => _logger.severe("Error: " + e.errorMessage));
completer.complete(response);
} else {
completer.completeError(e);
}
});
request.send(query.writeToBuffer());
return completer.future;
}
Спасибо! Я просто подумал об этом. Описание: «Обычно не нужно импортировать эту библиотеку --- только библиотеки, созданные плагином protoc, импортируют эту библиотеку напрямую». «Было немного запутанно, потому что я действительно не понял, что мне пришлось создавать библиотеки самостоятельно. – enyo