flutter - Flutter:listView.builder() 中 textField 的不可预测行为
问题描述
我是 Flutter 的新手。我正在尝试在多个文本字段中从用户那里获取输入,并且这些文本字段可以通过用户选择来减少和增加,因为每个文本字段前面都包含一个删除按钮。因此,当用户按下按钮添加另一个 textField 或删除现有 textField 时,我使用了 listViewBuilder 取决于 List 的大小来管理状态。主要问题是,假设我们有三个文本字段,其中包含一些初始值,并且这些值来自一个列表。笔记:所以预期的结果应该是,当我们删除第一个文本字段时,所有其他文本字段应该使用它们的 initialValues 向上移动一步,但它不是那样工作的。删除第一个 textField 后,List [index] 的值已成功删除,但该值存在于 textField向你描述我的问题。它的行为也与下拉按钮有关。
class _MyAppState extends State<MyApp> {
List<String> list = [
'alphabets',
'Numeric',
'special',
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(
children: [
Expanded(
child: ListView.builder(
itemBuilder: (context, index) {
return Padding(
padding: EdgeInsets.all(10),
child: Row(
children: [
Expanded(
child: TextFormField(
initialValue: list[index],
),
),
SizedBox(
width: 5,
),
TextButton(
onPressed: () {
setState(() {
list.removeAt(index);
});
},
child: Text('delete'),
),
],
),
);
},
itemCount: list.length,
),
),
TextButton(
onPressed: () {
for(int i = 0; i<list.length; i++){
print(list[i]);
}
},
child: Text('check remaining values'),
),
],
),
),
);
}
}
解决方案
推荐阅读
- firebase - 是否有任何带有用于 Google Firebase 集成的 Cloud Firestore 的 BI 软件
- java - 杰克逊反序列化器没有被调用
- spring - Spring Boot 什么时候需要 Thymeleaf 表达式分隔符?
- python - Multiple values for a word in Python dictionary
- node.js - Electron App was compiled against a different Node.js version Error
- java - How to write code for below problem using Java 8 stream
- docker - docker-compose sample that mount volumes inside of every swarm node
- java - AWS SQS Java SDK: Endpoint Override With A Path
- php - X-CSRF-Token implement guide
- laravel - What Is the Correct Way to Seed Multiple Many-to-many Relationships for a Single Instance in Laravel 8?