Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振长形不';t保存所有FormTextField值_Flutter_Flutter Form Builder - Fatal编程技术网

Flutter 颤振长形不';t保存所有FormTextField值

Flutter 颤振长形不';t保存所有FormTextField值,flutter,flutter-form-builder,Flutter,Flutter Form Builder,通过使用ListView.builder生成TextFormFields,我构建了一个相当长的表单。 如果我只生成了几个TextFormFields,事情似乎很顺利,但是当我有很多TextFormFields时,当我单击底部的save按钮时,似乎只保存了其中的一部分 我想知道我是否需要实现async/Wait或其他什么 就功能而言,表单是相当标准的。我正在引用,但没有单独列出每个TextFormField,我只有一个小部件函数,并以这种方式构建一个ListView 下面是我的代码(注意:实际上大

通过使用ListView.builder生成TextFormFields,我构建了一个相当长的表单。 如果我只生成了几个TextFormFields,事情似乎很顺利,但是当我有很多TextFormFields时,当我单击底部的save按钮时,似乎只保存了其中的一部分

我想知道我是否需要实现async/Wait或其他什么

就功能而言,表单是相当标准的。我正在引用,但没有单独列出每个TextFormField,我只有一个小部件函数,并以这种方式构建一个ListView

下面是我的代码(注意:实际上大约有20个变量,我在下面的代码中只列出了5个。另外,这是在一个有状态的小部件中):

final_formKey=GlobalKey();
字符串var1=“”;
字符串var2=“”;
字符串var3=“”;
字符串var4=“”;
字符串var5=“”;
列表_varListNames=[
“var1”,
“var2”,
“var3”,
“var4”,
“var5”
];
Map myMap={};
@凌驾
小部件构建(构建上下文){
返回安全区(
孩子:表格(
键:_formKey,
子项:ListView.builder(
itemCount:_varListNames.length+1,
itemBuilder:(上下文,索引){
返回索引==\u varListNames.length
?buildSubmit()
:experimentParameterWidget(
paramMapKey:_varListNames[索引],
paramMap:myMap,
);//文本(expParamKeys[索引])
}),
),
);
}
小部件myWidget({必需的字符串myKey,必需的myMap})=>TextFormField(
装饰:输入装饰(
labelText:myKey,
边框:OutlineInputBorder(),
),
验证器:(值){
如果(值!.length<2){
返回“输入至少2个字符”;
}
},
已保存:(值){
打印(“将$myKey保存为$value”);
设置状态(){
myMap[myKey]=值;
});
},
);
小部件buildSubmit()=>填充(
填充:常数边集全部(16.0),
子:列(
儿童:[
升降按钮(
已按下:(){
设置状态(){
final isValid=\u formKey.currentState!.validate();
如果(有效){
打印(“有效”);
_formKey.currentState!.save();
最终消息=expParams;
最终蛇杆=蛇杆(
内容:文本(
json.encode(消息),
样式:TextStyle(字体大小:20),
),
背景颜色:Colors.green,
);
ScaffoldMessenger.of(上下文)。showSnackBar(snackBar);
}
});
打印('myMap:$myMap');
打印('expParams length:${myMap.length}');
},
子项:文本(“保存”),
填充物(
填充:常量边集。对称(垂直:24),
子项:提升按钮(按下时:(){},子项:文本(“运行”),
),
],
),
);
这导致底部有一个小snackbar,其中显示了myMap的一些键值对,而终端中的print语句显示了更多的键值对(不是相同的)

我需要一份完整的清单

最终目标是在另一个选项卡上显示myMap键/值对

如果你需要更多的澄清,让我知道

谢谢你的帮助

final _formKey = GlobalKey<FormState>();

String var1 = "";
String var2 = "";
String var3 = "";
String var4 = "";
String var5 = "";

List<String> _varListNames = [
  'var1',
  'var2',
  'var3',
  'var4',
  'var5'
];

Map myMap = {};

@override
Widget build(BuildContext context) {
  return SafeArea(
    child: Form(
      key: _formKey,
      child: ListView.builder(
          itemCount: _varListNames.length + 1,
          itemBuilder: (context, index) {
            return index == _varListNames.length
                ? buildSubmit()
                : experimentParameterWidget(
              paramMapKey: _varListNames[index],
              paramMap: myMap,
            ); // Text(expParamKeys[index])
          }),
    ),
  );
}

Widget myWidget({required String myKey, required myMap}) => TextFormField(
      decoration: InputDecoration(
        labelText: myKey,
        border: OutlineInputBorder(),
      ),
      validator: (value) {
        if (value!.length < 2) {
          return 'Enter at least 2 characters';
        }
      },
      onSaved: (value) {
        print("SAVING $myKey as $value");
        setState(() {
          myMap[myKey] = value;
        });
      },
    );

Widget buildSubmit() => Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        children: [
          ElevatedButton(
              onPressed: () {
                setState(() {
                  final isValid = _formKey.currentState!.validate();
                  if (isValid) {
                    print("IS VALID");
                    _formKey.currentState!.save();
                    final message = expParams;
                    final snackBar = SnackBar(
                      content: Text(
                        json.encode(message),
                        style: TextStyle(fontSize: 20),
                      ),
                      backgroundColor: Colors.green,
                    );
                    ScaffoldMessenger.of(context).showSnackBar(snackBar);
                  }
                });
                print('myMap: $myMap');
                print('expParams length: ${myMap.length}');
              },
              child: Text("Save")),
          Padding(
            padding: const EdgeInsets.symmetric(vertical: 24),
            child: ElevatedButton(onPressed: () {}, child: Text("Run")),
          ),
        ],
      ),
    );