The instance member 'widget' can't be accessed in an initializer

Viewed 29545

In my project, I pass data from one widget to another using this code:

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

Then I retrive it in the other widget by the code below:

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

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

The problem is, in the TranslatorSignUpStep2 class I want to assign the passed-in transModel to another variable so I write this code

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

But it seems like the widget can't be used outside the build method so I get error saying The instance member 'widget' can't be accessed in an initializer.. Anyone know how to get over this ?

5 Answers

you can access widget in initState function like this.

class _TranslatorSignUpStep2State extends State<TranslatorSignUpStep2> {
  TranslatorModel _translatorModel ;

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

}

Just add the keyword late while initializing:

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

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

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

try this code :

TranslatorSignUpStep2 :

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

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

TranslatorSignUpStep2 class :

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

Add static keyword when innitializing

 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;
    }
Related