我有一个ListView
,其中包含多个TextField
。编辑任何字段都应通过其他TextEditingController
来更新所有其他字段的值。
但是,这会导致ListView
在用户键入时迅速上下滚动。
我编写了一个小应用程序来重现该问题。当用户在任何字段中输入一些文本时,会将其复制到所有其他文本中:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Test(),
),
);
}
}
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
List<TextEditingController> _controllers;
@override
void initState() {
//Create multiple controllers to manage each field
_controllers = List.filled(50, TextEditingController());
super.initState();
}
@override
Widget build(BuildContext context) {
return ListView(
//Render a TextField for each controller
children: _controllers.map<Widget>((controller) => TextField(
controller: controller,
onChanged: (String value) {
//When any field changes, copy this value to all the others
_controllers.forEach((controller) {
if (controller.value.text == value) return; //Don't update the focused text field
controller.value = controller.value.copyWith(
text: value,
);
});
},
)).toList(),
);
}
@override
void dispose() {
_controllers.forEach((controller) => controller.dispose());
super.dispose();
}
}
感谢您的帮助!