微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flutter 基于文本字段上的用户输入禁用和启用按钮

如何解决Flutter 基于文本字段上的用户输入禁用和启用按钮

如何在用户尚未向文本字段添加任何内容时禁用按钮,然后在用户输入内容后启用它?

有可能吗?如果没有,还有其他方法吗?

谢谢

return AlertDialog(
      
      contentPadding: EdgeInsets.only(top: 5.0),content: Padding(
        padding: EdgeInsets.only(left: 15.0,right: 15.0,bottom: 20.0),child: TextField(
          keyboardType: TextInputType.multiline,decoration: Inputdecoration(labelText: 'Send a new message...'),onChanged: (value) {
            setState(() {
              _newMessage = value;
            });
          },),actions: [
        IconButton(
          color: Colors.tealAccent,icon: Icon(
            Icons.navigate_next_rounded,size: 40.0,onpressed: _newMessage.trim().isEmpty ? null :  _sendNewMessage,],);

解决方法

使用文本编辑控制器 https://flutter.dev/docs/cookbook/forms/text-field-changes

final controller = TextEditingController();
 onPressed: controller.text.length==0 ? null :  _sendNewMessage,

请检查.length是否正确不记得了哈哈

,

要实现这一点,您必须从文本字段中获取输入的长度,正确的方法是使用 TextEditingController,但为了这个简单的目的,应该使用 workarount 来完成这项工作。

代码:

onChanged: (value) { setState(() { _newMessage = value; if(_newMessage.length > 0){ //add these lines isInputEmpty = false; } else { isInputEmpty = true; } }); }, 之前初始化一个新的 bool isInputEmpty

IgnorePointer(
          ignoring: isInputEmpty,child: IconButton(...),),

并且要禁用按钮,您可以将他包裹在 IgnorePointer

IconButton(
          color: isInputEmpty ? Colors.grey : Colors.tealAccent,

您甚至可以更改按钮颜色:

struct List {
    std::list<Term> terms;
    int number;
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。