如何在 Dart Flutter 中使 ListView.builder 或列表索引静态化
How to make an ListView.builder or List index static in Dart Flutter
我正在构建一个 flutter 应用程序,它会根据用户的交互增加列表中的索引值。
class _CheckoutScreenState extends State<CheckoutScreen>{
List<int> quantity = [1, 2, 1, 6];
void increment(int index){
setState((){
quantity[index] +=1;
});
}
void decrement(int index){
if(quantity[index] != 0){
setState((){
quantity[index] -=1;
});
}
}
@override
Widget build(BuildContext context){
return ListView.builder(
itemBuilder: (BuildContext context, index) {
return quantity[index] != 0 ?
ListTile(
leading: IconButton(
icon: Icon(Icons.remove),
onPressed: (){
decrement(index);
}
),
trailing: IconButton(
icon: Icon(Icons.add),
onPressed: (){
increment(index);
}
),
title: Text('${quantity[index].toString()} products')
)
}
)
}
}
当我 运行 这段代码,然后删除一个项目(一旦项目为 0,它就不会显示在屏幕上),索引随着 ListView.Builder 重建而移动。
例如,如果我删除了索引 2 处的项目(使其数量为 0),则索引应如下所示
[1,2,0,6]
但是由于列表视图构建器,索引发生了变化,列表视图构建器只有
[1,2,6]
与主列表不连续。如何在 listView 构建器中使该索引静态化,以便在需要重建时不会移动它
用Map替换List,将当前索引数量显示为Map,这样每个map key代表一个唯一的标识
我正在构建一个 flutter 应用程序,它会根据用户的交互增加列表中的索引值。
class _CheckoutScreenState extends State<CheckoutScreen>{
List<int> quantity = [1, 2, 1, 6];
void increment(int index){
setState((){
quantity[index] +=1;
});
}
void decrement(int index){
if(quantity[index] != 0){
setState((){
quantity[index] -=1;
});
}
}
@override
Widget build(BuildContext context){
return ListView.builder(
itemBuilder: (BuildContext context, index) {
return quantity[index] != 0 ?
ListTile(
leading: IconButton(
icon: Icon(Icons.remove),
onPressed: (){
decrement(index);
}
),
trailing: IconButton(
icon: Icon(Icons.add),
onPressed: (){
increment(index);
}
),
title: Text('${quantity[index].toString()} products')
)
}
)
}
}
当我 运行 这段代码,然后删除一个项目(一旦项目为 0,它就不会显示在屏幕上),索引随着 ListView.Builder 重建而移动。 例如,如果我删除了索引 2 处的项目(使其数量为 0),则索引应如下所示
[1,2,0,6]
但是由于列表视图构建器,索引发生了变化,列表视图构建器只有
[1,2,6]
与主列表不连续。如何在 listView 构建器中使该索引静态化,以便在需要重建时不会移动它
用Map替换List,将当前索引数量显示为Map,这样每个map key代表一个唯一的标识