在const构造函数中,不能将类型为“Null”的值分配给类型为“String”的参数。

58

我无法在Flutter中将questions [questionNumber] 用作文本构造函数。

错误:

评估此常量表达式会引发异常。dart(const_eval_throws_exception)

无法将“Null”类型的值分配给常量构造函数中类型为“String”的参数。 尝试使用子类型或删除关键字“const”。dartconst_constructor_param_type_mismatch

常量创建的参数必须是常量表达式。 尝试使参数成为有效的常量,或使用“new”调用构造函数。dartconst_with_non_constant_argument

class _QuizPageState extends State<QuizPage> {
  List<Widget> scoreKeeper = [];
  List<String> questions = [
    'You can lead a cow down stairs but not up stairs.',
    'Approximately one quarter of human bones are in the feet.',
    'A slug\'s blood is green.'
  ];

  int questionNumber = 0;

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        const Expanded(
          flex: 5,
          child: Padding(
            padding: EdgeInsets.all(10.0),
            child: Center(
              child: Text(
                questions[questionNumber],
                textAlign: TextAlign.center,
                style: TextStyle(
                  fontSize: 25.0,
                  color: Colors.white,
                ),
              ),
            ),
          ),
        ),
     ],
    );
  }
}
2个回答

109

嗯,错误是由于在Expanded组件中使用了const关键字。只需删除它,一切都会很好。

所以这样:

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        Expanded(
          flex: 5,
          child: Padding(
            padding: EdgeInsets.all(10.0),
            child: Center(
              child: Text(
                questions[questionNumber],
                textAlign: TextAlign.center,
                style: TextStyle(
                  fontSize: 25.0,
                  color: Colors.white,
                ),
              ),
            ),
          ),
        ),
     ],
    );
  }
}

3
对于动态变量,在该小部件上移除const关键字。 - Theodory
3
没错,const 就是问题所在。 - Dulya Perera

2

在 Expanded 小部件之前移除关键字 const

class _QuizPageState extends State<QuizPage> {
  List<Widget> scoreKeeper = [];
  List<String> questions = [
    'You can lead a cow down stairs but not up stairs.',
    'Approximately one quarter of human bones are in the feet.',
    'A slug\'s blood is green.'
  ];

  int questionNumber = 0;

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        Expanded(
          flex: 5,
          child: Padding(
            padding: EdgeInsets.all(10.0),
            child: Center(
              child: Text(
                questions[questionNumber],
                textAlign: TextAlign.center,
                style: TextStyle(
                  fontSize: 25.0,
                  color: Colors.white,
                ),
              ),
            ),
          ),
        ),
     ],
    );
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接