Flutter能否绕过Android的Emoji尺寸限制?
Android平台Emoji缩放异常的Flutter绕过方案
Android平台的Emoji缩放存在异常问题,该问题在Android 11及更早版本就已出现,且Android 12中仍未修复。
目前在Flutter中使用FittedBox将Emoji缩放到父容器尺寸的方案,在多数平台运行正常,但Android平台下当尺寸超过约90px时,渲染结果会出现异常。InteractiveViewer无法解决该问题,用它包裹Column组件反而能更直观地展示问题。现寻求绕过该限制的方法,比如通过转为图片再缩放等方式。
效果对比
DartPad正常效果

Android真机/模拟器异常效果
在Android真机或模拟器中,90px及以上尺寸的Emoji显示异常:本该是90x90的Emoji会显示为一条黄色大曲线(模拟器中无此曲线,但Emoji仍缺失)。
测试代码
import 'package:flutter/material.dart'; const Color darkBlue = Color.fromARGB(255, 18, 32, 47); void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData.dark().copyWith( scaffoldBackgroundColor: darkBlue, ), debugShowCheckedModeBanner: false, home: Scaffold( body: Center( child: MyWidget(), ), ), ); } } class MyWidget extends StatelessWidget { @override Widget build(BuildContext context) { const String emoji = "😃"; return InteractiveViewer( child: Column(children: [ Container( color: Colors.green, width: 70, height: 70, child: const FittedBox(fit: BoxFit.contain, child: Text(emoji))), Container( color: Colors.green, width: 80, height: 80, child: const FittedBox(fit: BoxFit.contain, child: Text(emoji))), Container( color: Colors.red, width: 90, height: 90, child: const FittedBox(fit: BoxFit.contain, child: Text(emoji))), Container( color: Colors.red, width: 100, height: 100, child: const FittedBox(fit: BoxFit.contain, child: Text(emoji))), Container( color: Colors.red, width: 180, height: 180, child: const FittedBox(fit: BoxFit.contain, child: Text(emoji))), ]), ); } }
补充说明
评论区@Marcel Dz建议尝试Flutter 2.10.5版本,相关验证工作正在进行中:
内容的提问来源于stack exchange,提问作者SpiRail
相关产品推荐
相关产品推荐

