首页 > 解决方案 > 未定义函数 setState。扑

问题描述

我正在尝试为此更改我的复选框(实际上是自定义复选框)的颜色,我已经编写了下面的代码,当我按下图标时,该onPressed()方法被调用,但图标的颜色根本没有改变。

我的小部件setState()无法识别。我已经包括import package:flutter/material.dart

这是代码

Widget _choice() {
var isPressed = false;
return Container(
height: 90,
width: 160,
color: Color(0xFFe6e9ed),
child: Column(
  children: <Widget>[
    Align(
      alignment: Alignment(0.9, 0),
      child: IconButton(
        icon: Icon(
          Icons.check_circle,
          size: 25,
            color:(isPressed) ? Color(0xff007397) : Color(0xff9A9A9A)
        ),
      onPressed: (){
        setState((){ // <--  this setState is un-recognizable by flutter ide
          if(isPressed){ print("checkbox pressed");
          isPressed = false;
          } else {
            isPressed = true;
          }
        });
      },
      ),
    ),
    Align(
      alignment: Alignment(-0.8, 0),
      child: Text("Category choice 1"),
    ),
    Align(
      alignment: Alignment(0.9, 0),
      child: Icon(
        Icons.phonelink,
        size: 40,
      ),
    ),
  ],
),);}

标签: androidflutterdart

解决方案


您必须使用StatefulWidget

具有可变状态的小部件。

状态是(1)可以在构建小部件时同步读取的信息,以及(2)可能在小部件的生命周期内发生变化的信息。小部件实现者有责任使用 State.setState 确保在此类状态更改时及时通知状态。例如

class MyDemo extends StatefulWidget {
  @override
  _MyDemoState createState() => _MyDemoState();
}

class _MyDemoState extends State<MyDemo> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: IconButton(icon: null, onPressed: (){
        setState(() {
          //Do your stuff
        });
      }),
    );
  }
// every method which changes state should exist within class only
  Widget _check(){
    return IconButton(icon: null, onPressed: (){
      setState(() {

      });
    });
  }

}

推荐阅读