You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:57:07