首页 > 解决方案 > 颤振子道具正在改变父变量

问题描述

我将一个变量从父小部件发送给它的子小部件。通过参数。我在父子小部件上使用该变量。例如,我在父小部件上使用 variable.name。当我更改子小部件 widget.variable.name = 'all' 上的变量时,它也在更新父小部件,但我只想在子小部件上更改它。

标签: flutterdart

解决方案


您可以在子状态中创建一个临时变量。



class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int parentVal = 1;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Column(
      children: [
        ElevatedButton(
          onPressed: () {
            setState(() {
              parentVal++;
            });
          },
          child: Text("parent val: $parentVal"),
        ),
        ChildW(
          childval: parentVal,
        )
      ],
    ));
  }
}

class ChildW extends StatefulWidget {
  final int childval;
  const ChildW({
    Key? key,
    required this.childval,
  }) : super(key: key);

  @override
  State<ChildW> createState() => _ChildWState();
}

class _ChildWState extends State<ChildW> {
  late int tempChildVal;

  @override
  void initState() {
    super.initState();
    tempChildVal = widget.childval;
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () {
        setState(() {
          tempChildVal++;
        });
      },
      child: Text("child val: $tempChildVal"),
    );
  }
}


推荐阅读