在颤振列表上实现“可忽略”时出错

时间:2020-10-13 14:18:38

标签: flutter dart flutter-listview

我正在尝试实现Dismissible以便从列表中滑动并从列表中删除该项目,但是在执行相同的操作时出现以下错误

类型'_InternalLinkedHashMap '不是以下类型的子类型 输入“字符串”

在代码key: Key(item)的这一行

我应该如何解决?

            ListView.separated(
              separatorBuilder: (context, index){
                return Divider();
              },
              controller: _scrollController,
              itemCount: noteItems,
              shrinkWrap: true,
              itemBuilder: (context, index) {

                final item = firstdata[index];
                return 
                  Dismissible(
                  direction: DismissDirection.endToStart,
                  key: Key(item),
                  onDismissed: (direction) {
                    setState(() {
                      firstdata.removeAt(index);
                    });
                    Scaffold.of(context)
                        .showSnackBar(SnackBar(content: Text("$item dismissed")));
                  },
                  background: Container(color: Colors.red)
                  ,

                  child: Padding(

                    padding: const EdgeInsets.fromLTRB(8.0, 7.0, 8.0, 0.0),
                    child: Column(
                      children: <Widget>[

                        ListTile(
                          
                          leading:ClipRRect(
                              borderRadius: BorderRadius.circular(10),
                              child: Image.asset('images/appstore.png', width: 50, height: 50)
                          ) ,

                          title:
                          Row(children: [
                            Flexible(
                              child: firstdata[index]['id']!= null?AutoSizeText(
                                firstdata[index]['id'],
                                maxLines: 2,


                                style: TextStyle(fontWeight: FontWeight.bold),) :Text(''),
                            ),

                          ],),



                        ),







                      ],
                    ),
                  ),
                );

              },

            ),

列表视图的JSON数据结构在下面

  {
    "error": "false",
    "notification": [
        {
            "rn": "1",
            "id": "224",
            "company_details": {
                "code": "2",
            }
        },
        {
            "rn": "2",
            "id": "219",
            "company_details": {
                "code": "3",
            }
        },
        {
            "rn": "3",
            "id": "213",
            "company_details": {
                "code": "3",
            }
        },
        {
            "rn": "4",
            "id": "209",
            "company_details": {
                "code": "4",
            }
        },
        {
            "rn": "5",
            "id": "204",
            "company_details": {
                "code": "3",
            }
        },
        {
            "rn": "6",
            "id": "199",
            "company_details": {
                "code": "3",
            }
        },
        {
            "rn": "7",
            "id": "193",
            "company_details": {
                "code": "3",
            }
        }
    ],
}

我应该如何实现并解决它?

2 个答案:

答案 0 :(得分:3)

如另一个答案中所述,Key函数期望字符串基于该字符串创建密钥。如果您可以根据某项参数(例如id)来标识某项,则可以使用item.id,就可以了。

但是,要确保它对于任何参数组合(在您的情况下为idrncompany_details)而言都是唯一键,则可以使用ObjectKey

替换以下行:

key: Key(item)

具有以下内容:

key:ObjectKey(item)

通过这种方式,Flutter可以识别项目的参数并根据它们的组合创建密钥。

其他选项包括ValueKeyUniqueKey

答案 1 :(得分:0)

类型'_InternalLinkedHashMap '不是类型'String'的子类型

意味着它崩溃了,因为它期望一个String并且flutter找不到它。

这意味着:

key: Key(item)

键(项目)->不是字符串。我不知道您要如何创建Key /它在哪里。

我最好的猜测是尝试找到类似...的方法:

`key: Key(item).aMethodthatgivesaString()`
`key: Key(item).toString()`

让我知道这是否有用。