错误信息不运行,即使我的文本字段不是空的



在我到达警报演示之前…我被卡在开头了。

在我的警告对话框中有一个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')),
],
));
}}

要更新内部对话框,您需要使用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分开,这在这种情况下是不需要的。

最新更新