有条件地使用"可见性"和列表<String>使宽幅显示



如果buttonType返回Half,我试图使SizedBox有条件地出现。但是会抛出一个错误。

错误:Equality operator ``==`` invocation with references of unrelated types.

const List<String>  buttonTypeList = ['FullButton','Half','Quarter'];
class ToolSetButton extends StatefulWidget {
final List buttonType;
const ToolSetButton(
{Key? key,this.buttonType = buttonTypeList})

Visibility(
//visible: false,
visible: widget.buttonType == 'Half' 
? false
: true,
child: SizedBox();

该错误依赖于buttonType被声明为List<String>,而==操作符将其与String(特别是'Half')进行比较。

要解决这个问题,我们可以使用下面的小部件:

class ToolSetButton extends StatefulWidget {
const ToolSetButton({Key? key, required this.buttonType}) : super(key: key);
final String buttonType;
@override
State<ToolSetButton> createState() => _ToolSetButtonState();
}
class _ToolSetButtonState extends State<ToolSetButton> {
@override
Widget build(BuildContext context) {
return Visibility(
visible: widget.buttonType == 'Half' 
? false
: true,
child: SizedBox(),
);
}
}
然而,在我们的例子中,一个更好、更优雅的解决方案是使用enum:
enum ButtonSize {
Full,
Half,
Quarter,
}
class ToolSetButton extends StatefulWidget {
const ToolSetButton({Key? key, required this.buttonSize}) : super(key: key);
final ButtonSize buttonSize;
@override
State<ToolSetButton> createState() => _ToolSetButtonState();
}
class _ToolSetButtonState extends State<ToolSetButton> {
@override
Widget build(BuildContext context) {
return Visibility(
visible: widget.buttonSize == ButtonSize.Half
? false
: true,
child: SizedBox(),
);
}
}

相关内容

最新更新