Flutter:函数setState没有定义,我使用的是Stateful小部件

gev0vcfq  于 2023-03-31  发布在  Flutter
关注(0)|答案(3)|浏览(148)

我将简要地介绍代码,以说明如何从Stateful小部件中进行所有操作。
我基本上希望我的卡片上的复选框在用户点击它时改变状态。
错误信息:未定义函数“setState”。
我做了研究,我知道它只在有状态的小部件下工作。我的小部件树在StatefulWidget下,所以它应该工作,但不是。

class MyAppState extends StatefulWidget{

       Scaffold{
          //calls CardWidget to build individual cards for my list
       }       
}

     Widget CardWidget{

          Return Inkwell {
              Container{
                   
                        child: Checkbox(
                             value: item.checkBox,
                             onChanged: (bool? value) {
                             item.checkBox = !value!;

                             setState(() {
                             item.checkBox;
                             });
                           },
                       ),
d4so4syb

d4so4syb1#

CarWidget()必须这样写:

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

  @override
  _CardWidgetState createState() => _CardWidgetState();
}

class _CardWidgetState extends State<CardWidget> {
  @override
  Widget build(BuildContext context) {
    return InkWell(child: 
      Container(child:
       Checkbox(
       value: item.checkBox,
        onChanged: (bool? value) {
         item.checkBox = !value!;

         setState(() {
            item.checkBox;
         });
       },
       ),
      ),
    );
  }
}
gr8qqesn

gr8qqesn2#

这将是小部件结构

class MyApp extends StatefulWidget {
  const MyApp({super.key});

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

class _MyAppState extends State<MyApp> {
  var item; // the place you like

  Widget CardWidget() {
    return InkWell(
      onTap: () {},
      child: Container(
        child: Checkbox(
          value: item.checkBox,
          onChanged: (bool? value) {
            item.checkBox = !value!;

            setState(() {
              item.checkBox;
            });
          },
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold();
  }
}

关于StatefulWidget的更多信息

x6yk4ghg

x6yk4ghg3#

你应该把CardWidget放在一个扩展StatefulWidget的类中:

class CardWidget extends StatefulWidget {
  final Item item;

  CardWidget(this.item);

  @override
  _CardWidgetState createState() => _CardWidgetState();
}

class _CardWidgetState extends State<CardWidget> {
  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: () {
        setState(() {
          widget.item.checkBox = !widget.item.checkBox;
        });
      },
      child: Container(
        child: Checkbox(
          value: widget.item.checkBox,
          onChanged: (bool? value) {
            setState(() {
              widget.item.checkBox = !value!;
            });
          },
        ),
      ),
    );
  }
}

现在,对于_CardWidgetState,您可以使用setState
快乐编码....

相关问题