forms - 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),
)),
)),
解决方案
我会建议你为你的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),
),
),
推荐阅读
- android - 不能同时使用 Fabulous 和 Android.Speech
- kotlin - 从“Where x is not null”的查询结果构建对象时,是否仍然可以在属性“x”上获得“NullPointerException”
- nginx - Nginx 使用上游变量删除位置路径
- php - PHP删除重复的数组值
- javascript - Eslint Jsdoc 插件未执行
- python - 用于 uvicorn 的 unix 套接字上的 Nginx 反向代理不起作用
- vuejs2 - VUE路由重定向未从其他页面关闭模式
- javascript - 如何在 HTML5 样板中添加 require()
- html - Edge 中嵌入 PDF 的默认缩放
- c# - 从 ConcurrentDictionary 中删除多个元素