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

Flutter中FutureBuilder报错需添加return,求解决方法

Flutter FutureBuilder 非空返回错误修复

你遇到的错误核心是FutureBuilder的builder函数存在分支未返回Widget的情况:当snapshot.hasData为true且data不包含empty时,你创建了ListView.builder但没加return,导致代码路径可能返回null,而Dart非空安全要求builder必须返回非空的Widget。

直接给ListView.builder加上return即可修复:

body: Center(
  child: FutureBuilder(
    future: getAllData(),
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        // 注意:data需从snapshot.data转换获取,示例:
        var data = snapshot.data as List<Map<String, dynamic>>;
        if (data.contains('empty')) {
          return const Text('No data');
        } else {
          // 这里添加return
          return ListView.builder(
              itemCount: data.length,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text("${data[index]["subject"]}"),
                  trailing: Text("${data[index]["endtime"]}"),
                );
              });
        }
      } else {
        return const CircularProgressIndicator();
      }
    },
  ),
),

额外补充两个实用细节:

  • 代码里的data必须从snapshot.data转换而来,记得根据实际返回值做类型转换,否则会出现未定义错误。
  • 不要直接把getAllData()写在future参数中,组件每次重建都会重复调用API。建议在initState中初始化Future并复用:
    late final Future<List<Map<String, dynamic>>> _dataFuture;
    
    @override
    void initState() {
      super.initState();
      _dataFuture = getAllData();
    }
    
    // 后续FutureBuilder的future参数使用_dataFuture
    future: _dataFuture,
    

内容的提问来源于stack exchange,提问作者Adán Alvarez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:55:15