Flutter调用REST API遇空安全错误:无法无条件调用[]方法
解决Flutter调用REST API时的空安全错误
错误原因
直接访问snapshot.data[index]会触发空安全错误,因为snapshot.data在Future请求未完成时是null,且原代码未处理加载、错误等状态,也没有限制列表项数量。
解决方案
先处理FutureBuilder的不同状态,再安全访问数据,同时给列表添加项数限制。
修改后的完整代码
import 'dart:core'; import 'package:flutter/material.dart'; import 'package:rest_api/data/fetch_data.dart'; class MyWidget extends StatefulWidget { const MyWidget({Key? key}) : super(key: key); @override State<MyWidget> createState() => _MyWidgetState(); } class _MyWidgetState extends State<MyWidget> { @override Widget build(BuildContext context) { return Scaffold( body: FutureBuilder( future: getPost(), builder: (context, snapshot) { // 加载中状态 if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } // 请求错误状态 if (snapshot.hasError) { return Center(child: Text('加载失败: ${snapshot.error}')); } // 空数据判断 final postData = snapshot.data; if (postData == null || postData.isEmpty) { return const Center(child: Text('暂无数据')); } // 正常渲染列表 return ListView.builder( itemCount: postData.length, // 限制列表项数量 itemBuilder: (context, index){ return Text(postData[index]); }, ); }, ), ); } }
关键修改说明
- 状态覆盖:处理了加载中、错误、空数据三种异常场景,避免直接访问可能为空的
snapshot.data - 空安全保障:通过
postData == null的判断,确保后续访问postData[index]时数据一定非空 - 性能优化:添加
itemCount避免ListView无限构建列表项,减少不必要的资源消耗
内容的提问来源于stack exchange,提问作者Unudulmayan melodiyalar
相关产品推荐
相关产品推荐

