71

Flutter は初めてで、ダイアログでデータを受信しようとしています。textField をクリックすると、image2 のエラーが表示されます...

レイアウトイメージ エラーの画像

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): 
4

11 に答える 11

17

おそらく利用できないコンテキストにアクセスしようとしています。これは、 yourDialogを avarに割り当てた後、別のコンテキスト (ダイアログ ビルダーのもの) を使用したために発生します。

ビルダーで の直後にダイアログを作成するかreturn、代わりに を返しDialog、パラメーターを渡す メソッドにしBuildContextます。

Widget myDialog(BuildContext context) => Dialog(/*your dialog here*/);

これは、より便利な Flutter の練習でもあります。ウィジェットを変数に割り当てる代わりに、ウィジェットを返すメソッドを使用する必要があります。

于 2019-02-10T15:13:28.593 に答える
0

ダイアログを宣言して設定するinitState

  late Dialog dialog;

  @override
  void initState() {
    super.initState();

    dialog = Dialog(
      ...
    );
  }
于 2022-02-08T11:30:28.030 に答える