如何在Flutter中使用其code_point设置图标(MaterialIcons)?

问题描述 投票:0回答:1

我目前正在尝试从 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概述:城堡)。

谢谢您的帮助!

flutter google-material-icons
1个回答
0
投票

找到了解决方案(像往常一样,在问这个问题 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”)。

© www.soinside.com 2019 - 2024. All rights reserved.