如何访问 Statefulwidget 中传递的值?

How to access passed value in the Statefulwidget?

我将 String 从另一个 StatefulWidget 传递到下面的 CardItem StatefulWidget,然后从这里将 String 传递到 _CardItemState,如图所示在下面的代码中。 但是应该从 _CardItemState(String itemTitle);

访问这个 String 传递的方式
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  "  +  );
 }

}

您可以通过 widget.itemTitle 访问它。对于你的情况,你可以这样称呼它:

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

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

您也不需要在状态构造函数中传递字符串。删除这个:

_CardItemState(String itemTitle);

最好的方法是使用

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

解决此问题的方法是在构造函数中传递数据,如下所示,但建议遵循上述方法。

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

}

简单!使用

获取它

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 
 }

}