Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:如何从另一个小部件更改/刷新状态_Flutter - Fatal编程技术网

Flutter 颤振:如何从另一个小部件更改/刷新状态

Flutter 颤振:如何从另一个小部件更改/刷新状态,flutter,Flutter,我尝试在一个小部件中显示一个全局整数,然后通过另一个小部件中的某个内容(按钮单击或其他内容)进行更新。我尝试过的所有其他方法都不起作用。最好的方法是什么 堆栈溢出表示我的代码太多,所以文本太多 导入“包装:颤振/材料.省道”; void main(){ runApp( 材料聚丙烯( 家:脚手架( 主体:容器( 子:列( mainAxisAlignment:mainAxisAlignment.space, 儿童:[ ScoreDisplay(), PointButton(), ], ), ), )

我尝试在一个小部件中显示一个全局整数,然后通过另一个小部件中的某个内容(按钮单击或其他内容)进行更新。我尝试过的所有其他方法都不起作用。最好的方法是什么

堆栈溢出表示我的代码太多,所以文本太多

导入“包装:颤振/材料.省道”;
void main(){
runApp(
材料聚丙烯(
家:脚手架(
主体:容器(
子:列(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
ScoreDisplay(),
PointButton(),
],
),
),
),
),
);
}
智力得分=0;
类ScoreDisplay扩展了StatefulWidget{
@凌驾
_ScoreDisplayState createState()=>\u ScoreDisplayState();
}
类_ScoreDisplayState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回中心(
子:容器(
子:文本(
“分数:$Score”,
),
),
);
}
}
类PointButton扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回中心(
子:容器(
孩子:升起按钮(
//在增加分数时,
),
),
);
}
}

您需要为此实施某种状态管理

这里有两种实现此功能的基本方法:使用StatefulWidgetRiverpod

1.用一个有状态的小部件 我将您的Scaffold提取为一个
StatefulWidget
来维护应用程序的
分数

然后,我使用
ScoreDisplay
作为纯
StatelessWidget
接收
score
作为参数。您的
PointButton
也是无状态的,通过一个简单的
VoidCallback
函数调用
ScorePage

完整源代码:
导入“包装:颤振/材料.省道”;
void main(){
runApp(
材料聚丙烯(
主页:ScorePage(),
),
);
}
类ScorePage扩展StatefulWidget{
常数记分页({
关键点,
}):super(key:key);
@凌驾
_ScorePageState createState()=>\u ScorePageState();
}
类_ScorePageState扩展状态{
智力得分=0;
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
子:列(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
分数显示(分数:分数),
PointButton(onIncrement:()=>setState(()=>score++),
],
),
),
);
}
}
类ScoreDisplay扩展了无状态小部件{
最终智力得分;
constscoresplay({Key-Key,this.score}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回中心(
子:容器(
子:文本(
“分数:$Score”,
),
),
);
}
}
类PointButton扩展了无状态小部件{
最终增加额;
constpointbutton({Key-Key,this.onIncrement}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回中心(
子:容器(
儿童:升降按钮(
onPressed:()=>onIncrement?.call(),
子:文本(“单击我”),
),
),
);
}
}
2.与Riverpod 创建一个
StateProvider

final scoreProvider=StateProvider((ref)=>0);
查看
状态提供程序

final score=useProvider(scoreProvider)。状态;
更新StateProvider

context.read(scoreProvider).state++
完整源代码
导入“包装:颤振/材料.省道”;
进口“包装:颤振钩/颤振钩.省道”;
进口“包装:hooks_riverpod/hooks_riverpod.dart”;
void main(){
runApp(
提供镜(
孩子:MaterialApp(
家:脚手架(
主体:容器(
子:列(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
ScoreDisplay(),
PointButton(),
],
),
),
),
),
),
);
}
智力得分=0;
类ScoreDisplay扩展了Widget{
@凌驾
小部件构建(构建上下文){
最终分数=useProvider(scoreProvider).state;
返回中心(
子:容器(
子:文本(
“分数:$Score”,
),
),
);
}
}
类PointButton扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回中心(
子:容器(
儿童:升降按钮(
onPressed:()=>context.read(scoreProvider).state++,
子:文本(“单击我”),
),
),
);
}
}
最终分数提供者=状态提供者((ref)=>0);
查看更多信息和更高级的用例


但是你有。

你需要为此实施某种状态管理

这里有两种实现此功能的基本方法:使用StatefulWidgetRiverpod

1.用一个有状态的小部件 我将您的Scaffold提取为一个
StatefulWidget
来维护应用程序的
分数

然后,我使用
ScoreDisplay
作为纯
StatelessWidget
接收
score
作为参数。您的
PointButton
也是无状态的,通过一个简单的
VoidCallback
函数调用
ScorePage

完整源代码:
导入“包装:颤振/材料.省道”;
void main(){
runApp(
材料聚丙烯(
主页:ScorePage(),
),
);
}
类ScorePage扩展StatefulWidget{
常数记分页({
关键点,
}):super(key:key);
@凌驾
_ScorePageState createState()=>\u ScorePageState();
}
类_ScorePageState扩展状态{
智力得分=0;
@凌驾
小部件构建(BuildC)