Flutter中如何解码Signature插件返回的Future<Uint8List?>数据?
Flutter Signature插件toPngBytes()返回值解码处理方案
你调用controller.toPngBytes()后控制台输出Instance of 'Future<Uint8List?>',是因为这个方法是异步方法,返回的是Future对象而非直接的字节数据。需要通过异步方式获取实际的Uint8List后再进行解码或处理。
1. 用async/await获取实际字节数据
修改你的onTap回调,添加async关键字并使用await等待异步结果:
InkWell( onTap: () async { // 等待异步方法完成,获取PNG字节数据 Uint8List? pngBytes = await controller.toPngBytes(); if (pngBytes != null) { // 打印实际字节数据(不再是Future对象) print(pngBytes); // 以下是常见的处理方式示例 // 示例1:在新页面显示签名图片 Navigator.push(context, MaterialPageRoute( builder: (context) => Scaffold( appBar: AppBar(title: const Text('签名预览')), body: Center(child: Image.memory(pngBytes)), ) )); // 示例2:将字节数据保存为本地文件(需引入path_provider插件) // final directory = await getApplicationDocumentsDirectory(); // final file = File('${directory.path}/signature.png'); // await file.writeAsBytes(pngBytes); } else { print('未检测到签名内容'); } }, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(5), color: Colors.blue), child: const Center( child: Padding( padding: EdgeInsets.all(8.0), child: Text( "Done", style: TextStyle(color: Colors.white), ), ), ), ), )
2. 关键说明
toPngBytes()是异步方法,必须通过await或.then()链式调用获取结果,直接调用只会得到Future对象- 获取到的
Uint8List?可能为空,需要先做非空判断,避免后续操作出现空指针异常 - 拿到字节数据后,可以直接用
Image.memory()加载显示,也可以写入文件、上传服务器等
内容的提问来源于stack exchange,提问作者san
相关产品推荐
相关产品推荐

