我有一个带按钮的有状态小部件。我将用户点击次数保留在称为“计数器”的int变量中。
我还有另一个小部件,这是我的主屏幕。我在该屏幕上有一个文本。我需要动态显示此文本上的点击次数。因此,当用户在第一堂课上点击按钮时,我在第二堂课上的文本必须更新。
将计数器变量从第一个小部件传递到第二个小部件的最佳方法是什么?
添加了一些代码
我的两个类都是有状态的小部件。因此,我像这样声明了static int计数器;
class AppListView extends StatefulWidget {
static int counter;
@override
_AppListViewState createState() => _AppListViewState();
}
现在我可以从其他班级到达柜台,但不能从自己班级到达。我的意思是我需要增加该部分的计数,但是它显示未定义。
class _AppListViewState extends State<AppListView> {
@override
Widget build(BuildContext context) {
return FlatButton(
onPressed: (){
counter++ (can't reach counter here)
}
答案 0 :(得分:1)
方法1:
从父级窗口小部件中创建一个 ValueChanged 将传递添加到FirstWidget,当更改程序->调用 ValueChanged 将更新发送到父级窗口小部件时,父级将更新第二个窗口小部件的状态。
方法2:
从父级窗口小部件创建流,将传递添加到FirstWidget和Sencond窗口小部件(使用 StreamBuilder 呈现窗口小部件)。当更改库时->更改Stream的值以更新为Second Widget。
更新演示:
答案 1 :(得分:0)
您可能想使所需的变量为static
。
class Something {
static int counter;
}
然后,您可以在其他小部件中使用变量,如下所示:
class StatefulWidget{
FlatButton(
onPressed: (){
Something.counter++; // This variable is your counter you mentioned earlier
}
);
}
答案 2 :(得分:0)
简单,在您的代码中只需在子代码中写入“ widget.counter”即可。在Statefull窗口小部件中访问父变量时,必须使用“ widget.instace”。在这种情况下,“ widget.counter”将允许您访问父级的计数器变量。
class AppListView extends StatefulWidget {
int counter;
@override
_AppListViewState createState() => _AppListViewState();
}
class _AppListViewState extends State<AppListView> {
@override
Widget build(BuildContext context) {
return FlatButton(
onPressed: (){
widget.counter++
}
注意:您不需要计数器变量是静态的,因为您可以在子类中使用widget.counter对其进行调用