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

时间:2020-09-27 19:03:22

标签: flutter

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

Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) =>
                TranslatorSignUpStep2(transModel: this._translatorModel),
          ),
        );

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

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

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

问题是,在TranslatorSignUpStep2类中,我想将传入的transModel分配给另一个变量,以便我编写这段代码

class _TranslatorSignUpStep2State extends State<TranslatorSignUpStep2> {
  TranslatorModel _translatorModel = widget.transModel;
}

但是似乎widget不能在build方法之外使用,所以我得到了错误提示 The instance member 'widget' can't be accessed in an initializer.。有人知道如何克服这个问题吗?

3 个答案:

答案 0 :(得分:2)

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

class _TranslatorSignUpStep2State extends State<TranslatorSignUpStep2> {
  TranslatorModel _translatorModel ;

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

}

答案 1 :(得分:0)

尝试此代码:

TranslatorSignUpStep2:

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

      @override
      _TranslatorSignUpStep2State createState() => _TranslatorSignUpStep2State(this.transModel);
    }

TranslatorSignUpStep2类:

  class _TranslatorSignUpStep2State extends State<TranslatorSignUpStep2> {
   _TranslatorSignUpStep2State(TranslatorModel _tempModel ){
    this._translatorModel =_tempModel;
    };
     TranslatorModel _translatorModel ;
    }

答案 2 :(得分:0)

 class OrderDetails extends StatefulWidget {
      int selectedDays;
     OrderDetails({
        this.range,)};
    
    @override
      _OrderDetailsState createState() => _OrderDetailsState();
    }
    class _OrderDetailsState extends State<OrderDetails> {
    String getRange;
    
    
    @override
      void initState() {
        super.initState();
    getRange = widget.range;
    }