在 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
就可以了。
但是,要确保它对于任何参数组合(在您的情况下为 id
、rn
和 company_details
)都是真正唯一的键,您可以使用 ObjectKey:
替换以下行:
key: Key(item)
具有以下内容:
key:ObjectKey(item)
这样 Flutter 就可以识别项目的参数并根据它们的组合创建键。
我正在尝试实现 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 而 flutter 没有找到。
这意味着:
key: Key(item)
Key(item)-> 不是字符串。我不知道你是怎么创建的 Key/where 是吗。
我最好的猜测是尝试找到一些方法,例如...:
`key: Key(item).aMethodthatgivesaString()`
`key: Key(item).toString()`
让我知道这是否有用。
如另一个答案中所述,Key 函数需要一个字符串来基于它创建一个键。如果您可以根据其中一个参数(例如 id
)识别一个项目,那么您可以使用 item.id
就可以了。
但是,要确保它对于任何参数组合(在您的情况下为 id
、rn
和 company_details
)都是真正唯一的键,您可以使用 ObjectKey:
替换以下行:
key: Key(item)
具有以下内容:
key:ObjectKey(item)
这样 Flutter 就可以识别项目的参数并根据它们的组合创建键。