我正在尝试制作一个Flutter应用程序,但是在一个表单字段中遇到了一个奇怪的问题。
应该具有一个占位符,并且当用户键入任何内容时,占位符将成为标签。很简单。还有一件事情是,在完成“姓名”和“姓氏”字段后,表单将启用一个按钮。
正在发生两个问题。标签消失,按钮启用,就像是“或”逻辑而不是“与”逻辑。以下是代码: 表单字段:
Row(
children: [
Container(
width: 100,
height: 100,
child: FlatButton(
onPressed: open_gallery,
child: Center(
child: _image == null
? Text(
"add photo",
textAlign: TextAlign.center,
style: TextStyle(
color: brandLightBlue,
fontFamily: "Roboto",
fontSize: 16),
)
: Text(''),
),
),
decoration: _image == null
? BoxDecoration(
color: brandLightGrey,
borderRadius: BorderRadius.circular(200))
: BoxDecoration(
image: DecorationImage(
image: FileImage(_image), fit: BoxFit.fill),
color: brandLightGrey,
borderRadius: BorderRadius.circular(200)),
),
Container(
width: 30,
),
Column(
children: [
Container(
color: brandLightGrey,
width: MediaQuery.of(context).size.width * 0.6,
child: TextFormField(
onChanged: (value) {
print(value);
_inputName = value;
},
decoration: InputDecoration(
contentPadding: EdgeInsets.fromLTRB(10, 0, 0, 0),
hintText: _inputName == null || _inputName == ''
? ""
: "Name",
labelText: _inputName == null || _inputName == ''
? "Name"
: "",
labelStyle: TextStyle(
color: brandDarkGrey, fontFamily: 'Roboto'),
hintStyle: TextStyle(
color: brandDarkGrey, fontFamily: 'Roboto'),
fillColor: brandLightGrey),
),
),
Container(
height: 10,
),
Container(
color: brandLightGrey,
width: MediaQuery.of(context).size.width * 0.6,
child: TextField(
onSubmitted: (value) {
_inputSurname = value;
},
decoration: InputDecoration(
hintText: _inputSurname == null || _inputSurname == ''
? ""
: "Surname",
labelText:
_inputSurname == null || _inputSurname == ''
? "Surname"
: "",
hintStyle: TextStyle(
color: brandDarkGrey, fontFamily: 'Roboto'),
contentPadding: EdgeInsets.fromLTRB(10, 0, 0, 0),
),
),
),
],
)
],
),
这是按钮和按钮的逻辑:
RaisedButton(
elevation: 0,
color: brandBlue,
disabledColor: brandLightGrey,
onPressed: (_inputName == null && _inputSurname == null) ||
(_inputName == '' && _inputSurname == '')
? null
: () {
if (termAccepted == true) {}
print("AAAA");
},
child: Container(
width: MediaQuery.of(context).size.width * 0.9,
height: MediaQuery.of(context).size.height * 0.08,
child: Center(
child: Text(
"Next",
style: TextStyle(
color: brandWhite, fontFamily: 'Alata', fontSize: 18),
)),
)),
答案 0 :(得分:2)
我建议您为TextField
使用控制器。
final _inputSurnameController = TextEditingController();
final _inputNameController = TextEditingController();
将控制器添加到您的TextField
。
TextField(
onSubmitted: (value) {
_inputSurname = value;
},
decoration: InputDecoration(
hintText: _inputSurnameController.text == "" ? "": "Surname",
labelText: _inputSurnameController.text == ""? "Surname": "",
hintStyle: TextStyle(
color: brandDarkGrey, fontFamily: 'Roboto'),
contentPadding: EdgeInsets.fromLTRB(10, 0, 0, 0),
),
),