1

I am passing an String from another StatefulWidget to the below CardItem StatefulWidget and then from here the String is passed to the _CardItemState as shown in the code below. But how this String passed should be accessed from _CardItemState(String itemTitle);

class CardItem extends StatefulWidget {


  String itemTitle;
  CardItem({@required this.itemTitle});
  @override
  _CardItemState createState() => _CardItemState(itemTitle);
}

class _CardItemState extends State<CardItem> {

  _CardItemState(String itemTitle);


 void initState(){
   print("INiatialize");
   print("itemTitle is  "  +  );
 }

}
  • 1
    remove `CardItemState(String itemTitle);` constructor and access any `Widget`'s fields by using `State.widget` field – pskink May 28 '20 at 07:56

3 Answers3

2

You can access it via widget.itemTitle. For your case you can call it like this:

 printItem(){
  print("itemTitle is ${widget.itemTitle}");
 }

 void initState(){
   printItem();
   super.initState();
 }

You also don't need to pass the string in your state constructor. Remove this:

_CardItemState(String itemTitle);
CoderUni
  • 5,474
  • 7
  • 26
  • 58
1

easy! grab it using

widget.itemTitle

class CardItem extends StatefulWidget {


  String itemTitle;
  CardItem({@required this.itemTitle});
  @override
  _CardItemState createState() => _CardItemState(itemTitle);
}

class _CardItemState extends State<CardItem> {
  String itemTitle; // - 1
  _CardItemState(this.itemTitle); // - 2


 void initState(){
   itemTitle = widget.itemTitle;  // - 3;
   print("INiatialize");
   print("itemTitle is  "  + itemTitle ); // - 4
   print("itemTitle is  "  + widget.itemTitle ); // same as - 4 
 }

}
Bharath
  • 1,036
  • 10
  • 13
0

Best way to do this is to use

widget.fieldName

    class CardItem extends StatefulWidget {
      String itemTitle;
      CardItem({@required this.itemTitle});
      @override
      _CardItemState createState() => _CardItemState(itemTitle:itemTitle);
    }
    
    class _CardItemState extends State<CardItem> {
    
      String myItemTitle;
      @override
      void initState(){

       super.initState();
       myItemTitle=widget.itemTitle;
       print("INiatialize");
       print("itemTitle is  $myItemTitle";
     
     }
    
    }

otherway round to this problem is to pass data in constructor as shown below, but the above method is recommended to be followed.

 class CardItem extends StatefulWidget {


  String itemTitle;
  CardItem({@required this.itemTitle});
  @override
  _CardItemState createState() => _CardItemState(itemTitle:itemTitle);
}

class _CardItemState extends State<CardItem> {

   String itemTitle;
  _CardItemState({this.itemTitle});


 void initState(){
   print("INiatialize");
   print("itemTitle is  $itemTitle";
 }

}
ANUP SAJJAN
  • 1,458
  • 13
  • 17