【问题标题】:Flutter change text when button pressed按下按钮时颤动更改文本
【发布时间】:2020-04-07 14:43:43
【问题描述】:

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

我的代码:

         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 Analisys 的建议,但不起作用...帮助!

【问题讨论】:

  • 你能分享你调用这个 RaisedButton 的完整代码吗?
  • 你在哪里定义了这个变量? bool pressGeoON = false; bool cmbscritta = false;

标签: flutter dart


【解决方案1】:

你的类必须是有状态的才能改变状态的活动

变量也必须全局声明

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;
              });
            }
        ),
      ),
    );
  }
}

【讨论】:

    【解决方案2】:

    对于这个bool pressGeoON = false; bool cmbscritta = false; 应该是您的小部件的全局变量,它将开始工作。

    【讨论】:

    • wowww 正确:) 能解释一下吗?在@ovverride Widget build(BuildContext context) { } 之后不写
    • 调用 setState() 将调用您的小部件的构建方法和 bool pressGeoON = false; 的值;布尔 cmbscritta = 假;将被重置。所以这些变量应该不在你的构建方法中。以便它们的值可以持久化。
    • 在构建方法的第一行打印日志并按下按钮,您会看到调用 setState() 时也会调用构建方法。
    【解决方案3】:

    您应该将onPressed 简化为:

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

    并确保您的小部件类是 StatefulWidget 而不是 StatelessWidget

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 2019-08-05
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多