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

Android Studio运行Flutter应用出现空安全参数报错如何解决

报错原因

这是Flutter 2.0及以上版本开启空安全(Null Safety)后的常见语法适配错误,问题出在TaskItem的构造函数定义不符合空安全校验规则:

  • 构造函数的命名可选参数如果没有手动指定默认值,隐式默认值为null。原代码里Key key声明key是非空类型,无法接收隐式的null默认值,触发类型校验错误。
  • 空安全环境下旧版本的@required注解不再生效,必须使用内置的required关键字标记必填参数。原代码里this.label是非空String类型,没有标记必填的话同样会因为隐式null默认值触发类型错误。
修复方案

仅需要修改TaskItem类的构造函数即可,修改点共两处:

  • 将Key key改为Key? key,显式标记key为可空类型,适配不传key时的null默认值
  • 删除@required注解,在this.label前添加required关键字,标记label为必填的非空参数
修改后完整可运行代码
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build (BuildContext context) {
    return MaterialApp(
      title: 'Exploration!',
      theme: ThemeData(primarySwatch: Colors.lightGreen),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Space Exploration Planner")),
      body: Column(
        children: [
          Progress(),
          TaskList()
        ],
      ),
    );
  }
}

class Progress extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text('You are this far away exploring the whole universe'),
        LinearProgressIndicator(value: 0.0),
      ],
    );
  }
}

class TaskList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        TaskItem(label: "Load Rocket with Supplies"),
        TaskItem(label: "Launch Rocket"),
        TaskItem(label: "Circle the home planet"),
        TaskItem(label: "Head out to the first moon"),
        TaskItem(label: "Launch moon lander #1"),
      ],
    );
  }
}

class TaskItem extends StatelessWidget {
  final String label;

  // 仅修改了这行构造函数
  const TaskItem({ Key? key, required this.label}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        Checkbox(value: false, onChanged: null),
        Text(label),
      ],
    );
  }
}

补充:当前修改已经完全解决编译报错,代码可以直接运行。如果后续要实现复选框点击交互的效果,把TaskItem从无状态组件改为有状态组件管理勾选状态即可。

内容的提问来源于stack exchange,提问作者Viraj Jagdale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:51:26