错误消息nt即使我的Textfield不为空

发布于 2025-02-05 04:42:12 字数 1677 浏览 2 评论 0原文

在联系我的警报演示之前。.我陷入了开始。

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

如果Textfield为空,我已经设置了一个错误文本,但即使输入此错误文本也不消失。留在那里....我的错... 这是我的代码

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')),
          ],
        ));
  }}

Before I reach to my alert demo.. I am stuck in the beginning..

In my alert dialog there is a textField in content,

I have set an error text if textfield is empty but even after typing this error text not disappearing..it remains there....what is my fault...
here is my code

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')),
          ],
        ));
  }}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷血 2025-02-12 04:42:13

要更新内部对话框,您需要使用 /a>并使用其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'),
                  ),
                ],
              ),
            ));
  }

您还可以将内容分开,在这种情况下不需要。

To update inside dialog, you need to use StatefulBuilder and use its 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'),
                  ),
                ],
              ),
            ));
  }

You can also separate the content StatefulWidget which is not needed in cases like this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文