更新ListView中的多个TextField会导致滚动跳动

时间:2019-10-12 12:53:42

标签: listview flutter

我有一个ListView,其中包含多个TextField。编辑任何字段都应通过其他TextEditingController来更新所有其他字段的值。

但是,这会导致ListView在用户键入时迅速上下滚动。

我编写了一个小应用程序来重现该问题。当用户在任何字段中输入一些文本时,会将其复制到所有其他文本中:

TextFields cause scroll to jump around when updated within 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();
  }
}

感谢您的帮助!

0 个答案:

没有答案