list - 取消动态列表中的某些内容
问题描述
下面的代码很好,我对返回 Dismissible(key: Key( list ) 有一个问题。
Key(list) 表示“参数类型列表......不能分配给参数类型。”
我的意思是该列表没有定义,因为它的动态并从用户那里获取信息。
有人有解决方案吗?
TextEditingController tc;
List<String> list = [];
@override
void initState() {
super.initState();
tc = TextEditingController();
}
@override
Widget build(BuildContext context) {
body:ListView.builder(
itemCount:list.length,
itemBuilder:(context,index){
return Dismissible(key: Key(list),
onDismissed: (direction) {
setState(()
{
list.removeAt(index);
}); Scaffold.of(context).showSnackBar(SnackBar(content: Text('$list dismissed')));
Container(color: Colors.red);
},
child: ListTile(
title:Text(list[index],
style: TextStyle(color:Colors.black)),
));
}));}
void showPopup() {
tc.text = '';
showDialog(
context: context,
builder: (con) => AlertDialog(
title: Text('Add new Asset'),
content: TextField(
controller: tc,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Asset',
)),
actions: [
MaterialButton(
child: Text('ADD'),
onPressed: () {
if (tc.text.trim().isNotEmpty) addToList();
Navigator.of(con).pop();
})
]));
}
void addToList() {
setState(() {
list.add(tc.text.trim());
});
}
}
谢谢
解决方案
Key将String作为参数,而不是List。实现此目的的一个好方法是使用UniqueKey
例如
class Home extends StatelessWidget {
var myList = List.generate(100, (index) => index);
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: ListView.builder(
itemCount: myList.length,
itemBuilder: (context, index){
return Dismissible(
key: UniqueKey(),
child: ListTile(
title: Text("Hey $index"),
),
onDismissed: (direction){
myList.removeAt(index);
},
);
},
),
),
);
}
}
您也可以通过使用索引作为键来实现这一点 像这样
import 'package:flutter/material.dart';
class Home extends StatelessWidget {
var myList = List.generate(100, (index) => index);
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: ListView.builder(
itemCount: myList.length,
itemBuilder: (context, index){
return Dismissible(
key: Key("$index"),
child: ListTile(
title: Text("Hey $index"),
),
onDismissed: (direction){
myList.removeAt(index);
},
);
},
),
),
);
}
}
我希望这可以帮助你。
推荐阅读
- python - 无法在另一个类中获取对某个对象的引用
- java - 如何在春季使用 sort.and()
- spring-boot - 在 H2 上使用 current_timestamp 的模拟值进行测试
- python - 将程序划分为工作的可调用模块
- python - curve_fit - 关于 var/covar 矩阵的问题
- python - boto3 s3 客户端复制功能中可能的 ExtraArgs 值
- python - 使用 GaussianBlur 模糊图像并减去后,我有更多的非零像素
- database - 如何在 Jetbrain 的 Datagrip 中以字符串 UUID 格式显示 MongoDB UUID 二进制 ID 列
- xaringan - 幻灯片在 R 4.0.3 中无法正确渲染
- java - 如何从 JSpinner 获取/存储价值?