如何在FlutterFlow中为自定义文档记录对象赋值?
在FlutterFlow中构造LocationRecord对象适配GoogleMaps组件
我在FlutterFlow里需要给自定义文档记录对象赋值,已经创建了集合和Location文档类型,要把这类Location文档的列表传给GoogleMaps组件,但该组件只支持通过文档绑定标记数据,没法用自定义数据类型列表。之前用自定义数据类型实现了功能,现在要改写成适配文档记录的代码。
我的位置数据来自API,不需要存数据库,只需要构造LocationRecord对象来适配GoogleMaps组件,请问怎么给LocationRecord对象设置name、description、latLng的值?
现有代码:
List<LocationRecord> createLocationRecordsFromJson(dynamic jsonMarkers) { /// MODIFY CODE ONLY BELOW THIS LINE List<LocationRecord> locations = []; dynamic markers = jsonMarkers['markers']; markers.forEach((element) { LocationRecord location = new LocationRecord(); /// something like location.set('name', element['title']); locations.add(location); }); return locations; /// MODIFY CODE ONLY ABOVE THIS LINE }
解决方案
FlutterFlow生成的LocationRecord类通常会提供带参数的构造器,或是支持直接给公开属性赋值,以下是两种可行的修改方式:
方式1:通过构造器直接初始化对象
如果LocationRecord包含对应字段的构造方法,创建对象时直接传入参数即可:
List<LocationRecord> createLocationRecordsFromJson(dynamic jsonMarkers) { /// MODIFY CODE ONLY BELOW THIS LINE List<LocationRecord> locations = []; dynamic markers = jsonMarkers['markers']; markers.forEach((element) { // 先构造LatLng对象,注意确保导入google_maps_flutter包 final latLng = LatLng( double.parse(element['latitude'].toString()), double.parse(element['longitude'].toString()), ); // 通过构造器初始化LocationRecord LocationRecord location = LocationRecord( name: element['title'], description: element['description'], // 需与API返回的描述字段对应 latLng: latLng, ); locations.add(location); }); return locations; /// MODIFY CODE ONLY ABOVE THIS LINE }
方式2:直接给对象属性赋值
如果LocationRecord的字段是公开可写的,直接给属性赋值即可:
List<LocationRecord> createLocationRecordsFromJson(dynamic jsonMarkers) { /// MODIFY CODE ONLY BELOW THIS LINE List<LocationRecord> locations = []; dynamic markers = jsonMarkers['markers']; markers.forEach((element) { LocationRecord location = LocationRecord(); final latLng = LatLng( double.parse(element['latitude'].toString()), double.parse(element['longitude'].toString()), ); // 直接给属性赋值 location.name = element['title']; location.description = element['description']; location.latLng = latLng; locations.add(location); }); return locations; /// MODIFY CODE ONLY ABOVE THIS LINE }
注意要点
- 确保API返回的字段名和赋值时的字段对应,比如如果API标题字段是
name,要改成element['name'] - 经纬度需转换为
double类型,避免类型不匹配报错 - 如果
LocationRecord有必填的文档ID字段,可传入临时值(比如Uuid().v4(),需导入uuid包)或空字符串,因为不需要存储到数据库,临时值不影响地图组件使用
内容的提问来源于stack exchange,提问作者Abenil
相关产品推荐
相关产品推荐

