Flutter 禁用TextFormField颤振值更改时的AlertDialog按钮

Flutter 禁用TextFormField颤振值更改时的AlertDialog按钮,flutter,dart,dialog,flutter-alertdialog,Flutter,Dart,Dialog,Flutter Alertdialog,在我的第一个颤振项目中,我试图从警报对话框中的文本表单字段中获取值。我正在尝试验证输入,并基于该验证,我希望启用/禁用AlertDialog的按钮 我对显示对话框所做的操作: 不幸的是,它正在脚手架的主体中工作: @override Widget build(BuildContext context) { return Scaffold( body: Column( mainAxisAlignment: MainAxisAlignment.center,

在我的第一个颤振项目中,我试图从警报对话框中的文本表单字段中获取值。我正在尝试验证输入,并基于该验证,我希望启用/禁用AlertDialog的按钮

我对显示对话框所做的操作: 不幸的是,它正在脚手架的主体中工作:

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          _container(),
          RaisedButton(
            onPressed: (){_displayDialog(context);},
            child: Text("Show Alert"),
          )
        ],
      ),
    );
  }
有谁能帮我解决这个问题吗。
TIA

复制粘贴此代码,其工作正常,我使用了StateFullBuilder小部件来更新AlertDialogBox状态

有关更新或刷新
对话框的更多参考信息

下面是
代码

导入'dart:async';
进口“包装:颤振/材料.省道”;
类MyTimer扩展了StatefulWidget{
@凌驾
_MyTimerState createState();
}
类_MyTimerState扩展状态{
bool-isValidAlert=false;
bool isValidScafold=false;
_displayDialog(BuildContext上下文)异步{
返回显示对话框(
上下文:上下文,
生成器:(上下文){
返回StatefulBuilder(生成器:(上下文,设置状态){
返回警报对话框(
标题:文本(“TextField AlertDemo”),
内容:_containerAlert(设置状态),
行动:[
升起的按钮(
按:isValidAlert
? () {
打印(“有效:”);
}
:null,
子:文本(“单击我”),
)
],
);
});
});
}
小部件_容器(){
返回容器(
保证金:所有(25),
儿童:中心(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
TextFormField(
一旦更改:(文本){
设置状态(){
如果(text.length>5){
isValidScafold=true;
}否则{
isValidScafold=false;
}
});
},
装饰:输入装饰(labelText:“输入文本”),
),
尺寸箱(高度:15),
升起的按钮(
onPressed:isValidScafold
? () {
打印(“有效:”);
}
:null,
孩子:文本(“完成!”),
)
],
),
),
);
}
控件_containerAlert(状态设置器设置状态){
返回容器(
保证金:所有(25),
儿童:中心(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
TextFormField(
一旦更改:(文本){
设置状态(){
如果(text.length>5){
isValidAlert=true;
}否则{
isValidAlert=假;
}
印刷品(文本);
});
},
装饰:输入装饰(labelText:“输入文本”),
),
尺寸箱(高度:15),
升起的按钮(
按:isValidAlert
? () {
打印(“有效:”);
}
:null,
孩子:文本(“完成!”),
)
],
),
),
);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:专栏(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
_容器(),
升起的按钮(
已按下:(){
_显示对话框(上下文);
},
子项:文本(“显示警报”),
)
],
),
);
}
}
 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!"),
            )
          ],
        ),
      ),
    );
  }
@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          _container(),
          RaisedButton(
            onPressed: (){_displayDialog(context);},
            child: Text("Show Alert"),
          )
        ],
      ),
    );
  }
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),
      child: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextFormField(
              onChanged: (text) {
                setState(() {
                  if (text.length > 5) {
                    isValidAlert = true;
                  } else {
                    isValidAlert = false;
                  }
                  print(text);
                });
              },
              decoration: InputDecoration(labelText: 'Enter Text'),
            ),
            SizedBox(height: 15),
            RaisedButton(
              onPressed: isValidAlert
                  ? () {
                      print("ISVALID:");
                    }
                  : null,
              child: Text("Done!"),
            )
          ],
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          _container(),
          RaisedButton(
            onPressed: () {
              _displayDialog(context);
            },
            child: Text("Show Alert"),
          )
        ],
      ),
    );
  }
}