如何解决正在删除多个索引但我只想删除选中的索引 Flutter, dart
我试图在按下“删除”Flatbutton 时删除特定的 ExtraItem。一切似乎都与被删除的索引有关。但是,它还会从 UI 中删除/清除其他先前添加的文本(我不想要)。如何修复之前添加的所有其他文本的清除?
测试用例 1
删除索引 0 之前:before deletion
删除索引 0 后:after deletion
测试用例 2 删除索引 1 之前:before deletion 删除索引 1 后:after deletion
这是我的代码,其他用于复制
class ExtraItem extends StatefulWidget {
bool isLast = false;
final VoidCallback onExtraAdded;
final VoidCallback onNameChanged;
final VoidCallback onPriceChanged;
final VoidCallback onDeleteClicked;
final ExtraItem extra;
String name;
int price;
int index;
ExtraItem({
Key key,this.isLast,this.onExtraAdded,this.extra,this.index,this.onNameChanged,this.onPriceChanged,this.onDeleteClicked,}) : super(key: key);
@override
_ExtraItemState createState() => _ExtraItemState();
}
class _ExtraItemState extends State<ExtraItem> {
String type;
TextEditingController nameController = TextEditingController();
TextEditingController priceController = TextEditingController();
@override
void dispose() {
nameController.dispose();
priceController.dispose();
super.dispose();
}
_showExtrasDialog() async {
await showDialog<String>(
context: this.context,child: new _SystemPadding(
child: new AlertDialog(
title: Text(
'Modify Extras ',style: TextStyle(fontFamily: "Montserrat Medium",fontSize: 15),),contentPadding: const EdgeInsets.all(16.0),content: new Row(
children: <Widget>[],actions: <Widget>[
new FlatButton(
child: const Text('CANCEL'),onpressed: () {
Navigator.pop(this.context);
}),new FlatButton(
child: const Text('ADD EXTRA'),onpressed: () {
setState(() {
widget.onExtraAdded();
});
Navigator.pop(this.context);
}),//this is also for the modal
new FlatButton(
child: const Text('REMOVE'),onpressed: () {
setState(() {
widget.onDeleteClicked();
});
Navigator.pop(this.context);
})
],);
}
@override
Widget build(BuildContext context) {
return Container(
child: Padding(
padding: const EdgeInsets.only(bottom: 5,top: 5),child: Row(
mainAxisAlignment: MainAxisAlignment.start,children: [
Expanded(
child: Container(
width: 144,height: 49,decoration:
Boxdecoration(borderRadius: BorderRadius.circular(4)),child: Center(
child: Padding(
padding: const EdgeInsets.only(left: 0),child: TextField(
autofocus: true,controller: nameController,onChanged: (value) {
print("changing");
widget.name = value;
widget.onNameChanged();
},scrollPadding: EdgeInsets.all(0),decoration: Inputdecoration(
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
width: 1,color: Color(0xff2E2E2E))),isDense: true,enabledBorder: OutlineInputBorder(
borderSide: const BorderSide(
width: 1,color: Color(0xffDEDEDE))),SizedBox(
width: 10,Expanded(
child: Container(
width: 144,controller: priceController,onChanged: (value) {
print("changing");
widget.price = int.parse(value);
widget.onPriceChanged();
},decoration: Inputdecoration(
hintText: "\$",hintStyle: TextStyle(
color: sankaraGreyColor,fontFamily: "Montserrat Medium",focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
width: 1,isDense: false,// widget.isLast
// ?
Padding(
padding: const EdgeInsets.symmetric(horizontal: 5),child: Column(
mainAxisAlignment: MainAxisAlignment.start,crossAxisAlignment: CrossAxisAlignment.center,children: [
GestureDetector(
child: Container(
width: 20,height: 20,child: Center(
child: Text("+",style: TextStyle(
fontFamily: "Montserrat Medium",fontSize: 15,color: sankaraGreyColor)),decoration: Boxdecoration(
shape: BoxShape.circle,border: Border.all(color: Color(0xffDEDEDE))),onTap: () {
setState(() {
_showExtrasDialog();
});
},Padding(
padding: const EdgeInsets.only(top: 5),child: Text(
"Modify",style: TextStyle(
fontFamily: "Montserrat Medium",fontSize: 7),)
],)
// : Padding(
// padding: const EdgeInsets.symmetric(horizontal: 12),// child: Column(
// mainAxisAlignment: MainAxisAlignment.start,// crossAxisAlignment: CrossAxisAlignment.center,// children: [
// Container(
// width: 20,// height: 20,// ),// ],// ),// )
],);
}
}
这里发生交互
class ThirdPage extends StatefulWidget {
Function(List<ExtraItem>) onExtrasChanged;
Function(List<ExtraItem>) onDrinksChanged;
Function(List<ExtraItem>) onSidesChanged;
Function(int) onExtrasRemoved;
ThirdPage(
{this.onExtrasChanged,this.onDrinksChanged,this.onSidesChanged,this.onExtrasRemoved});
@override
_ThirdPageState createState() => _ThirdPageState();
}
class _ThirdPageState extends State<ThirdPage> {
List<ExtraItem> extras = [];
List<ExtraItem> drinks = [];
List<ExtraItem> sides = [];
void addDrinksItem() {
print("adding drink");
for (int i = 0; i < drinks.length; i++) {
setState(() {
drinks[i].isLast = false;
});
}
setState(() {
drinks.add(ExtraItem(
onExtraAdded: () {
addDrinksItem();
},onNameChanged: () {
widget.onDrinksChanged(drinks);
printDrinkValues();
},onPriceChanged: () {
widget.onDrinksChanged(drinks);
printDrinkValues();
},isLast: true,index: drinks.length,));
});
}
void _deleteItem(int index) {
print(index);
setState(() {
extras.removeAt(index);
});
}
@override
void initState() {
addExtraItem();
addDrinksItem();
addSidesItem();
super.initState();
}
@override
Widget build(BuildContext context) {
return Column(
children: [
GestureDetector(
onTap: () {
print(extras[0].isLast);
},child: Container(
width: 380,height: 600,decoration: Boxdecoration(
borderRadius: BorderRadius.circular(4),border: Border.all(color: Color(0xffECECEC))),child: Padding(
padding: const EdgeInsets.only(left: 20,right: 0,top: 30),child: ListView(
physics: NeverScrollableScrollPhysics(),padding: EdgeInsets.symmetric(horizontal: 0),shrinkWrap: true,scrollDirection: Axis.vertical,children: [
GestureDetector(
onTap: () {
printExtraValues();
},child: Text(
"Customize your menu",fontSize: 20,color: Colors.black),Padding(
padding: const EdgeInsets.only(top: 5,bottom: 20),child: Text(
"Include any add-ons,if any",style: TextStyle(
fontFamily: "Montserrat Regular",fontSize: 12,color: sankaraGreyColor),Padding(
padding: const EdgeInsets.only(bottom: 10),child: Text(
"MealBox item as extra",Row(
mainAxisAlignment: MainAxisAlignment.start,crossAxisAlignment: CrossAxisAlignment.start,children: [
Container(
width: 144,child: Text(
"Name",style: TextStyle(
fontFamily: "Montserrat Medium",fontSize: 10,SizedBox(
width: 16,Container(
width: 144,child: Text(
"Price Per Item",],Container(
child: ListView.builder(
physics: NeverScrollableScrollPhysics(),itemCount: extras.length,itemBuilder: (context,index) {
int ind = index;
final extra = extras[index];
return ExtraItem(
key: ObjectKey(extra),extra: extras[index],onExtraAdded: () => addExtraItem(),onDeleteClicked: () => _deleteItem(ind),);
},
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。