目前(截至 2023 年 3 月,Unicode v15.1 草案),似乎只有具有不同常用图形表示的相关字符
有趣的是,U+1F4CC“图钉”字符的Unicode CLDR 注释数据中还有一个额外的替代“地图图钉”名称。
这个符号更合适的描述是“地图标记”,正如已经提到的。它可能会添加到 Unicode 的未来版本中,但我找不到任何相关的提案。
相关的相似符号可能是
在代码表中又被描述为“位置信息”。
我认为地图标记没有 unicode 字符。您可以使用 Font Awesome 来代替。
最接近的地图符号可能是🗺(世界地图,U+1F5FA)。
但是,对于实际使用,我发现⚐(白旗,U+2690)或⚑(黑旗,U+2691)是一个地方的最佳指示符,特别是因为它们采用字体颜色(即不是红色)。
如果您不介意红色,那么图钉可能是最好的,如 mykhal 的答案中所述。
您可以使用任何
Icon
作为 Flutter 中的字体——IconData
包含您需要的所有信息。使用 String.fromCharCode(iconData.codePoint)
获取要从某些 Flutter 图标集中渲染的图钉图标的代码点,然后使用设置 TextStyle
、fontFamily: icon.fontFamily
和 package: icon.fontPackage
的 fontFamilyFallback: icon.fontFamilyFallback
渲染该文本。这是一个类,它将呈现带有可选轮廓的图标,也可以模糊:
import 'package:flutter/material.dart';
class OutlinedIcon extends StatelessWidget {
final IconData icon;
final Color color;
final double size;
final double? outlineWidth;
final Color? outlineColor;
final double? blurRadius;
const OutlinedIcon({
super.key,
required this.icon,
required this.color,
this.size = 24,
this.outlineWidth,
this.outlineColor,
this.blurRadius,
});
@override
Widget build(BuildContext context) {
if (outlineWidth == null || outlineWidth == 0) {
return Icon(
icon,
color: color,
size: size,
);
}
final fontStyle = TextStyle(
inherit: false,
color: color,
fontSize: size,
fontFamily: icon.fontFamily,
package: icon.fontPackage,
fontFamilyFallback: icon.fontFamilyFallback,
// Makes sure the font's body is vertically centered within the
// iconSize x iconSize square.
height: 1.0,
leadingDistribution: TextLeadingDistribution.even,
);
final iconText = String.fromCharCode(icon.codePoint);
// Outline text, shown behind foreground text
final outlineText = Text(
iconText,
style: fontStyle.copyWith(
foreground: Paint()
..style = PaintingStyle.stroke
..strokeWidth = outlineWidth ?? 2
..color = outlineColor ?? Colors.black.withAlpha(128)
..maskFilter = MaskFilter.blur(BlurStyle.normal, blurRadius ?? 3.0),
),
// Never clip
overflow: TextOverflow.visible,
);
// Foreground text, shown over outline
final foregroundText = Text(
iconText,
style: fontStyle,
overflow: TextOverflow.visible,
);
return SizedBox(
width: size,
height: size,
child: Center(
child: Stack(
children: [
outlineText,
foregroundText,
],
),
),
);
}
}