Flutter Google Maps插件自定义Marker文本时ByteData的buffer报错
解决方案
问题出在ByteData的API使用上,在Flutter 3.x版本中,ByteData并没有buffer这个直接的getter,你可以直接调用ByteData自带的asUint8List()方法来转换为Uint8List。
修改代码最后一行即可:
// 原代码 return data?.buffer.asUint8List(); // 修改后 return data?.asUint8List();
如果仍然存在类型相关的提示,确保你已经导入了dart:typed_data库(大多数情况下Flutter会自动导入,但手动添加更稳妥):
import 'dart:typed_data'; import 'dart:ui' as ui;
完整的修正后函数代码:
Future<Uint8List> getBytesFromCanvas(String text) async { final ui.PictureRecorder pictureRecorder = ui.PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); final Paint paint1 = Paint()..color = Colors.grey; final int size = 100; // 根据你的应用需求调整大小 canvas.drawCircle(Offset(size / 2, size / 2), size / 2.0, paint1); TextPainter painter = TextPainter(textDirection: TextDirection.ltr); painter.text = TextSpan( text: text, // 自定义文本或使用参数传入 style: TextStyle( fontSize: size / 4, color: Colors.black, fontWeight: FontWeight.bold), ); painter.layout(); painter.paint( canvas, Offset(size / 2 - painter.width / 2, size / 2 - painter.height / 2), ); final img = await pictureRecorder.endRecording().toImage(size, size); final data = await img.toByteData(format: ui.ImageByteFormat.png); return data?.asUint8List(); // 这里是修改后的行 }
内容的提问来源于stack exchange,提问作者SyndicatorBBB
相关产品推荐
相关产品推荐

