Flutter未处理异常:空值上使用空检查运算符问题排查
问题原因及解决方法
你的错误根源是声明的contacts列表变量从未初始化,一直处于null状态,当你执行contacts!.add(...)时,强制解包null值触发了错误,和userPhoneNumber的空值检查无关。
具体问题点
你在函数内声明了List<String>? contacts;,但只是定义了变量类型,没有创建实际的列表实例(比如= [])。即便后续userPhoneNumber不为null,调用add方法时,contacts依然是null,!强制解包就会抛出"Null check operator used on a null value"错误。
修复代码
把列表变量初始化即可,修改如下:
Future<List<String>?> fetchContacts(List<String> contacts) async { QueryResult result = await _client().query( QueryOptions( document: gql(_fetchContacts), variables: { 'contacts': contacts, }, ), ); // 初始化空列表,不再是null List<String> fetchedContacts = []; if (result.data != null) { int status = result.data!['fetchContacts']['status']; int resultCount = result.data!['fetchContacts']['users'].length; if (status == 200 && resultCount != 0) { for (int i = 0; i < resultCount; i++) { final userData = result.data!['fetchContacts']['users'][i]; final phoneNumber = userData['userPhoneNumber']; if (phoneNumber != null) { fetchedContacts.add(phoneNumber); print(phoneNumber); } } } } // 根据需求返回:空列表时返回null,或直接返回空列表 return fetchedContacts.isEmpty ? null : fetchedContacts; }
额外优化建议
- 避免变量名冲突:把内部列表变量改名(比如
fetchedContacts),和函数参数的contacts区分开,减少混淆 - 提取临时变量:把嵌套的
result.data!['fetchContacts']['users'][i]提取成userData,提升代码可读性,避免重复取值
内容的提问来源于stack exchange,提问作者Sumchans
相关产品推荐
相关产品推荐

