我一直在尝试使用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中收到警告,我想知道自去年以来规格是否发生了变化。
答案 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,它应如下所示:
所以我可以用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);
[...]
}