如何在小部件和另一个小部件中设置变量值?

时间:2021-03-02 16:19:29

标签: flutter dart widget setstate

我正在尝试从 SecondWidget 设置 FirstWidget 中存在的变量值(数字,在下面的代码中)。并通知两个小部件,以便更新两个小部件中的数字。

class FirstWidget extends StatefulWidget {
  @override
  _FirstWidgetState createState() => _FirstWidgetState();
}

class _FirstWidgetState extends State<FirstWidget> {
  int number = 0;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text(
          '$number',
        ),
        SecondWidget(),
        Text(
          '$number',
        )
      ],
    );
  }
}

class SecondWidget extends StatefulWidget {
  @override
  _SecondWidgetState createState() => _SecondWidgetState();
}

class _SecondWidgetState extends State<SecondWidget> {
  @override
  Widget build(BuildContext context) {
    return TextButton(
      child: Text('The number is $number. Press to increase the number'),
      onPressed: () {
        setState(() {
          number++;
        });
      },
    );
  }
}

(我知道那个代码会出错,但主要思想是给你我想要解决的问题)。

我希望显示的输出:

在按下按钮之前 -

0
The number is 0. Press to increase the number
0

按下按钮后 -

1
The number is 1. Press to increase the number
1

所以如果你能帮助解决这个问题,我会很高兴。

谢谢。

1 个答案:

答案 0 :(得分:0)

有很多方法可以得到你想要的结果,这个是使用 ValueNotifier 来改变 number

的值

以下是基于您的代码的示例:

https://dartpad.dev/b6409e10de32b280b8938aa75364fa7b

我们可以使用其他状态管理器,例如 Provider 或 Cubit,我们将得到相同的结果。

另一种方法是在第二个小部件中传递一个函数作为参数,并在按下按钮时执行该函数