【问题标题】:How to access passed value in the Statefulwidget?如何访问 Statefulwidget 中传递的值?
【发布时间】:2020-09-15 11:15:21
【问题描述】:

我将另一个StatefulWidgetString 传递给下面的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  "  +  );
 }

}

【问题讨论】:

  • 移除CardItemState(String itemTitle);构造函数并使用State.widget字段访问任何Widget的字段

标签: flutter statefulwidget


【解决方案1】:

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

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

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

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

_CardItemState(String itemTitle);

【讨论】:

  • @Mark Davids 是否显示错误?我认为它在 initState 中有效。
  • 应该提一下,State构造函数中不需要传递String
  • @AugustinR 谢谢。我更新了我的答案。祝你有美好的一天。
【解决方案2】:

简单!使用

抓取它

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 
 }

}

【讨论】:

    【解决方案3】:

    最好的方法是使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-16
      • 2021-04-13
      • 2018-10-21
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多