【问题标题】:Change Material button color onPress and back to default onLongPress更改材料按钮颜色 onPress 并返回默认 onLongPress
【发布时间】:2021-06-22 12:53:09
【问题描述】:

您好,我还是 Flutter 的新手,但我正在尝试制作一个我认为非常简单的应用程序。

此应用由 30 个按钮组成,每个按钮都在自己的容器中。要遵循的代码。我要做的就是如果按下一个按钮,那么它会变成橙色,然后如果它是 longPressed,它会回到它的默认颜色白色。有人可以解释如何做到这一点。这是一个只有 1 个按钮的示例。

              Container(
            width: 65,
            height: 65,
            child: MaterialButton(
              shape: CircleBorder(
                  side: BorderSide(
                      width: 5,
                      color: Colors.blue[900],
                      style: BorderStyle.solid)),
              child: Text(
                "1",
                style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
              ),
              color: Colors.white,
              textColor: Colors.black,
              onPressed: () {
                setState(() {
                  color:
                  Colors.orange;
                });
              },
              onLongPress: (){
                setState(() {
                  color:
                  Colors.white;
                });
              },
            ),
          ),

提前致谢

【问题讨论】:

    标签: flutter material-design


    【解决方案1】:
    //declare color variable
    Color myColor=Colors.white;
    
    //set myColor to material button
    color:myColor;
    
    //in setstate use it like this
    
    setState({
    myColor=Colors.white; or myColor=Colors.orange;
    })
    

    【讨论】:

    • 您的回复,但是当我尝试它说颜色未定义时
    • 声明 Color myColor=Colors.white 并设置 color:myColor 而不是 color:Colors.white 并在我的答案中使用代码
    • tyvm 工作...这有点糟糕,我必须为每个按钮创建一个单独的 var 但那是因为我仍然知之甚少,并假设有一个更简单的方法...现在虽然笨重的它可以工作,所以我很高兴 tyvm
    【解决方案2】:

    首先定义一个颜色

    Color buttonColor = Colors.white;
    

    然后将此颜色传递给您的按钮

    MaterialButton(color: buttonColor)
    

    在你的 onPressed 函数中之后

     onPressed: () {
                setState(() {
                  buttonColor = 
                  Colors.orange;
                });
              },
    

    【讨论】:

    • ty 为您提供反馈。它的效果也很好,正如上面所建议的那样。虽然这是像上面这样的解决方案,但我选择第一个答案作为正确答案,只是因为他先回答,但无论如何都是 tyvm。
    猜你喜欢
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    相关资源
    最近更新 更多