【问题标题】:Flutter Uint8list string from database render as Image来自数据库的 Flutter Uint8list 字符串呈现为图像
【发布时间】:2020-07-09 14:54:24
【问题描述】:

场景:

  • 我有一个签名板,它的点(列表)保存到 SQL 服务器。
  • 我从数据库中获取它并将其显示到另一个屏幕上。

Flutter 保存代码

我只会提供我认为相关的重要代码。

// 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 获取代码

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)

我得到的异常:

无法实例化图像编解码器

问题

  • 如您所见,我从签名板获得的点(列表)是合法的点(列表),但我在保存时将其转换为 toString(),因为 Flutter 抛出异常说不能转换 Uint8Arrat to String。那么,是否可以从数据库中获取 Stringed List points 而不将其转换为 .codeUnits?因为这样做时,value changes from what expected.

【问题讨论】:

    标签: sql-server laravel image flutter uint8list


    【解决方案1】:

    感谢the other SO question.,我终于让它工作了

    基本上,我先将数据转换为 base64,然后再保存到数据库中。

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

    然后将其转换回原来的形式

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

    最后,繁荣。图像按预期成功呈现在应用程序中。

    【讨论】:

      猜你喜欢
      • 2020-07-18
      • 2022-01-11
      • 2022-10-05
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 2020-10-26
      • 2021-04-11
      相关资源
      最近更新 更多