在颤振中将多个项目添加到列表中

时间:2021-06-12 15:05:33

标签: list flutter dart

我是一般编码新手,我现在正在 Flutter 中工作。我已经成功地将单个字符串对象添加到列表中,但是在将具有多个字符串的对象添加到列表中时遇到了问题。如果有人能够提供帮助,我希望得到一些指导!

这是我的模型

import 'dart:convert';

import 'package:json_annotation/json_annotation.dart';

@JsonSerializable(anyMap: true, explicitToJson: true)
class Product {
  String productName;
  String productDescription;

  Product(this.productName, this.productDescription);

  factory Product.fromJson(Map<String, dynamic> json) =>
    _$ProductFromJson(json);
  Map<String, dynamic> toJson() => _$ProductToJson(this);
}

Product _$ProductFromJson(Map<String, dynamic> json) {
  return Product(
    json['product name'] as String,
    json['product description'] as String,
  );
}

Map<String, dynamic> _$ProductToJson(Product instance) => <String, dynamic>{
      'product name': instance.productName,
      'product description': instance.productDescription,
    };

//trying to add Product strings into products
class UserData {
  ...
  final List<dynamic> accommodations; //successfully able to add single strings to list
  final List<dynamic> products; //unable to add multiple string objects to this list
  ...

  UserData(
      {...
      this.accommodations,
      this.products
      ...}
  );

  Map<String, dynamic> toJson() => {"products": this.products};
}

这里是连接firestore的数据库函数

  Future addProduct(List products) async {
    Map<String, dynamic> productMap = {
      'products': products.map((product) => products.toList())
    };
    await userCollection.doc(uid).update(productMap);
  }

等待,我已经编辑了多次,要么抛出错误“ArgumentError(无效参数:'产品'的实例)”或“_TypeError(类型'_InternalLinkedHashMap'不是类型的子类型'地图<字符串,对象>')"

最后,这是我试图用来将两个字符串值插入到产品列表中的 onPressed 事件。

String _currentProductName;
String _currentProductDescription;

这些都与 textformfields 相关联

onChanged: (val) {
 setState(() => _currentProductName = val);
},
onChanged: (val) {
 setState(() => _currentProductDescription = val);
},

以及我也尝试多次更改的 onPressed

RaisedButton(onPressed: () async {
 userData.products.add(Product(
  _currentProductName,
  _currentProductDescription));
 await DatabaseService(uid: user.uid).addProduct(userData.products);
}),

谢谢!

1 个答案:

答案 0 :(得分:0)

Firestore 只接受地图进行更新,因此您想要的是将您的产品映射到它的地图表示。我在移动设备上,所以请与我一起进行格式设置,但看起来像这样

products.map((p) => p.toMap()).toList()