Android 颤振:如何从Sembart数据库中存储和检索单个项/对象
我正在建立一个水果购物车,我希望它是持久的。我已经使用Sembast成功地实现了水果列表的持久化,但是我没有成功地实现购物车的持久化 如何从数据库中正确存储和检索购物车对象的单个记录 这是我的密码: 购物车实体Android 颤振:如何从Sembart数据库中存储和检索单个项/对象,android,flutter,dart,mobile,Android,Flutter,Dart,Mobile,我正在建立一个水果购物车,我希望它是持久的。我已经使用Sembast成功地实现了水果列表的持久化,但是我没有成功地实现购物车的持久化 如何从数据库中正确存储和检索购物车对象的单个记录 这是我的密码: 购物车实体 class Cart extends Equatable { final Map<int, int> cartList; Cart({this.cartList}); static Cart fromJson(Map<String, dynamic>
class Cart extends Equatable {
final Map<int, int> cartList;
Cart({this.cartList});
static Cart fromJson(Map<String, dynamic> json) => _$CartFromJson(json);
Map<String, dynamic> toJson() => _$CartToJson(this);
@override
List<Object> get props => [cartList];
}
类购物车扩展了equalable{
最终地图清单;
购物车({this.cartList});
静态Cart-fromJson(映射json)=>u$CartFromJson(json);
映射到JSON()=>$CartToJson(这个);
@凌驾
列表获取道具=>[cartList];
}
大车
Cart _$CartFromJson(Map<String, dynamic> json) {
return Cart(
cartList: (json['cartList'] as Map<String, dynamic>)?.map(
(k, e) => MapEntry(int.parse(k), e as int),
),
);
}
Map<String, dynamic> _$CartToJson(Cart instance) => <String, dynamic>{
'cartList': instance.cartList?.map((k, e) => MapEntry(k.toString(), e)),
};
Cart\u$CartFromJson(映射json){
返回车(
cartList:(json['cartList']作为映射)?.Map(
(k,e)=>MapEntry(int.parse(k),e为int),
),
);
}
映射$CartToJson(购物车实例)=>{
“cartList”:实例.cartList?.map((k,e)=>MapEntry(k.toString(),e)),
};
我的数据库存储库
class DatabaseHandler extends PlantsRepository {
static const String CART_STORE_NAME = 'cart__';
final _cartStore = intMapStoreFactory.store(CART_STORE_NAME);
Future<Database> get _database async => await FrutsDatabase.instance.database;
@override
Future<Cart> getPlantsFromCart() async {
final snap = await _cartStore.find(await _database);
final carts = snap.map((e) => Cart.fromJson(e.value)).toList();
return carts.elementAt(0);
}
@override
Future insertPlantIntoCart(Cart cart) async {
await _cartStore.add(await _database, cart.toJson());
}
}
class DatabaseHandler扩展了PlantsRepository{
静态常量字符串CART_STORE_NAME='CART__';
final _cartStore=intMapStoreFactory.store(购物车商店名称);
Future get_database async=>wait FrutsDatabase.instance.database;
@凌驾
Future getPlantsFromCart()异步{
final snap=await\u cartStore.find(await\u数据库);
final carts=snap.map((e)=>Cart.fromJson(e.value)).toList();
返回车。元素AT(0);
}
@凌驾
Future insertPlantIntoCart(购物车)异步{
wait_cartStore.add(wait_数据库,cart.toJson());
}
}
谢谢。获取记录的最简单方法是使用其密钥(或id,无论名称如何)。您在添加过程中获得密钥。下面是对
数据库处理程序
类的轻微修改:
class DatabaseHandler扩展了PlantsRepository{
///凭身份证领取购物车
未来getCart(int-id)异步{
var map=await\u cartStore.record(id).get(await\u数据库);
返回map==null?null:Cart.fromJson(map);
}
///添加购物车并返回其id
Future addCart(购物车)异步{
return await_cartStore.add(await_数据库,cart.toJson());
}
}
可以这样使用:
//插入购物车
var cartId=await databaseHandler.addCart(cart);
//阅读购物车
cart=await-databaseHandler.getCart(cartId);
非常感谢。您的解决方案很有帮助。顺便说一句,cartStore.record仍然有效,需要使用字符串方法查找会很方便,因为我从firebase获取数据,我可以将密钥存储为与Sembart相同的密钥。