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

Dart/Flutter两页面间传值 StatefulWidget传参报错解决

错误原因

你把StatefulWidget的传参接收位置写反了。
按照Flutter的组件设计规则,路由跳转时的传入参数需要定义在继承StatefulWidget的组件类(即你的EditData类)中,State子类(即你的EditFire类)由框架自动通过createState方法创建实例,不支持自定义带参构造手动传值,State实例可以通过内置的widget属性访问到对应Widget实例上存储的所有参数。你现在把参数接收逻辑写在EditFire的构造函数里,框架调用createState时没法传入你要的5个参数,自然会报错。

修复方案

1. 修改editdata.dart代码

把参数定义和构造函数移到EditData类中,去掉EditFire的自定义带参构造,在initState生命周期里完成参数读取和初始化:

class EditData extends StatefulWidget {
  // 在这里声明所有需要接收的传参
  final String ID;
  final String date;
  final String time;
  final String dest;
  final String src;

  const EditData({
    super.key,
    required this.ID,
    required this.date,
    required this.time,
    required this.dest,
    required this.src,
  });

  @override
  State<EditData> createState() => EditFire();
}

class EditFire extends State<EditData> {
  late String currentID;
  final _destinationcontroller = TextEditingController();
  final _sourcecontroller = TextEditingController();
  late String olddate;
  late String oldtime;

  @override
  void initState() {
    super.initState();
    // 通过widget属性读取传入的参数,完成初始化
    currentID = widget.ID;
    olddate = widget.date;
    oldtime = widget.time;
    _destinationcontroller.text = widget.dest;
    _sourcecontroller.text = widget.src;
  }

  @override
  Widget build(BuildContext context) {
    // 原有页面构建逻辑不变
    return Scaffold();
  }

  @override
  void dispose() {
    // 释放文本控制器,避免内存泄漏
    _destinationcontroller.dispose();
    _sourcecontroller.dispose();
    super.dispose();
  }
}

2. 修改readdata.dart中的跳转传参代码

不要直接实例化EditFire,跳转时实例化EditData传入参数即可,以Navigator路由跳转为例:

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => EditData(
      ID: "2",
      date: "17/6/2022",
      time: "2:25",
      dest: "NewYork",
      src: "Japan",
    ),
  ),
);
注意事项

永远不要手动实例化State子类,State的生命周期由Flutter框架接管,所有页面间传递的参数都要挂载在Widget类上接收。

内容的提问来源于stack exchange,提问作者saad tabban

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:54:22