Flutter ListView 删除项目不起作用
Flutter ListView delete Items not working
我有一个 ListView.builder 和小部件,我想从中删除项目但是当我执行下面的行时没有任何反应。
if (mounted) {
setState(() {
verlustContentList.removeLast();
});
}
这是我生成列表的方式:
generateList() async {
return verlustContentList = List.generate(
15,
(index) => VerlustContent(
key: Key(
index.toString(),
),
),
);
}
这是我显示列表的方式:
StreamBuilder(
stream: generateList().asStream(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
return ListView.builder(
itemCount: verlustContentList.length,
itemBuilder: (context, index) {
return verlustContentList[index];
},
);
},
);
Class VerlustContent 是一个有状态的小部件。
StreamBuilder 侦听您定义的流,但您永远不会向该流推送 新数据。
如果您要在 .removeLast() 之后打印列表,它实际上会打印没有最后一个的列表。
我认为您应该删除 StreamBuilder,因为您甚至无法通过这种方式访问该流。在 initState() 上生成列表并将其显示在 ListView 中。如果生成确实需要一些时间,如果列表为空,您可以 return 一个 CircularProgressIndicator()。
class MyStateful extends StatefulWidget {
@override
_MyStatefulState createState() => _MyStatefulState();
}
class _MyStatefulState extends State<MyStateful> {
List<Text> list= [];
@override
void initState() {
super.initState();
generateList();
}
void generateList() {
list = List.generate(
15,
(index) => Text(
index.toString()
),
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Column(
children: [
Container(
height: 300,
child: ListView.builder(
itemCount: list.length,
itemBuilder: (context, index) {
return list[index];
},
),
),
ElevatedButton(
onPressed: () {
if (mounted) {
setState(() {
list.removeLast();
print(list);
});
}
},
child: Text('deleteLast'),
),
],
),
),
),
);
}
}
我有一个 ListView.builder 和小部件,我想从中删除项目但是当我执行下面的行时没有任何反应。
if (mounted) {
setState(() {
verlustContentList.removeLast();
});
}
这是我生成列表的方式:
generateList() async {
return verlustContentList = List.generate(
15,
(index) => VerlustContent(
key: Key(
index.toString(),
),
),
);
}
这是我显示列表的方式:
StreamBuilder(
stream: generateList().asStream(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
return ListView.builder(
itemCount: verlustContentList.length,
itemBuilder: (context, index) {
return verlustContentList[index];
},
);
},
);
Class VerlustContent 是一个有状态的小部件。
StreamBuilder 侦听您定义的流,但您永远不会向该流推送 新数据。
如果您要在 .removeLast() 之后打印列表,它实际上会打印没有最后一个的列表。
我认为您应该删除 StreamBuilder,因为您甚至无法通过这种方式访问该流。在 initState() 上生成列表并将其显示在 ListView 中。如果生成确实需要一些时间,如果列表为空,您可以 return 一个 CircularProgressIndicator()。
class MyStateful extends StatefulWidget {
@override
_MyStatefulState createState() => _MyStatefulState();
}
class _MyStatefulState extends State<MyStateful> {
List<Text> list= [];
@override
void initState() {
super.initState();
generateList();
}
void generateList() {
list = List.generate(
15,
(index) => Text(
index.toString()
),
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Column(
children: [
Container(
height: 300,
child: ListView.builder(
itemCount: list.length,
itemBuilder: (context, index) {
return list[index];
},
),
),
ElevatedButton(
onPressed: () {
if (mounted) {
setState(() {
list.removeLast();
print(list);
});
}
},
child: Text('deleteLast'),
),
],
),
),
),
);
}
}