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

Google Map自定义带文本标签Marker在部分设备显示倒置问题

Flutter Google Map自定义Marker文本标签倒置问题

我在Flutter中开发Google Map自定义Marker时,发现文本标签显示倒置。该问题仅出现在安卓模拟器及OPPO、VIVO、小米等部分国产手机上,iOS模拟器、iPhone及三星设备测试无异常。此问题出现在重新启用一个2-3个月未维护的旧项目后,此前显示正常。

测试代码

import 'dart:ui' as ui;

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(home: MyPage());
  }
}

class MyPage extends StatefulWidget {
  const MyPage({Key? key}) : super(key: key);

  @override
  State<MyPage> createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  Map<String, Marker> markers = <String, Marker>{};

  _onMapCreate(GoogleMapController controller) async {
    markers['test2'] = Marker(
      markerId: const MarkerId('test'),
      zIndex: 8,
      icon: await iconMarker(),
      position: const LatLng(14.0, 101.0),
    );

    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return GoogleMap(
      markers: Set<Marker>.of(markers.values),
      initialCameraPosition: const CameraPosition(target: LatLng(14.7, 100.7), zoom: 5),
      onMapCreated: _onMapCreate,
    );
  }
}

Future<BitmapDescriptor> iconMarker() async {
  ui.PictureRecorder recorder = ui.PictureRecorder();
  Canvas canvas = Canvas(recorder);

  canvas.drawRect(const Rect.fromLTWH(0, 0, 300, 100), Paint()..color = Colors.orange);

  TextSpan title = const TextSpan(style: TextStyle(fontSize: 70), text: "Thailand");

  TextPainter(text: title, textDirection: TextDirection.ltr)
    ..layout()
    ..paint(canvas, const Offset(10, 10));

  ui.Picture p = recorder.endRecording();
  ByteData? pngBytes = await (await p.toImage(300, 100)).toByteData(format: ui.ImageByteFormat.png);
  Uint8List data = Uint8List.view(pngBytes!.buffer);

  return BitmapDescriptor.fromBytes(data);
}

效果对比

  • 安卓模拟器运行效果:Marker文本呈现倒置状态
  • 三星设备运行效果:Marker文本显示正常

依赖环境

  • Flutter版本:3.29.0
  • Dart版本:3.7.0
  • google_maps_flutter: 2.10.1(测试2.5.3至2.10.1版本均存在该问题)
  • label_marker: 1.0.1(使用该库也出现倒置问题)

测试设备

  • SM A145F(Android 14,API 34)
  • sdk gphone64 x86 64模拟器(Android 15,API 35)

内容的提问来源于stack exchange,提问作者EK LY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:12:40