在Flutter中,我有以下类:
class ContainerCardData {
ContainerCardData({
this.width,
this.height,
this.elevation = 4,
this.gradientColors = const [Colors.blue],
LinearGradient? gradient,
BorderRadius? borderRadius,
this.child,
}) : borderRadius = borderRadius ?? BorderRadius.circular(10),
// getDefaultGradient is a function that returns a gradient (which is perfectly valid)
gradient = gradient ?? getDefaultGradient(gradientColors);
我用这个copyWith方法将值传递给构造函数:
ContainerCardData copyWith({
double? width,
double? height,
double? elevation,
List<Color>? gradientColors,
LinearGradient? gradient,
BorderRadius? borderRadius,
Widget? child,
}) =>
ContainerCardData(
width: width ?? this.width,
height: height ?? this.height,
elevation: elevation ?? this.elevation,
gradientColors: gradientColors ?? this.gradientColors,
gradient: gradient ?? this.gradient,
borderRadius: borderRadius ?? this.borderRadius,
child: child ?? this.child,
);
我的问题是,无论我为gradientColors
传递什么值,getDefaultGradient
总是接收默认值(本例中为Colors.blue)
这怎么可能,当我传递有效值给它的时候。
当我打印时:
final containerCardData = ContainerCardData(
gradientColors: [Colors.orange],
height: 92,
elevation: 4,
borderRadius: tileBorder,
);
final x = containerCardData.copyWith(
gradientColors: [Colors.green],
);
// x.gradientColors -> The values I passed
// x.gradient -> the default colors!
print(
'1) ${containerCardData.gradientColors} => ${containerCardData.gradient?.colors}');
print('2) ${x.gradientColors} => ${x.gradient?.colors}');
输出
flutter: 1) [MaterialColor(primary value: Color(0xff2196f3))] => [MaterialColor(primary value: Color(0xff2196f3)), Color(0xff4dabf5)]
flutter: 2) [MaterialColor(primary value: Color(0xff4caf50))] => [MaterialColor(primary value: Color(0xff2196f3)), Color(0xff4dabf5)]
为什么渐变总是使用默认的gradientColors
?
谢谢你,谢谢
1条答案
按热度按时间vngu2lb81#
copyWith()用于用new覆盖赋值。
这意味着如果你有x,其中A=1,B=1,C=1是默认构造的,并且想要x,其中A=1,B=2,C=1。你就可以用(B=2)来实现它。
你的覆盖实现也Assert,但你没有传递新的值给梯度,因此没有覆盖。
所以,如果你这样做:
应该工作!