Flutter hive - 检索非原始数据类型列表

问题描述 投票:0回答:1

我注册了一个 EventAdpator,它保存我的事件数据。我正在从 API 读取数据并将其存储在 Hive 中。

我的Hive函数是这样的

class HiveEvents { 
  static final eventsBox = Hive.box("eventsbox");

  static addEvent(Map data) {
    eventsBox.add(data);
  }

  static addEvents(List<Event> data) {
    eventsBox.addAll(data);
  }

  static List<Event> getAllEvents() {
    final data = eventsBox.keys.map((key) {
      final value = eventsBox.get(key);
      return value;  
    }).toList();

    return data;    // A value of type 'List<dynamic>' can't be returned from the method 'getAllEvents' because it has a return type of 'List<Event>'.
  }
}

之前数据都是这样写入hive的。

final Uri url = Uri.https(authority,path, queryParameters);
final http.Response result = await http.get(url);

if (result.statusCode == HttpStatus.ok) {
  final jsonResponse = jsonDecode(result.body);
  final eventData = jsonResponse["events"];
  
  List<Event> events =
      eventData.map<Event>((i) =>
        Event.fromJson(i)).toList();

      HiveEvents.addEvents(events);

      return events;
} else {
  return [];
}

当尝试从 getAllEvents 返回数据时,显示此错误,我不确定如何纠正它。

方法无法返回“List”类型的值 “getAllEvents”,因为它的返回类型为“List”

flutter hive
1个回答
0
投票

Hive.box
是一个泛型方法,因此您需要使用预期的类型来调用它,即
Event

class HiveEvents {
  static final eventsBox = Hive.box<Event>("eventsbox"); // (1) add <Event> here

  static addEvent(Map data) {
    eventsBox.add(data); // (2) should convert Map to Event first before passing it to the `add` method
  }

  static addEvents(List<String> data) {
    eventsBox.addAll(data);
  }

  static List<Event> getAllEvents() {
    final data = eventsBox.keys.map((key) {
      final value = eventsBox.get(key);
      return value!; // (2) add '!' herer
    }).toList();

    return data;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.