Flutter页面传列表至幸运轮盘报错:List<String>非String子类型求助
问题分析与解决
报错_TypeError (type 'List<String>' is not a subtype of type 'String')的根源是参数传递错误,和flutter_fortune_wheel包无关:
- 在MainScreen跳转时,你把
myList(本身是List<String>)包装进了另一个列表,传递给SpinningWheelScreen的inputs参数,导致inputs实际类型是List<List<String>>。 - 后续在SpinningWheelScreen中遍历
widget.inputs时,每个元素都是List<String>,但Text组件要求传入String类型,因此触发类型转换错误。
修复步骤
1. 修正MainScreen的参数传递
将跳转时的inputs: [myList]改为直接传递myList:
// MainScreen中跳转按钮的代码修改 ElevatedButton( onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => SpinningWheelScreen( inputs: myList, // 去掉外层数组 ), ), ); }, child: Text('Next') )
2. 明确SpinningWheelScreen的参数类型
为了避免动态类型的潜在问题,将inputs的类型明确为List<String>:
// SpinningWheelScreen的类定义修改 class SpinningWheelScreen extends StatefulWidget { final List<String> inputs; // 明确类型为List<String> SpinningWheelScreen({required this.inputs}); @override State<SpinningWheelScreen> createState() => _SpinningWheelScreenState(); }
3. 修复dispose方法的语法错误
selected.close是方法引用,需要改为调用方法selected.close(),同时加上@override标记:
// _SpinningWheelScreenState中的dispose方法修改 @override void dispose() { selected.close(); // 改为方法调用 super.dispose(); }
修复后效果
修改完成后,widget.inputs的类型为List<String>,遍历每个元素时it是String类型,可直接传给Text组件,幸运轮盘能正常渲染列表内容,类型错误也会消失。
内容的提问来源于stack exchange,提问作者Osman Demiroz
相关产品推荐
相关产品推荐

