флаттер / дартс: Как распаковать / надуть двоичную строку zlib в флаттер - PullRequest
0 голосов
/ 16 октября 2019

Я использую пакет pako на моем сервере nodejs и отправляю сжатую двоичную строку с сервера моему клиенту флаттера. Я не могу распаковать / надуть его на клиенте флаттера. Я попробовал комбинацию библиотек

Мой сервер NodeJS код:

    var pako = require('pako');
    let buffer = pako.deflate(JSON.stringify(userModels), { to: 'string' });
    //Server code for sending to client

Мой код флаттера:

import 'dart:io';
import 'dart:convert';
List<int> gzipBytes = serverResponse.data.codeUnits;
List<int> stringBytes = gzip.decode(gzipBytes);
var data = utf8.decode(stringBytes);

Я получаю следующее исключение ..

Перезапущенное приложение через 1725 мс. E / flutter (25340): [ОШИБКА: flutter / lib / ui / ui_dart_state.cc (148)] Необработанное исключение: InternalError: «Ошибка фильтра, неверные данные» E / flutter (25340): # 0
_FilterImpl.processed(dart: io-patch / filter_patch.dart: 11: 32) E / flutter (25340): # 1 _FilterSink.addSlice (dart: io / data_transformer.dart: 610: 29) E / flutter (25340): # 2
_FilterSink.add (дартс: io / data_transformer.dart: 596: 5) E / флаттер (25340): # 3 ZLibDecoder.convert (дарт: io / data_transformer.dart: 465: 9) E / флаттер (25340):# 4
Codec.decode (dart: convert / codec.dart: 26: 34)

1 Ответ

0 голосов
/ 16 октября 2019

Вы не показываете, как вы получаете данные, но не проходите через строку. Например, если вы используете package:http, используйте:

var bytes = response.bodyBytes;

Далее, не похоже, что вы должны использовать gzip, а скорее zlib;

var inflated = zlib.decode(bytes);
var data = utf8.decode(inflated);
json.decode(data);
...