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

Flutter运行报错'Null类型不是List<dynamic>子类型'问题求助

报错原因

这个报错是代码执行顺序错误导致的,FutureBuilder的builder回调会被多次触发:首次触发时异步请求还未完成,snapshot.data的值就是Null,你直接将Null赋值给非空类型的List变量,就触发了类型不匹配的报错。

另外你代码里还有两处隐含问题:

  • 打印返回值的代码print('responsBody');缺了变量插值符$,实际只会打印字符串字面量,没法判断接口返回是否正常
  • getMethod没有做异常捕获,也没有明确返回类型,接口请求失败、返回格式不符合预期时也会返回Null

修复方案

调整代码逻辑顺序:先判断加载状态、错误状态,确认异步请求成功且返回值不为空后,再进行变量赋值。

修正后的完整代码如下:

class _EntryState extends State<Entry> {
  // 明确指定返回类型,增加异常捕获
  Future<List?> getMethod() async {
    try {
      String theUrl = 'http://ananyananu.000webhostapp.com/getData.php';
      var res = await http.get(Uri.parse(theUrl), headers: {"Accept":"application/json"});
      var responsBody = json.decode(res.body);
      print ('I reached here');
      print('$responsBody'); // 补全插值符,打印实际返回值
      return responsBody as List;
    } catch(e) {
      print('请求出错:$e');
      return null;
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey[200],
      appBar: AppBar(
        title: Text('Connect to Local Host') ,
        centerTitle: true,
        backgroundColor: Colors.redAccent,
      ),
      body: FutureBuilder(
        future: getMethod(),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          // 先判断加载状态
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(
              child: CircularProgressIndicator(),
            );
          }
          // 再判断错误状态
          if (snapshot.hasError || snapshot.data == null) {
            return Center(
              child: Text('Error Fetching Data'),
            );
          }
          // 确认返回值不为空后再赋值
          List snap = snapshot.data as List;

          return ListView.builder(
            itemCount: snap.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text("head: ${snap[index]['heading']}"),
                subtitle: Text("body ${snap[index] ['body']}"),
              );
            },
          );
        },
      ),
    );
  }
}

内容的提问来源于stack exchange,提问作者Uttam Mane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:06:02