Как получить доступ к переданному значению в Statefulwidget? - PullRequest
1 голос
/ 28 мая 2020

Я передаю 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  "  +  );
 }

}

Ответы [ 3 ]

2 голосов
/ 28 мая 2020

Вы можете получить к нему доступ через widget.itemTitle. В вашем случае вы можете назвать это так:

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

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

Вам также не нужно передавать строку в свой конструктор состояния. Удалите это:

_CardItemState(String itemTitle);
1 голос
/ 28 мая 2020

легко! возьмите его, используя

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 
 }

}
0 голосов
/ 28 мая 2020

Edit: Как упоминалось @pskink в комментариях, лучший способ сделать это - использовать

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

}
...