flutter - 查找停用的小部件的祖先是不安全的

标签 flutter dart dialog flutter-widget

我是 Flutter 的新手,我正在尝试使用对话框接收数据。 当在 textField 中单击时,出现 image2 的错误...

Layout's Image Error's Image

show(BuildContext context){

    var dialog = Dialog(
      child: Container(
        margin: EdgeInsets.all(8.0),
        child: Form(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              TextFormField(
                decoration: InputDecoration(
                    labelText: "Insira o número de telefone",
                    border: OutlineInputBorder(
                        borderRadius: BorderRadius.all(Radius.circular(2.0)))),
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.end,
                children: <Widget>[
                  FlatButton(
                      onPressed: () {
                        Navigator.of(context).pop();
                      },
                      child: Text("Cancelar")),
                  FlatButton(
                      onPressed: () {
                        Navigator.of(context).pop();
                      },
                      child: Text("Aceitar"))
                ],
              )
            ],
          ),
        ),
      ),
    );

    showDialog(context: context,builder: (context){
      return dialog;
    });
  }

这是我的代码。

I/flutter (31032): Looking up a deactivated widget's ancestor is unsafe.
I/flutter (31032): At this point the state of the widget's element tree is no longer stable. To safely refer to a
I/flutter (31032): widget's ancestor in its dispose() method, save a reference to the ancestor by calling
I/flutter (31032): inheritFromWidgetOfExactType() in the widget's didChangeDependencies() method.
I/flutter (31032): 

最佳答案

声明一个全局变量

    final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

然后在您的小部件构建的脚手架上注册 key ,例如

    @override
    Widget build(BuildContext context) {
     return Scaffold(
       key: _scaffoldKey,
       ...

然后在对话框上

show(BuildContext context){

var dialog = Dialog(
  child: Container(
    margin: EdgeInsets.all(8.0),
    child: Form(
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: <Widget>[
          TextFormField(
            decoration: InputDecoration(
                labelText: "Insira o número de telefone",
                border: OutlineInputBorder(
                    borderRadius: BorderRadius.all(Radius.circular(2.0)))),
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.end,
            children: <Widget>[
              FlatButton(
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                  child: Text("Cancelar")),
              FlatButton(
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                  child: Text("Aceitar"))
            ],
          )
        ],
      ),
    ),
  ),
);

将该脚手架上下文传递给 showDialog 方法

showDialog(context: _scaffoldKey.currentContext ,builder: (context){
  return dialog;
 });
}

关于flutter - 查找停用的小部件的祖先是不安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617432/

相关文章:

datetime - 如何将字符串转换为具有月份名称、日期和年份抖动的 DateTime 对象?

jQuery 对话框 IE7 问题

java - Android:显示进度条对话框时出现问题?

android - 类型 'String' 不是类型 'int' 的子类型 'index'

flutter - 如何创建像 Print 这样的全局函数?

jquery - 简化 Jquery 代码 帮助!

flutter - 代码错误,Flutter 中的 BuildContext

flutter - 如何在 Flutter 中处理来自 initState 的重定向

flutter - ConstrainedBox 可以懒惰地引用另一个小部件的大小吗?

user-interface - 为什么图标按钮不居中?