出现错误:参数类型“产品”无法分配给参数类型“地图<字符串,动态>

Posted

技术标签:

【中文标题】出现错误:参数类型“产品”无法分配给参数类型“地图<字符串,动态>【英文标题】:getting error: The argument type 'Product' can't be assigned to the parameter type 'Map<String, dynamic> 【发布时间】:2019-09-28 04:26:52 【问题描述】:

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

The argument type 'Product' can't be assigned to the parameter type 'Map&lt;String, dynamic&gt;

这是我想要做的: 我有一个只有 2 TextFields 的表格 我已经用数据声明了一张地图

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】:

您需要将产品转换为地图

例子:

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 对象

【讨论】:

以上是关于出现错误:参数类型“产品”无法分配给参数类型“地图<字符串,动态>的主要内容,如果未能解决你的问题,请参考以下文章

AppBarDesign 无法分配给参数类型“PreferredSizeWidget”

Flutter中的参数类型“String”无法分配给参数类型“Uri”[重复]

参数类型“Future<>”不能分配给参数类型“”

错误:无法将参数类型“FirebaseApp”分配给参数类型“Firebase”

反应类型错误“不可分配给'从不'类型的参数”

错误:无法将参数类型“String”分配给参数类型“Uri”。 'Uri'来自'dart:core' [重复]