firebase 如何使用dart json_serializable包序列化GeoPoint

fcwjkofz  于 2023-08-07  发布在  其他
关注(0)|答案(4)|浏览(135)

我试图使用以下包按距离过滤Firestore集合。
https://github.com/fluttercommunity/firestore_helpers
参考他们的例子,他们使用jaguar_serializer将从Firestore接收到的数据转换为Location类。我已经在我的应用中实现了他们的getDataInArea函数,但我目前被卡住了,因为我使用的是json_serializable。
我已经看了一下周围,发现下面的链接中有一个关于如何使用built_value处理GeoPoint的建议。
https://github.com/google/built_value.dart/issues/417#issuecomment-391661750
所以我想知道是否有一种方法可以实现像jaguar_serializer和built_value中显示的那样,但使用json_serializable包。
我猜一种方法是使用@JsonKey(fromJson: , toJson: ),但我不太确定如何使用它。

b09cbbtk

b09cbbtk1#

经过更多的挖掘和试图理解事情是如何运作的。我在课堂上写了下面的内容,设法解决了我的问题。

@JsonKey(fromJson: _fromJsonGeoPoint, toJson: _toJsonGeoPoint)
  GeoPoint location;

  static GeoPoint _fromJsonGeoPoint(GeoPoint geoPoint) {
    return geoPoint;
  }

  static GeoPoint _toJsonGeoPoint(GeoPoint geoPoint) {
    return geoPoint;
  }

字符串
我想这个想法只是不对GeoPoint对象进行任何更改。无论如何,我很乐意听到它,这是正确的方式,或者有一个更好的方式来做到这一点。干杯!

368yc8dk

368yc8dk2#

Firestore返回的类型是GeoPoint,您可以使用JsonConverter将其传递:

class GeoPointConverter
    implements JsonConverter<GeoPoint, GeoPoint> {
  const GeoPointConverter();

  @override
  GeoPoint fromJson(GeoPoint geoPoint) {
    return geoPoint;
  }

  @override
  GeoPoint toJson(GeoPoint geoPoint) =>
      geoPoint;
}

字符串
之后,注解参数:第一个月

qco9c6ql

qco9c6ql3#

你的办法对我不起作用。如果你在你的对象上尝试jsonEncode,它会失败。欢迎其他人的反馈。这是我的建议:

@JsonKey(fromJson: _fromJsonGeoPoint, toJson: _toJsonGeoPoint)
GeoPoint position;

字符串
第一个月

///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};
}

0ve6wy6x

0ve6wy6x4#

那些仍然面临问题的人应该使用下面的Helper类方法

GeoPoint? fromJsonGeoPoint(Map<String,dynamic> geoPoint) {
return GeoPoint(geoPoint["latitude"]??0.0000,geoPoint["longitude"]??0.0000) ;
}

  GeoPoint? toJsonGeoPoint(GeoPoint? geoPoint) {
return geoPoint;
}

字符串
在你的模型类中,只需要标记location字段的Annotators即可。

@JsonKey(fromJson: fromJsonGeoPoint, toJson: toJsonGeoPoint)
GeoPoint location;


fromJsonGeoPoint方法中,它是可空方法,我将LATLONG的默认值用作0.000

相关问题