Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 颤振:如何从Sembart数据库中存储和检索单个项/对象_Android_Flutter_Dart_Mobile - Fatal编程技术网

Android 颤振:如何从Sembart数据库中存储和检索单个项/对象

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>

我正在建立一个水果购物车,我希望它是持久的。我已经使用Sembast成功地实现了水果列表的持久化,但是我没有成功地实现购物车的持久化

如何从数据库中正确存储和检索购物车对象的单个记录

这是我的密码:

购物车实体

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相同的密钥。