1

我一直在尝试使用 Dart 的 IndexedDb 包从 IndexedDb 实例中获取单个条目。但我称之为getObject()文档所说的返回Future*(我不知道的未来)我没有任何Maps或其他对象可以使用。

方法中的Future返回是store.getObject(id).then()什么?如果它不返回任何内容,我如何获取存储在数据库中的信息?

//within a TurnObjectStore class
Future<Turn> getTurn(int id){
    Transaction t = _db.transaction(_TABLE_NAME, 'readonly');
    ObjectStore store = t.objectStore(_TABLE_NAME);
    return store.getObject(id).then((Map turn){
        print('getTurn');
        print(turn);
        return turn;
    });
}

此处回答了一个类似的问题indexed_db getObject() - 如何返回结果,但是当我尝试这种方式时,我在 IDE 中收到警告,我想知道自去年以来规范是否发生了变化。

4

1 回答 1

1

我正在使用 Dart 1.2 并且getObject(id)工作正常。

我相信返回的Future类型取决于存储在您的数据库中的内容......如果您确实将数据保存为对象的Map,它将返回一个Map

要将您的对象存储和恢复Map,您可以查看indexedDB 的官方 dart 示例

// Serialize this to an object (a Map) to insert into the database.
Map toRaw() {
   return {
     'milestoneName': milestoneName,
     'happensOn': happensOn.toString(),
   };
}

//Create a Milestone based on the Map returned by the IndexedDB
 Milestone.fromRaw(key, Map value):
  dbKey = key,
  milestoneName = value['milestoneName'],
  happensOn = DateTime.parse(value['happensOn']) {
  tick();
  }

您可以直接从 chrome 的开发人员工具中查看存储的对象,对于存储的 Map,它应该如下所示:

在此处输入图像描述

所以我可以用getObject取回对象:

var tr = mydb.transaction(myDB.CLIENT_STORE, 'readonly');
var st = tr.objectStore(myDB.CLIENT_STORE);
st.getObject(2).then((r){
    Client client = new Client.fromRaw(2,r);
    [...]
}
于 2014-04-13T02:09:10.403 回答