我正在尝试将小部件移动到私有类中,以实现代码分离和整洁。当只需要
Widget
时,这很容易,但如果需要更具体的东西,如 PreferredSizeWidget
或 BottomNavigationBarItem
,那就有点棘手了。 在这些情况下,您不能使用 StatelessWidget
方法。我尝试过使用静态构建方法并且有效,但感觉很混乱。
我也尝试过这个,它有效并且感觉干净,但它会抛出一个 lint 错误。忽略 lint 错误很容易,但我想知道是否有更好的方法。
class _SpecificBottomNavigationBarItem extends BottomNavigationBarItem {
_SpecificBottomNavigationBarItem({
super.label = 'Specific', // show lint warning unused_element
super.icon = const Icon(Icons.pin),
});
}
完整的 lint 警告是 unused_element
从未给出可选参数“label”的值。 尝试删除未使用的参数。
确实感觉应该有一种方法来返回带有
super
参数集的类,但它就是不来找我。
是否有首选方法可以做到这一点,或者这只是构建器方法是最佳选择的情况?
要解决 lint 问题:在对超级构造函数的调用中传递
label
,而不是将其作为子类构造函数的参数:
class _SpecificBottomNavigationBarItem extends BottomNavigationBarItem {
_SpecificBottomNavigationBarItem({
super.icon = const Icon(Icons.pin),
}) : super(label: 'Specific');
}
关于扩展这些类型的类与方法的问题更多的是意见/代码风格的问题。就我个人而言,我更喜欢仅具有我需要的参数的静态方法,例如:
_buildSpecificBottomNavigationBarItem({Widget icon = const Icon(Icons.pin)}) =>
BottomNavigationBarItem(
label: 'Specific',
icon: Icon(Icons.pin),
);
我发现这比使用继承更清晰、更容易调试,但你的方式在技术上也没有任何问题。