首页 > 解决方案 > 颤振开关小部件未更新

问题描述

我已经创建了一个具有 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,
              ),
            ],
          )
        ],
      ),
    );
  }

标签: flutter

解决方案


您正在设置在回调中收到的测试变量,而不是在_SettingsState类中定义的变量。您应该拥有的是回调:

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

推荐阅读