1

我将一个String从另一个传递StatefulWidget到下面CardItem StatefulWidget,然后从这里String传递到_CardItemState下面的代码中。但是String应该如何访问这个传递的_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  "  +  );
 }

}
4

3 回答 3

2

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

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

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

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

_CardItemState(String itemTitle);
于 2020-05-28T07:53:56.883 回答
1

简单的!抓住它使用

小部件.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 
 }

}
于 2020-05-28T08:05:40.760 回答
0

最好的方法是使用

小部件.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";
 }

}
于 2020-05-28T07:58:55.807 回答