我目前正在尝试从 Supabase 表“markers_info”动态加载图标,其中包含图标(其名称和代码点)等内容,并将其加载到标记中以显示在地图上。
id | 类型 | 图标代码 | 颜色_十六进制 |
---|---|---|---|
1 | 纪念碑 | e84f | #D5B92D |
2 | 博物馆 | e8f4 | #EFA31F |
3 | 酒吧 | e563 | #AD1F1F |
... | ... | ... | ... |
我成功加载了他们的颜色,但我很难加载他们的图标:
for (int i = 0; i < minLength; i++) {
final type = types[i];
final markerIcon = typeData[type]?['icon_code'] != null
? IconData(typeData[type]['icon_code'], fontFamily: 'MaterialIcons')
: Icons.place;
final markerColor = typeData[type]?['color'] != null
? Color(int.parse('0xff' + typeData[type]['color'].substring(1)))
: Colors.red;
我关于图标的代码可能不正确,但我不确定如何编写它,以便 Flutter 将从其 code_point 加载图标(例如,对于图标“Castle”,code_point 将是 eab1: Material Symbols概述:城堡)。
谢谢您的帮助!
找到了解决方案(像往常一样,在问这个问题 5 分钟后)。
我使用了此存储库中的十六进制代码:https://raw.githubusercontent.com/flutter/flutter/master/packages/flutter/lib/src/material/icons.dart
并将代码修改如下:
for (int i = 0; i < minLength; i++) {
final type = types[i];
final markerIcon = typeData[type]?['icon'] != null
? IconData(int.parse(typeData[type]['icon'], radix: 16),
fontFamily: 'MaterialIcons')
: Icons.place;
final markerColor = typeData[type]?['color'] != null
? Color(int.parse('0xff' + typeData[type]['color'].substring(1)))
: Colors.red;
所以对于“Castle”,它实际上是“0xf04cb”。确保事先删除 0x(即“f04cb”)。