无法在初始化程序中访问实例成员“小部件”

11 flutter

在我的项目中,我使用以下代码将数据从一个小部件传递到另一个小部件:

Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) =>
                TranslatorSignUpStep2(transModel: this._translatorModel),
          ),
        );
Run Code Online (Sandbox Code Playgroud)

然后我通过下面的代码在另一个小部件中检索它:

class TranslatorSignUpStep2 extends StatefulWidget {
  final TranslatorModel transModel;
  TranslatorSignUpStep2({this.transModel});

  @override
  _TranslatorSignUpStep2State createState() => _TranslatorSignUpStep2State();
}
Run Code Online (Sandbox Code Playgroud)

问题是,在 TranslatorSignUpStep2 类中,我想将传入的transModel变量分配给另一个变量,因此我编写了此代码

class _TranslatorSignUpStep2State extends State<TranslatorSignUpStep2> {
  TranslatorModel _translatorModel = widget.transModel;
}
Run Code Online (Sandbox Code Playgroud)

但似乎widget不能在构建方法之外使用,所以我收到错误消息 The instance member 'widget' can't be accessed in an initializer.。有谁知道如何克服这个?

小智 37

只需在初始化时添加关键字即可late

class TranslatorSignUpStep2 extends StatefulWidget {
  final TranslatorModel transModel;
  TranslatorSignUpStep2({this.transModel});

  @override
  _TranslatorSignUpStep2State createState() => _TranslatorSignUpStep2State();
}

class _TranslatorSignUpStep2State extends State<TranslatorSignUpStep2> {
  late TranslatorModel _translatorModel = widget.transModel;
}
Run Code Online (Sandbox Code Playgroud)

  • 简单的工作解决方案 (2认同)

小智 14

您可以像这样在 initState 函数中访问小部件。

class _TranslatorSignUpStep2State extends State<TranslatorSignUpStep2> {
  TranslatorModel _translatorModel ;

@override
void initState() {
_translatorModel = widget.transModel;
}

}
Run Code Online (Sandbox Code Playgroud)


Hos*_*ref 6

试试这个代码:

翻译者注册Step2 :

    class TranslatorSignUpStep2 extends StatefulWidget {
      final TranslatorModel transModel;
      TranslatorSignUpStep2({this.transModel});

      @override
      _TranslatorSignUpStep2State createState() => _TranslatorSignUpStep2State(this.transModel);
    }
Run Code Online (Sandbox Code Playgroud)

TranslatorSignUpStep2 类:

  class _TranslatorSignUpStep2State extends State<TranslatorSignUpStep2> {
   _TranslatorSignUpStep2State(TranslatorModel _tempModel ){
    this._translatorModel =_tempModel;
    };
     TranslatorModel _translatorModel ;
    }
Run Code Online (Sandbox Code Playgroud)