flutter 不能将“Null”类型的值赋给常量构造函数中“List”类型的参数< Color>

llycmphe  于 2023-01-18  发布在  Flutter
关注(0)|答案(3)|浏览(144)

我有一个小工具,它接受一个颜色数组,我需要在我的小工具中使用。我不明白为什么它一直给我下面的错误。
我的我的小部件如下所示;

class RoundedGradientButton extends StatelessWidget {

  const RoundedGradientButton({
    required this.gradientColors,
    super.key,
  });

 final List<Color> gradientColors;

  @override
  Widget build(BuildContext context) {
    return ClipRRect(
      borderRadius: BorderRadius.circular(20),
      child: Stack(
        children: <Widget>[
          Positioned.fill(
            child: Container(
              decoration: const BoxDecoration(
                gradient: LinearGradient(
                  begin: Alignment.topCenter,
                  end: Alignment.bottomCenter,
                  colors: this.gradientColors // -> Complains
                )
              ),
            ),
          ),
          TextButton(
            style: TextButton.styleFrom(
                foregroundColor: Colors.white,
                padding: const EdgeInsets.only(top: 10, bottom: 10),
                textStyle: const TextStyle(fontSize: 16),
                minimumSize: const Size.fromHeight(0)),
            onPressed: () {},
            child: const Text('Start')
          ),
        ],
      ),
    );
  }
}

错误

  • 类型为“Null”的值不能分配给常量构造函数中类型为“List”的参数。请尝试使用子类型,或移除关键字“const”。
  • 常量值无效。
z9gpfhce

z9gpfhce1#

在此处删除常量

const BoxDecoration(
                gradient: LinearGradient(
                  begin: Alignment.topCenter,
                  end: Alignment.bottomCenter,
                  colors: this.gradientColors // -> Complains
                )
x4shl7ld

x4shl7ld2#

对于您的第一个问题,当您使用RoundedGradientButton时,似乎传递了null值,请确保您这样调用它:

RoundedGradientButton(gradientColors: [your color]);

对于第二个问题,gradientColors变量不是常量,因此您需要删除BoxDecoration之前的const关键字,完整代码如下所示:

class RoundedGradientButton extends StatelessWidget {
  const RoundedGradientButton({
    required this.gradientColors,
    super.key,
  });

  final List<Color> gradientColors;

  @override
  Widget build(BuildContext context) {
    return ClipRRect(
      borderRadius: BorderRadius.circular(20),
      child: Stack(
        children: <Widget>[
          Positioned.fill(
            child: Container(
              decoration: BoxDecoration( // remove const from here
                gradient: LinearGradient(
                  begin: Alignment.topCenter,
                  end: Alignment.bottomCenter,
                  colors: gradientColors, // change this
                ),
              ),
            ),
          ),
          TextButton(
              style: TextButton.styleFrom(
                  padding: const EdgeInsets.only(top: 10, bottom: 10),
                  textStyle: const TextStyle(fontSize: 16),
                  minimumSize: const Size.fromHeight(0)),
              onPressed: () {},
              child: const Text('Start')),
        ],
      ),
    );
  }
}
2wnc66cl

2wnc66cl3#

问题是使用const并尝试在运行时获取变量。如果您注意到错误消息,则它包括
常量构造函数中的“List”。请尝试使用子类型或"removing the keyword 'const“。
删除BoxDecoration之前的const

Positioned.fill(
  child: Container(
    decoration: BoxDecoration( //this line `const`
        gradient: LinearGradient(
            begin: Alignment.topCenter,
            end: Alignment.bottomCenter,
            colors: gradientColors)),
  ),
),

相关问题