Files
flutter-go/lib/model/collection.dart
2019-08-14 23:40:16 +08:00

115 lines
3.0 KiB
Dart

/// @Author: 一凨
/// @Date: 2019-01-07 16:24:42
/// @Last Modified by: 一凨
/// @Last Modified time: 2019-01-08 17:37:42
import 'dart:async';
import 'package:idb_shim/idb.dart';
import 'package:idb_shim/idb_browser.dart';
abstract class CollectionInterface {
String get name;
String get router;
}
class Collection implements CollectionInterface {
String name;
String router;
Collection({this.name, this.router});
factory Collection.fromJSON(Map json){
return Collection(name: json['name'],router: json['router']);
}
Object toMap() {
return {'name': name, 'router': router};
}
}
class CollectionControlModel {
final String table = 'collection';
Database _db = null;
IdbFactory idbFactory = getIdbFactory();
CollectionControlModel() {
creatObject();
}
Future creatObject() async {
if(_db == null){
_db = await idbFactory.open("my_records.db", version: 1,
onUpgradeNeeded: (VersionChangeEvent event) {
Database db = event.database;
if(!db.objectStoreNames.contains(table)){
var store = db.createObjectStore(
table, keyPath: 'name', autoIncrement: true);
//store.createIndex('Name', 'name', unique:true);
}
}
);
return _db;
}else {
return _db;
}
// insert(Collection(name: 'widget.title1', router: 'router'));
// insert(Collection(name: 'widget.title2', router: 'router'));
// deleteByName('widget.title1');
// getAllCollection();
}
// 获取所有的收藏
// 插入新收藏
Future insert(Collection collection) async {
var txn = _db.transaction(table, idbModeReadWrite);
var store = txn.objectStore(table);
var key = await store.put({'name': collection.name, 'router': collection.router});
final value = await store.getObject(key) as Map;
await txn.completed;
return value;
}
// 获取全部的收藏
Future<List<Collection>> getAllCollection() async {
var db = await creatObject();
var txn = db.transaction(table, idbModeReadOnly);
var store = txn.objectStore(table);
List<Collection> resultList = [];
store.openCursor().forEach((item){
resultList.add(Collection.fromJSON(item.value as Map));
item.next();
});
await txn.completed;
return resultList;
}
// 通过收藏名获取router
Future getRouterByName(String name) async {
var db = await creatObject();
var txn = db.transaction(table, idbModeReadOnly);
var store = txn.objectStore(table);
var value = await store.getObject(name) as Map;
List<Map> resultList = [];
if(value != null){
resultList.add(value);
}
await txn.completed;
return resultList;
}
// 删除
Future deleteByName(String name) async{
var txn = _db.transaction(table, idbModeReadWrite);
var store = txn.objectStore(table);
var value = await store.getObject(name) as Map;
await store.delete(name);
await txn.completed;
return value != null ? 1 : 0;
}
}