我正在尝试从 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
所以如果你能帮助解决这个问题,我会很高兴。
谢谢。
答案 0 :(得分:0)
有很多方法可以得到你想要的结果,这个是使用 ValueNotifier 来改变 number
的值以下是基于您的代码的示例:
https://dartpad.dev/b6409e10de32b280b8938aa75364fa7b
我们可以使用其他状态管理器,例如 Provider 或 Cubit,我们将得到相同的结果。
另一种方法是在第二个小部件中传递一个函数作为参数,并在按下按钮时执行该函数