Flutter 颤振开关小部件未更新
我创建了一个无状态的小部件,它有一个颤振开关小部件。我在父级中实现这个小部件,并传入所需的参数,但当我按下开关时,它不会改变值 我认为这可能是因为子部件不是有状态的,但这没有什么区别 下面是我的两个小部件文件中的一个简短代码示例Flutter 颤振开关小部件未更新,flutter,Flutter,我创建了一个无状态的小部件,它有一个颤振开关小部件。我在父级中实现这个小部件,并传入所需的参数,但当我按下开关时,它不会改变值 我认为这可能是因为子部件不是有状态的,但这没有什么区别 下面是我的两个小部件文件中的一个简短代码示例 class SettingsButton extends StatelessWidget { final String text; final bool initalValue; final void Function(bool) onOffCallback;
class SettingsButton extends StatelessWidget {
final String text;
final bool initalValue;
final void Function(bool) onOffCallback;
SettingsButton({
this.text,
this.initalValue = false,
this.onOffCallback,
});
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: MediaQuery.of(context).size.width,
child: SubHeading(text),
),
Switch(
onChanged: isOnOff ? onOffCallback : null,
activeColor: Theme.of(context).accentColor,
value: initalValue,
)
]);
类设置按钮扩展无状态小部件{
最终字符串文本;
最终布尔初始值;
最终空洞函数(bool)onOffCallback;
设置按钮({
这个文本,
this.initalValue=false,
这是我的电话,
});
@凌驾
小部件构建(构建上下文){
返回行(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
容器(
宽度:MediaQuery.of(context).size.width,
儿童:副标题(正文),
),
开关(
onChanged:isOnOff?onOffCallback:null,
activeColor:Theme.of(context.accentColor),
值:initalValue,
)
]);
class\u设置状态扩展状态{
布尔检验=真;
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景色:主题。背景色,
正文:ListView(
儿童:[
纵队(
儿童:[
设置按钮(
文本:“测试”,
onOffCallback:(test)=>setState(){
印刷品(“被称为”);
测试=!测试;
}),
初始值:测试,
),
],
)
],
),
);
}
您正在设置回调中接收的测试变量,而不是\u settings state
类中定义的测试变量。您应该为回调设置以下内容:
onOffCallback:(newTest)=>setState(){
印刷品($newTest);
测试=新测试;
//或者(应该没关系)
测试=!测试;
打印($test);
}),
我正在尝试测试你的代码。屏幕
类来自哪里?哦,很抱歉,这是一个返回媒体查询的自定义帮助器类,我将删除它。不用担心。嗯……我不清楚副标题位。我假设这是文本的包装,但是文本
变量来自哪里?它是传入的,我删除了它我不认为这是相关的,抱歉,没问题。我只是添加了一个文本
变量进行测试。太棒了,非常感谢你的帮助,我知道这会很愚蠢
class _SettingsState extends State<Settings> {
bool test = true;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
body: ListView(
children: [
Column(
children: [
SettingsButton(
text: "Test",
onOffCallback: (test) => setState(() {
print("Called");
test = !test;
}),
initalValue: test,
),
],
)
],
),
);
}