如何在FlutterFlame中把Firebase数组映射为Vector2列表?
将Firebase获取的数组转换为Flutter Flame的Vector2列表
根据Firebase返回数据的不同结构,这里提供两种常见场景的转换方案:
场景1:Firebase返回二维数值数组
如果从Firebase拿到的是类似 [[100.0, 200.0], [300.0, 400.0]] 这样的二维数组,直接通过map转换即可:
import 'package:flame/geometry.dart'; // 从Firebase获取原始数组 List<List<double>> firebaseCoords = await yourFirebaseFetchMethod(); // 转换为Vector2列表 List<Vector2> vectorList = firebaseCoords .map((coordPair) => Vector2(coordPair[0], coordPair[1])) .toList();
场景2:Firebase返回含x/y字段的Map列表
如果返回的是包含x、y字段的Map列表(比如 [{"x": 100, "y": 200}, ...]),需要提取对应字段转换:
import 'package:flame/geometry.dart'; // 从Firebase获取原始Map列表 List<Map<String, dynamic>> firebaseDataList = await yourFirebaseFetchMethod(); // 转换为Vector2列表 List<Vector2> vectorList = firebaseDataList .map((data) => Vector2( (data['x'] as num).toDouble(), (data['y'] as num).toDouble(), )) .toList();
额外注意事项
- 如果Firebase返回的是整数类型,务必通过
.toDouble()转换为double,避免类型错误 - 若数据可能存在缺失
x/y的情况,建议添加空值过滤:
List<Vector2> vectorList = firebaseDataList .where((data) => data['x'] != null && data['y'] != null) .map((data) => Vector2( (data['x'] as num).toDouble(), (data['y'] as num).toDouble(), )) .toList();
内容的提问来源于stack exchange,提问作者Zzz
相关产品推荐
相关产品推荐

