setState 不更新

时间:2021-04-21 14:42:15

标签: flutter setstate

我就是不知道flutter中这个set state方法有什么问题。一切似乎都还好。但是文本没有在 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'),
                ],
              ),
            ),
          ),
        );
      }
    }

1 个答案:

答案 0 :(得分:2)

您将 text 作为 build 方法中的局部变量。 setState 本质上只是再次调用 build,并将 text 的值重置为其默认值“NetBalance-Amount”。

将其声明移到 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'),
            ],
          ),
        ),
      ),
    );
  }
}