You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter报错Expected a value of type 'Widget' but got type 'Null'求助

问题排查:Flutter红屏报错Expected a value of type 'Widget', but got one of type 'Null'

报错原因

  • Mission类构造逻辑错误:虽然类属性secondWidget、secondDescription声明时设置了默认初始值,但构造函数的可选命名参数未设置默认值,当创建Mission实例时如果没有传入这两个参数,构造函数的赋值操作会直接将属性覆盖为null,原有默认值不会生效。
  • 卡片组件渲染逻辑不符合空安全要求:MultipleTextMissionCard组件中secondWidget、secondDescription未指定可空类型,且build方法中直接将可能为null的变量放入Widget树渲染,Flutter要求Widget树节点必须为非空的Widget类型,变量为null时就会触发类型不匹配报错。

解决方案

  • 修正Mission类构造函数,采用Dart更简洁的初始化语法,同时给可选参数设置默认值,避免属性被覆盖为null:
// 修正后的Mission构造函数
Mission(this.missionNumber, this.missionName, this.description, this.points, this.widget,{
  this.userPoints = 0,
  this.secondWidget = const Text("REPLACE THIS TEXT BY YOUR  Second WIDGET"),
  this.secondDescription = "",
});
  • 修正MultipleTextMissionCard组件的变量声明和渲染逻辑,适配空安全规则:
    1. 给可选属性指定可空类型
    2. 渲染时做空判断,值为null时不渲染或者渲染默认占位Widget
class MultipleTextMissionCard extends StatelessWidget {
  const MultipleTextMissionCard({Key? key,
    required this.missionNumber,
    required this.missionName,
    required this.description,
    required this.points,
    required this.widget,
    this.secondDescription,
    this.secondWidget
  }) : super(key: key);

  final String missionNumber;
  final String missionName;
  final String description;
  final List<int> points;
  final Widget widget;
  final String? secondDescription; // 指定可空类型
  final Widget? secondWidget; // 指定可空类型

  @override
  Widget build(BuildContext context) {
    return Card(
      elevation: 10,
      child: Column(
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                Text(missionNumber),
                Text(missionName,style:
                TextStyle(
                    fontSize: 20
                )
                ),
                Text("0/${points.last}"),
              ],
            ),
            const SizedBox(height: 5,),
            Text(description),
            widget,
            // 空判断后再渲染
            if (secondDescription != null) Text(secondDescription!),
            if (secondWidget != null) secondWidget!,
          ]
      ),
    );
  }
}

内容的提问来源于stack exchange,提问作者Chevelev Philippe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:21:04