问题描述
在我的第一个 Flutter 项目中,我试图从警报对话框 内的TextFormField 获取价值。我正在尝试验证输入,并基于该验证我想启用/禁用 AlertDialog 按钮。
我为显示对话框做了什么:
_displayDialog(BuildContext context) async {
return showDialog(
context: context,builder: (context) {
return AlertDialog(
title: Text('TextField AlertDemo'),content: _container(),actions: <Widget>[
RaisedButton(
onpressed: isValid
? () {
print("ISVALID:");
}
: null,child: Text("Click Me"),)
],);
});
}
_container() 方法代码:
Widget _container() {
return Container(
margin: EdgeInsets.all(25),child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
TextFormField(
onChanged: (text) {
setState(() {
if (text.length > 5) {
isValid = true;
} else {
isValid = false;
}
});
},decoration: Inputdecoration(labelText: 'Enter Text'),),SizedBox(height: 15),RaisedButton(
onpressed: isValid
? () {
print("ISVALID:");
}
: null,child: Text("Done!"),)
],);
}
不幸的是,它在 Scaffold 主体中工作:
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
_container(),RaisedButton(
onpressed: (){_displayDialog(context);},child: Text("Show Alert"),)
],);
}
谁能帮我解决这个问题。 TIA
解决方法
复制粘贴此代码,它工作正常,我使用了 StateFullBuilder
小部件来更新 state
的 AlertDialogBox
。
有关更新或刷新 DialogBox
Click HERE
下面是Code
import 'dart:async';
import 'package:flutter/material.dart';
class MyTimer extends StatefulWidget {
@override
_MyTimerState createState() => _MyTimerState();
}
class _MyTimerState extends State<MyTimer> {
bool isValidAlert = false;
bool isValidScafold = false;
_displayDialog(BuildContext context) async {
return showDialog(
context: context,builder: (context) {
return StatefulBuilder(builder: (context,setState) {
return AlertDialog(
title: Text('TextField AlertDemo'),content: _containerAlert(setState),actions: <Widget>[
RaisedButton(
onPressed: isValidAlert
? () {
print("ISVALID:");
}
: null,child: Text("Click Me"),)
],);
});
});
}
Widget _container() {
return Container(
margin: EdgeInsets.all(25),child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
TextFormField(
onChanged: (text) {
setState(() {
if (text.length > 5) {
isValidScafold = true;
} else {
isValidScafold = false;
}
});
},decoration: InputDecoration(labelText: 'Enter Text'),),SizedBox(height: 15),RaisedButton(
onPressed: isValidScafold
? () {
print("ISVALID:");
}
: null,child: Text("Done!"),)
],);
}
Widget _containerAlert(StateSetter setState) {
return Container(
margin: EdgeInsets.all(25),children: [
TextFormField(
onChanged: (text) {
setState(() {
if (text.length > 5) {
isValidAlert = true;
} else {
isValidAlert = false;
}
print(text);
});
},RaisedButton(
onPressed: isValidAlert
? () {
print("ISVALID:");
}
: null,);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
_container(),RaisedButton(
onPressed: () {
_displayDialog(context);
},child: Text("Show Alert"),)
],);
}
}