颤振开关小部件未更新

时间:2019-09-30 22:33:01

标签: flutter

我创建了一个具有Flutter开关小部件的无状态小部件,我在父级中实现了该小部件并传递了必需的参数,但是当我按下该开关时它不会更改值。

我认为这可能是由于子窗口小部件不是有状态的,但这没什么区别。

这是我的两个小部件文件中的代码的简短示例

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

1 个答案:

答案 0 :(得分:1)

您要设置在回调中接收的测试变量,而不是_SettingsState类中定义的测试变量。对于回调,应该具有以下内容:

onOffCallback: (newTest) => setState(() {
  print("$newTest");
  test = newTest;
  // or (it shouldn't matter)
  test = !test;
  print("$test");
}),