Flutter Uint8list строка из базы данных отображается как изображение - PullRequest
0 голосов
/ 29 марта 2020

Сценарий:

  • У меня есть блокнот для подписи, и его пункты (список) сохраняются на SQL сервере.
  • Я извлекаю его из базы данных и отображаю на другом экране.

Код сохранения флаттера

Я просто предоставлю важный код, который я думаю, что имеют отношение.

// This is save button
onPressed() {
   data = {
     'Signature' : _fbKey.currentState.value['signature'].toString()
   }
}

// trigger _save function
if (_fbKey.currentState.saveAndValidate()) {
  _save(data);
}

// _save function
_save(data) async {
   final response = await http.post('url here..', body: data);
}

Laravel коды Я предоставлю код, который я также считаю, имеют отношение

Route::middleware('admin')->post('link...', function (Request $request) {
   $user = new User;

   $user->Signature= $request->Signature;

   $user->save();

   return response()->json([
        'message' => 'Success',
        'data' => $user
    ], 200);
});

Flutter Fetch Code

getData() async {
   final response = await http.get('url goes here');

   var signRes = jsonDecode(response.body);
   String rawSign = signRes['data']['Signature'];
   print(rawSign); // output [137, ....so on]

   List<int> list = rawSign.codeUnits;
   print(list); // the output that I expected suddenly change to [91, ..... so on]

   Uint8List signature = Uint8List.fromList(list); 

}

@override
Widget build(BuildContext context) {
   return Scaffold(
   .......
   .......
      child: Container(
         child: Image.memory(signature);         
      )
   )
}

SQL Сервер

column : Signature
datatype: nvarchar(max)

Исключение, которое я получил:

Не удалось создать экземпляр кода изображения c

Вопрос

  • Как видите, точка (Список), которую я получил с панели подписи, это le git точек (Список) но я конвертирую его в toString() при сохранении, потому что Flutter вызывает исключение, говоря, что не может разыграть Uint8Arrat to String. Итак, возможно ли получить Точки списка строк из базы данных и не преобразовать их в .codeUnits? Потому что при этом value changes from what expected.

1 Ответ

0 голосов
/ 30 марта 2020

Я наконец-то начал работать благодаря другому вопросу SO.

По сути, я сначала преобразовываю свои данные в base64 перед сохранением в базу данных.

data = {
  'Signature' : base64Encode(_fbKey.currentState.value['signature'])
}

А затем преобразовать его обратно в исходную форму

var signRes = jsonDecode(response.body);
String rawSign = signRes['data']['Signature'];
Uint8List signature = base64Decode(rawSign);

И, наконец, бум. Изображение успешно отображается в приложении, как и ожидалось.

...