我正在尝试使用以下软件包按距离过滤我的Firestore集合。
https://github.com/fluttercommunity/firestore_helpers
以他们的示例为例,他们使用jaguar_serializer将从Firestore接收的数据转换为Location类。我已经在我的应用程序中实现了他们的getDataInArea函数,但是由于我使用的是json_serializable,因此我目前陷入困境。
我环顾四周,发现在下面的链接中有一个关于如何使用Geo_value处理GeoPoint的建议。
https://github.com/google/built_value.dart/issues/417#issuecomment-391661750
所以我想知道是否有一种方法可以实现类似于jaguar_serializer和Built_value中显示的内容,但是可以使用json_serializable包代替。
我猜测一种方法是使用@JsonKey(fromJson: , toJson: )
,但我不太确定该怎么做。
答案 0 :(得分:3)
经过更多的挖掘并试图了解事物的工作方式。通过在课堂上写下以下内容,我设法解决了问题。
@JsonKey(fromJson: _fromJsonGeoPoint, toJson: _toJsonGeoPoint)
GeoPoint location;
static GeoPoint _fromJsonGeoPoint(GeoPoint geoPoint) {
return geoPoint;
}
static GeoPoint _toJsonGeoPoint(GeoPoint geoPoint) {
return geoPoint;
}
我想这个想法只是不对GeoPoint对象进行任何更改。无论如何,我想听到这是正确的方法,或者有更好的方法可以做到这一点。干杯!
答案 1 :(得分:0)
您的解决方案对我不起作用。例如,如果您尝试在对象上使用 jsonEncode,它将失败。欢迎其他人反馈。这是我的建议:
@JsonKey(fromJson: _fromJsonGeoPoint, toJson: _toJsonGeoPoint)
GeoPoint position;
static GeoPoint _fromJsonGeoPoint(GeoPoint geoPoint) { return geoPoint; }
///A Map should be returned here to properly generate the json
static Map<String, dynamic> _toJsonGeoPoint(GeoPoint geoPoint) {
return {"latitude": geoPoint.latitude, "longitude":
geoPoint.longitude};
}
答案 2 :(得分:0)
Firestore 返回的类型是 GeoPoint,你可以直接通过 使用 JsonConverter:
class GeoPointConverter
implements JsonConverter<GeoPoint, GeoPoint> {
const GeoPointConverter();
@override
GeoPoint fromJson(GeoPoint geoPoint) {
return geoPoint;
}
@override
GeoPoint toJson(GeoPoint geoPoint) =>
geoPoint;
}
之后,注释您的参数:
@GeoPointConverter() required GeoPoint location