动态设置颜色时出现死代码警告
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
方法的 成员 变量。
我正在尝试制作按下后变为灰色的按钮。我阅读了有关如何执行此操作的信息。我能找到的最好方法是使用三元运算符设置 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
方法的 成员 变量。