Flutter如何正确传递List到其他StatefulWidget类
问题说明
你在check_symptoms.dart中通过路由传_chosenItems的逻辑没有问题,报错来自results.dart中State类的参数接收写法错误:
- Flutter框架要求
createState()方法仅负责返回State实例,禁止在该方法内执行传参等逻辑,否则就会触发no_logic_in_createState警告,同时你给_ResultsState传入位置参数但没有定义对应的构造函数,才会出现参数数量不匹配的报错。 - State类不需要手动接收Widget的传入参数,框架内置的
widget属性可以直接获取关联的StatefulWidget上的所有公开属性,不需要手动传值。
修复方案
仅需要修改results.dart的代码即可,不需要调整check_symptoms.dart的传参逻辑:
- 移除
createState()方法里给_ResultsState传参的写法,直接返回无参的State实例 - 在State的生命周期方法、build方法里,通过
widget.list即可拿到传入的选中症状列表
修正后的results.dart完整代码:
import 'package:flutter/material.dart'; class Results extends StatefulWidget { final List list; // 补充key参数符合Flutter组件规范,不添加也不影响传参功能 const Results({required this.list, Key? key}) : super(key: key); @override State<Results> createState() => _ResultsState(); } class _ResultsState extends State<Results> { @override Widget build(BuildContext context) { // 通过widget.list直接访问传入的_chosenItems print(widget.list); return Scaffold( appBar: AppBar(title: const Text("结果页")), // 后续布局直接使用widget.list即可获取选中的症状数据 ); } }
优化建议:如果你的列表存储的是字符串类型的症状名称,可以给List加上泛型约束,将
final List list;改为final List<String> list;,可以避免不必要的类型报错。
内容的提问来源于stack exchange,提问作者Ahmed Azeez
相关产品推荐
相关产品推荐

