在 flutter list 上实现 Dismissible 时出错

Getting Error on implementing Dismissible on flutter list

我正在尝试实现 Dismissible 以在 flutter 中滑动并从列表中删除项目,但是在实现相同的

时出现以下错误

type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'

在这行代码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",
            }
        }
    ],
}

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

type '_InternalLinkedHashMap' 不是 'String'

类型的子类型

意味着它崩溃了,因为它期待一个 String 而 flutter 没有找到。

这意味着:

key: Key(item)

Key(item)-> 不是字符串。我不知道你是怎么创建的 Key/where 是吗。

我最好的猜测是尝试找到一些方法,例如...:

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

让我知道这是否有用。

如另一个答案中所述,Key 函数需要一个字符串来基于它创建一个键。如果您可以根据其中一个参数(例如 id)识别一个项目,那么您可以使用 item.id 就可以了。

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

替换以下行:

key: Key(item)

具有以下内容:

key:ObjectKey(item)

这样 Flutter 就可以识别项目的参数并根据它们的组合创建键。

其他选项包括 ValueKey and UniqueKey