用于Geopoint的Flutter Hive适配器

时间:2020-07-11 05:42:09

标签: firebase flutter google-cloud-firestore hive geopoints

问候Stack超赞的人们。我将一个geopoint存储在Firestore中,然后尝试使用Hive适配器检索它。但是,我正在Cannot write, unknown type: GeoPoint. Did you forget to register an adapter?中注册适配器,所以这不是问题。是数据的地理位置部分。

这是我的蜂巢场

@HiveField(5)
  Map<String, dynamic> location;

这是我在Firestore数据库中的外观

enter image description here

有人遇到这个问题,还是有办法为Hive / Firestore创建一个适配器以供使用。

谢谢

1 个答案:

答案 0 :(得分:0)

要创建 Gepoint Adapter,您需要有一个可以适应的模型。 我不确定您如何处理存储在该地理点中的数据,我想我会以某种方式简单地解析数据。 所以我假设这个模型:

import 'package:hive/hive.dart';

part 'location.g.dart';

@HiveType(typeId: 0)
class Location {
  @HiveField(0)
  String geohash;

  @HiveField(1)
  GeoPoint geoPoint;

  @HiveField(2)
  String locationPreviewURL;
}

注意 部分 'location.g.dart'; 。 生成器最终会使用它来创建适配器。

为包含 Hive 可以处理的类型的 GeoPoint 创建一个模型,所以我现在假设您的值的地理数据部分是一个字符串。 您需要决定如何处理这种类型的值。 我现在将重点放在适配器部分。

import 'package:hive/hive.dart';

part 'geopoint.g.dart';

@HiveType(typeId: 1)
class GeoPoint {
  @HiveField(0)
  String geodata;
}

到位后,转到您的终端并运行

flutter packages pub run build_runner build

创建适配器。 请注意,您需要在更改 HiveModels 时重新创建它们。 你应该使用

flutter packages pub run build_runner build --delete-conflicting-outputs

为此。

最后,您需要注册您的适配器,以便 Hive 可以使用它们。 所以在打开任何盒子之前,通常是在初始化应用程序调用时

Hive.registerAdapter(LocationAdapter());
Hive.registerAdapter(GeoPointAdapter());