动态设置颜色时出现死代码警告

Dead code warning when setting color dynamically

我正在尝试制作按下后变为灰色的按钮。我阅读了有关如何执行此操作的信息。我能找到的最好方法是使用三元运算符设置 material 颜色,然后在 setState(() {}) 块中更改条件:

  Container vehicleButton(IconData icon_, String text_, {required Function onClickAction}){
    const double buttonSizeX = 200;
    const double buttonSizeY = 100;
    const double iconSize = 60;
    const double buttonTextSize = 15;

    const double buttonMargin = 5;
    
    Color buttonColor = const Color(0xff2196f3);
    const Color iconColor = Color(0xffffffff);
    const Color buttonTextColor = Color(0xffffffff);

    bool pressed = false;

    return Container(padding: const EdgeInsets.only(left: buttonMargin, right: buttonMargin, top: buttonMargin, bottom: buttonMargin), child: SizedBox.fromSize(
      size: Size(buttonSizeX, buttonSizeY), child: Material(color: pressed ? Color.fromARGB(255, 143, 143, 143) : buttonColor, child: InkWell(
      onTap: () {
        setState(() {
          pressed = true;
        });
        onClickAction();
      },
      child: Column(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
          Icon(icon_, color: iconColor, size: iconSize),
          Text(text_, style: TextStyle(fontSize: buttonTextSize, color: buttonTextColor)),
    ])))));
  }

但是,我收到一条警告,指出 ?在我的三元运算符中是死代码。确实,按钮在按下后不会变灰。

我认为 Material 的值可能是最终值,无法更改,但这并不能解释为什么我在 Internet 上可以找到的所有示例都使用此方法。

有必要使用三级运算符吗? 你让我改变你在 onClickAction 中调用的函数中 buttonColor 的值。

Color buttonColor = const Color(0xff2196f3);
  Container vehicleButton(IconData icon_, String text_,
      {required Function onClickAction}) {
    const double buttonSizeX = 200;
    const double buttonSizeY = 100;
    const double iconSize = 60;
    const double buttonTextSize = 15;

    const double buttonMargin = 5;
    const Color iconColor = Color(0xffffffff);
    const Color buttonTextColor = Color(0xffffffff);
    const Color clickedcolor = Color.fromARGB(255, 143, 143, 143);

    return Container(
        padding: const EdgeInsets.only(
            left: buttonMargin,
            right: buttonMargin,
            top: buttonMargin,
            bottom: buttonMargin),
        child: SizedBox.fromSize(
            size: Size(buttonSizeX, buttonSizeY),
            child: Material(
                color: buttonColor,
                child: InkWell(
                    onTap: () {
                      setState(() {});
                      onClickAction();
                    },
                    child: Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
                          Icon(icon_, color: iconColor, size: iconSize),
                          Text(text_,
                              style: TextStyle(
                                  fontSize: buttonTextSize,
                                  color: buttonTextColor)),
                        ])))));
  }
  //pass it on onClickAction
  onClick() {
    debugPrint("CLICKED");
    buttonColor = Color.fromARGB(255, 143, 143, 143);
  }

我建议您使用 flutter dev 提供的按钮,而不是使用 SizedBox:https://docs.flutter.dev/release/breaking-changes/buttons

您可以尝试的一个简单方法是:

RaisedButton(
      child: new Text('Attention'),
      textColor: Colors.white,
      color: pressColor ? Colors.grey : Colors.blue, //Choose your personal colors
      onPressed: () => setState(() => pressColor = !pressColor), //change the button colors
    );

你有:

Container vehicleButton(...) {
  bool pressed = false;

  return Container(
      ...
      child: SizedBox.fromSize(
          ...
          child: Material(
              color: pressed ? Color.fromARGB(255, 143, 143, 143) : buttonColor,
              child: InkWell(
                  onTap: () {
                    setState(() {
                      pressed = true;
                    });
                    onClickAction();
                  },

Dart 分析工具正确报告 Color.fromARGB(...) 是死代码,因为条件三元运算符检查 local pressed 变量的状态,在检查时,它是 always false。虽然 onTap 处理程序设置 pressed = true,但它设置的是本地 pressed 变量的状态,该变量永远不会被再次读取。

您可能希望 pressed 成为任何 State class 包含 vehicleButton 方法的 成员 变量。