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
相关产品推荐
相关产品推荐

