【发布时间】:2018-11-24 16:17:35
【问题描述】:
我有一个表单,里面有很多 TextFormFields 和(目前)一个 DropDownButton。
当我点击其中一个 TextFormFields 时,键盘会闪烁,但不会停留。我发现的唯一解决方法是开始在我的计算机键盘上键入以使电话键盘自行弹出 - 显然不是在任何地方键入 - 然后,当键盘已经启动时,点击 TextFormField 然后我能够输入文本,但是一旦我点击该字段,输入的文本就会消失。此创可贴对除名称以外的所有字段都无效,因为它们的键盘类型是数字键盘。因此,由于既不输入字母也不输入数字会在手机上调用此键盘,因此不可能让键盘实现这些字段。
我确信 Form 是问题所在,因为在相同的分层情况下,如果我将 Padding 的子项更改为直接转到相同的 ListView,所有 TextFormField 问题都会消失。
我选择不包含我的 DropDownButton 问题的相关代码,因为它可能是不相关的,因为这是我暂时删除表单小部件时唯一无法解决的问题。
With temporary workaround, entered text still will not remain after exiting field
DropDownButton wont display selected value
class NewPage extends MaterialPageRoute<Null>{
final formKey = GlobalKey<FormState>();
String _name;
void _submit(){
final form = formKey.currentState;
if(form.validate()){
form.save();
print("$_name");
}
}
final name = TextFormField(
//all other TextFormFields are declared as name is
validator: (val) =>
val.isEmpty? "Name can't be empty.': null,
onSaved: (val) => _name = val,
decoration: InputDecoration(
labelText: "Name",
labelStyle: TextStyle(
fontSize: 20.0,
),
contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 12.0),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20.0),
)
)
);
final age = TextFormField(
keyboardType: TextInputType.number,
validator: null,
decoration: InputDecoration(
labelText: "Age",
labelStyle: TextStyle(
fontSize: 20.0,
),
contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 12.0),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(20.0),
)
),
);
return Scaffold(
body: Padding(
padding: EdgeInsets.symmetric(horizontal: 20.0),
child: new Form(
key: formKey,
child: new ListView(
children: <Widget> [
SizedBox(height: 100.0),
name,
SizedBox(height: 20.0),
new Text("Sex:"),
sex,
SizedBox(height: 20.0),
age,
//and so on
new RaisedButton(
onPressed: _submit,
child: new Text("Go"),
),
],
),
),
),
);
}
【问题讨论】:
标签: android ios dart flutter flutter-layout