flutter - 即使我的文本字段不为空,错误消息也不会出现

标签 flutter dart flutter-layout textfield flutter-dialog

在我到达我的警报演示之前..我陷入了困境..

在我的警报对话框中,内容中有一个文本字段,

如果文本字段为空,我设置了一个错误文本,但即使输入此错误文本后也不会消失..它仍然存在......我的错是什么...... 这是我的代码

import 'package:flutter/material.dart';
class HomeScreen extends StatefulWidget {
  @override
  State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
  String name='';
  TextEditingController? txtname;
  get _errortext {
    final str=txtname!.value.text;
    if(str.isEmpty)
      return 'Cant be emtpy';
    else
       return null;
  }
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    txtname=TextEditingController();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Demo Page'),),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('My Name is '+name),
           SizedBox(height: 20.0,),
           ElevatedButton(onPressed: (){
             openDialog();
           }, child: Text("Get Name")),
          ],),),);}

  void openDialog() {showDialog(
        context: context,
        builder: (context)=>AlertDialog(
          title: Text('Enter Your name here'),
          content: TextField(
            controller: txtname,
            onChanged: (value){
              setState(() {});},
            decoration: InputDecoration(
              hintText: 'Enter Name',
              errorText: _errortext,
            ),),

          actions: [
            TextButton(onPressed: (){

            }, child: Text('Submit')),
          ],
        ));
  }}

最佳答案

要更新内部对话框,您需要使用StatefulBuilder并使用它的setState

 void openDialog() {
    showDialog(
        context: context,
        builder: (context) => StatefulBuilder(
              builder: (context, setState) => AlertDialog(
                title: Text('Enter Your name here'),
                content: TextField(
                  controller: txtname,
                  onTap: () {
                    setState(() {});
                  },
                  onChanged: (value) {
                    setState(() {});
                  },
                  decoration: InputDecoration(
                    hintText: 'Enter Name',
                    errorText: _errortext,
                  ),
                ),
                actions: [
                  TextButton(
                    onPressed: () {},
                    child: const Text('Submit'),
                  ),
                ],
              ),
            ));
  }

您还可以分离在这种情况下不需要的内容StatefulWidget

关于flutter - 即使我的文本字段不为空,错误消息也不会出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72534086/

相关文章:

flutter - 将项目映射到嵌套数组中并将其存储在列表中

flutter - 在 Dart 中为无效参数抛出异常(例如登录)?

flutter - 如何在 flutter 中创建年龄范围 slider ?

flutter - if condition to run Widget at Container flutter

flutter - 如何向LinearProgressIndicator 添加线性渐变?

flutter - 带子列的按钮不使用对齐

dart - Dart 脚本中的 Shebang 行(可移植方式)?

flutter - 访问 BuildContext 以从推送通知服务 (Flutter) 导航

flutter - 如何在 flutter 中对齐行和列中的点?

flutter - Flutter 中的 `TabBarView` 和 `PageView` 有什么区别?