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

Flutter页面传列表至幸运轮盘报错:List<String>非String子类型求助

问题分析与解决

报错_TypeError (type 'List<String>' is not a subtype of type 'String')的根源是参数传递错误,和flutter_fortune_wheel包无关:

  1. 在MainScreen跳转时,你把myList(本身是List<String>)包装进了另一个列表,传递给SpinningWheelScreen的inputs参数,导致inputs实际类型是List<List<String>>。
  2. 后续在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:15:11