S Das
S Das

Reputation: 55

setState not updating

I just can't figure out what is the problem with this set state method in flutter. Everything seems okay. But the text is not updating on onPressed.

class NetBalanceWidget extends StatefulWidget {
  @override
  _NetBalanceWidgetState createState() => _NetBalanceWidgetState();
}

    class _NetBalanceWidgetState extends State<NetBalanceWidget> {
      @override
      Widget build(BuildContext context) {
        String text = 'NetBalance-Amount';
        return RawMaterialButton(
          onPressed: () {
            setState(() {
              text = 'It works';
            });
          },
          child: Container(
            height: 80.0,
            child: Center(
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: [
                  Text(text),
                  Text('0.00'),
                ],
              ),
            ),
          ),
        );
      }
    }

Upvotes: 0

Views: 46

Answers (1)

Christopher Moore
Christopher Moore

Reputation: 17141

You have text as a local variable in the build method. setState is essentially just calling build again, and is resetting the value of text back to its default of 'NetBalance-Amount'.

Move its declaration outside of build:

class _NetBalanceWidgetState extends State<NetBalanceWidget> {
  String text = 'NetBalance-Amount';

  @override
  Widget build(BuildContext context) {
    return RawMaterialButton(
      onPressed: () {
        setState(() {
          text = 'It works';
        });
      },
      child: Container(
        height: 80.0,
        child: Center(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: [
              Text(text),
              Text('0.00'),
            ],
          ),
        ),
      ),
    );
  }
}

Upvotes: 2

Related Questions