我正在尝试实现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",
}
}
],
}
我应该如何实现并解决它?
答案 0 :(得分:3)
如另一个答案中所述,Key函数期望字符串基于该字符串创建密钥。如果您可以根据某项参数(例如id
)来标识某项,则可以使用item.id
,就可以了。
但是,要确保它对于任何参数组合(在您的情况下为id
,rn
和company_details
)而言都是唯一键,则可以使用ObjectKey:
替换以下行:
key: Key(item)
具有以下内容:
key:ObjectKey(item)
通过这种方式,Flutter可以识别项目的参数并根据它们的组合创建密钥。
答案 1 :(得分:0)
类型'_InternalLinkedHashMap
意味着它崩溃了,因为它期望一个String并且flutter找不到它。
这意味着:
key: Key(item)
键(项目)->不是字符串。我不知道您要如何创建Key /它在哪里。
我最好的猜测是尝试找到类似...的方法:
`key: Key(item).aMethodthatgivesaString()`
`key: Key(item).toString()`
让我知道这是否有用。