在 Flutter 中使用私有类代替构建器函数

问题描述 投票:0回答:1

我正在尝试将小部件移动到私有类中,以实现代码分离和整洁。当只需要

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
参数集的类,但它就是不来找我。

是否有首选方法可以做到这一点,或者这只是构建器方法是最佳选择的情况?

flutter dart
1个回答
0
投票

要解决 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),
    );

我发现这比使用继承更清晰、更容易调试,但你的方式在技术上也没有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.