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,
              ),
            ],
          )
        ],
      ),
    );
  }