Flutter 按下按钮时抖动更改文本

Flutter 按下按钮时抖动更改文本,flutter,dart,Flutter,Dart,伙计们,我会尝试在点击按钮时更改文本 我的代码: bool pressGeoON = false; bool cmbscritta = false; RaisedButton( shape: new RoundedRectangleBorder( borderRadius: new BorderRadius.circular(18.0),

伙计们,我会尝试在点击按钮时更改文本

我的代码:

         bool pressGeoON = false;
         bool cmbscritta = false;
           RaisedButton(
                  shape: new RoundedRectangleBorder(
                      borderRadius: new BorderRadius.circular(18.0),
                      side: BorderSide(color: Colors.red)),
                  color: pressGeoON ? Colors.blue: Colors.red,
                  textColor: Colors.white,
                  child:  cmbscritta ? Text("GeoOn"): Text("GeoOFF"),
                  //    style: TextStyle(fontSize: 14)

                  onPressed: () {
                    setState(() => pressGeoON = !pressGeoON);
                    setState(() => cmbscritta = !cmbscritta);
                  },
                )

没有来自dart分析的建议,但不起作用…救命

您应该将按下的
简化为:

onPressed: () {
   setState(() {
     pressGeoON = !pressGeoON;
     cmbscritta = !cmbscritta;
  });
}

并确保您的widget类为
StatefulWidget
而不是
无状态widget

,对于此
bool pressgeOn=false
bool-cmbscritta=false
应该是小部件的全局变量,它将开始工作。

您的类必须是有状态的,以更改活动的状态

此外,变量必须全局声明

class MyClass extends StatefulWidget {
  @override
  _MyClassState createState() => _MyClassState();
}

class _MyClassState extends State<MyClass> {
  bool pressGeoON = false;
  bool cmbscritta = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RaisedButton(
          shape: new RoundedRectangleBorder(
              borderRadius: new BorderRadius.circular(18.0),
              side: BorderSide(color: Colors.red)),
          color: pressGeoON ? Colors.blue : Colors.red,
          textColor: Colors.white,
          child: cmbscritta ? Text("GeoOn") : Text("GeoOFF"),
          //    style: TextStyle(fontSize: 14)
            onPressed: () {
              setState(() {
                pressGeoON = !pressGeoON;
                cmbscritta = !cmbscritta;
              });
            }
        ),
      ),
    );
  }
}
class MyClass扩展StatefulWidget{
@凌驾
_MyClassState createState()=>\u MyClassState();
}
类MyClassState扩展了状态{
bool pressgeon=false;
bool-cmbscrita=假;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:升起按钮(
形状:新的RoundedRectangleBorder(
边界半径:新边界半径。圆形(18.0),
边:边框边(颜色:Colors.red)),
颜色:按?颜色。蓝色:颜色。红色,
textColor:Colors.white,
子项:cmbscritta?文本(“GeoOn”):文本(“geoof”),
//样式:文本样式(字体大小:14)
已按下:(){
设置状态(){
pressgeon=!pressgeon;
cmbscritta=!cmbscritta;
});
}
),
),
);
}
}

您能否共享调用此RaisedButton的完整代码?您在哪里定义此变量的?bool pressgeon=false;bool-cmbscrita=假;wowww(正确:)能解释一下吗?在@ovverride Widget build(BuildContext context){}之后不写调用setState()将调用Widget的build方法,并且bool pressGeOn=false的值;bool-cmbscrita=假;将被重置。所以这些变量应该在构建方法之外。在构建方法的第一行打印日志并按下按钮,您将看到当您调用setState()时,构建方法也将被调用。