Mam widżet dziecka, który jest pełen zmiennych. Kiedy robię setstate () na moim widżecie rodzicielskim, chcę odświeżyć widżet dziecka, aby wszystkie zmienne wewnątrz widżetu dzieci i przywrócić. Oto zasadniczo, co mam na myśli.

Widget macierzysty:

class ParentWidget extends StatefulWidget {

  @override
  _ParentWidgetState createState() => _ParentWidgetState();
}

class _ParentWidgetState extends State<ParentWidget> {
  @override
  Widget build(BuildContext context) {
  return Scaffold(
     body: Column(
           children =[
                   ChildWidget(addAmount: addAmount),
                   RaisedButton(
                    child: Text('Reset Parent'),
                    onPressed: () => setState(){},
           ]
           ),
  );
}

I oto dziecko

class ChildWidget extends StatefulWidget {

  final addAmount;
  ChildWidget({this.addAmount});

  @override
  _ChildWidgetState createState() => _ChildWidgetState();
}

class _ChildWidgetState extends State<ChildWidget> {

  int counter = 0;
  
  increaseCounter() {
     counter = counter + widget.addAmount;
  }

   @override
  Widget build(BuildContext context) {
  return Column(
         children:[
           RaisedButton(
                   child: Text('Add to counter'),
                   onPressed: () {
                       increaseCounter();
                       setState((){});
                      },
           ),
           Text($counter),
          ]
   );
}
}

Tak więc, gdy naciśnięcie przycisku Reset nadrzędny, chcę być w stanie ponownie ustawić licznik w dziećmi na zero ponownie. Ale nie zresetuje się na 0, zachowuje numer, który został dodany. Jak zresetować zmienne dzieci z rodzica?

0
Rushwin Jamdas 21 listopad 2020, 06:48

1 odpowiedź

Najlepsza odpowiedź

Powinieneś użyć didUpdateWidget:

class ChildWidget extends StatefulWidget {

  final addAmount;
  ChildWidget({this.addAmount});

  @override
  _ChildWidgetState createState() => _ChildWidgetState();
}

class _ChildWidgetState extends State<ChildWidget> {

  int counter = 0;

  @override
  void didUpdateWidget(covariant S oldWidget) {
    super.didUpdateWidget(oldWidget);
    counter = 0;
  }
  
  increaseCounter() {
     counter = counter + widget.addAmount;
  }

  return Column(
         children:[
           RaisedButton(
                   child: Text('Add to counter'),
                   onPressed: () {
                       increaseCounter();
                      },
           ),
           Text($counter),
          ]
   );
1
mohammad 21 listopad 2020, 14:52