收到错误消息:无法将参数类型'Product'分配给参数类型'Map <string,dynamic =“”>

时间:2019-05-10 09:26:01

标签: firebase dart flutter model bloc

我正在尝试添加一些新数据,但出现错误:

The argument type 'Product' can't be assigned to the parameter type 'Map<String, dynamic>

这是我想要做的: 我有一个仅包含2个TextField的表单 我已经用数据声明了地图

final Map<String, dynamic> _formData = {
      'title': null,
      'content': null,
    };

然后,我使用bloc通过模型构造函数Product

传递数据
RaisedButton(
                child: Text('Add'),
                  onPressed: () {
                  bloc.createData(
                    Product(
                        title: _formData['title'],
                        content: _formData['description'],
                  )
                  );
                }
              ),

在集团中,我像这样将其传递给提供者:

  void createData(Product product) async {
    String id = await db.createData(product);
    _inId.add(id);
  }

来了:

Future createData(Product product) async {
    DocumentReference ref = await db.collection("product").add(product); //error: The argument type 'Product' can't be assigned to the parameter type 'Map<String, dynamic>
    print(ref.documentID);
    return ref.documentID;
}

因为我正在使用collection_reference并需要一张地图,所以我不能使用参数模型Products,其构造如下:

class Product {

  final String title, content;

  Product({this.title, this.content});

}

1 个答案:

答案 0 :(得分:0)

您需要将产品转换为Map

示例:

Future createData(Product product) async 
{ 
    await db.collection("product").add( _convertProductToMap(product));
}

Map<String, dynamic> _convertProductToMap( Product product )
{
    Map<String, dynamic> map = {};
    map['title'] = product.title;
    map['content'] = product.content;

   return map;
}

从db中检索数据后,您还需要将反向映射转换为Product对象