在Dart中使用IndexedDb ObjectStore

时间:2014-04-11 03:37:57

标签: dart indexeddb dart-html

我一直在尝试使用Dart的IndexedDb包从IndexedDb实例中获取单个条目。但我打电话给getObject(),文档说明会返回Future *(我不知道的未来)我没有任何Maps或其他对象可以使用。< / p>

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() - how to return result但是当我以这种方式尝试时,我在IDE中收到警告,我想知道自去年以来规格是否发生了变化。

1 个答案:

答案 0 :(得分:1)

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

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

存储和恢复您的对象作为地图,您可以查看the official dart example for indexedDB

// 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,它应如下所示:

enter image description here

所以我可以用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);
    [...]
}