基于列表创建小部件

Dhi*_*rma 8 dart flutter

我有一个参数 n,我必须创建 n 个文本字段并听取它们,并捕获所有这些字段的值。假设我必须对它们进行计算。我如何实现这一目标?我试图将循环与小部件结合起来,但出现了很多错误。

当我使用单独的函数返回列的 children 属性的小部件列表时,它会引发错误,指出type int is not a subtype of type string of source.

Rao*_*che 7

从您的d参数生成一个列表,然后从该列表生成一个文本字段列表和文本编辑控制器

createTexttextfields (int d){
    var textEditingControllers = <TextEditingController>[];

    var textFields = <TextField>[];
    var list = new List<int>.generate(d, (i) =>i + 1 );
    print(list);

    list.forEach((i) {
      var textEditingController = new TextEditingController(text: "test $i");
      textEditingControllers.add(textEditingController);
      return textFields.add(new TextField(controller: textEditingController));
    });
    return textFields;
}
Run Code Online (Sandbox Code Playgroud)

然后在您的小部件的 children 属性中使用此功能,例如列小部件

return new Scaffold(
  appBar: new AppBar(),
  body: new Column(
  children: createTexttextfields(6),
  ),
);
Run Code Online (Sandbox Code Playgroud)

但是如果你想访问它们,你不能通过函数来​​做到这一点,你必须将它们创建为变量

Widget build(BuildContext context) {
    var d=5;//the number of text fields 
    var textEditingControllers = <TextEditingController>[];
    var textFields = <TextField>[];
    var list = new List<int>.generate(d, (i) =>i + 1 );
    list.forEach((i) {
      var textEditingController = new TextEditingController(text: "test $i");
      textEditingControllers.add(textEditingController);
      return textFields.add(new TextField(controller: textEditingController));
    });

    return new Scaffold(
      appBar: new AppBar(),
      body: new Column(
      children: textFields),
      floatingActionButton: new FloatingActionButton(
        onPressed: (){
          //clear the text in the second TextEditingController
          textEditingControllers[1].clear(); 
        } ,
      ),
    );
  }
} 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 完整示例