Flutter空安全迁移后报错:返回类型Null不符合闭包要求的Widget类型
报错原因
TypeAheadFormField的loadingBuilder参数要求闭包必须返回非空的Widget类型,空安全模式下不允许返回Null,所以你在if (!_isLoading) return null;这行返回null就触发了类型不匹配错误。
解决方案
方案1:返回空占位Widget替代null
不需要展示加载状态的时候返回SizedBox.shrink()即可,这是一个无尺寸、不占用布局空间的空Widget,完全符合非空要求,改动最小且和原有逻辑效果完全一致,修改后的loadingBuilder代码如下:
loadingBuilder: (BuildContext context) { if (!_isLoading) return const SizedBox.shrink(); return Align( child: Padding( padding: EdgeInsets.symmetric(vertical: 8), child: ExtendedProgressIndicator(), ), ); },
方案2:用条件判断简化代码
也可以用三目运算符简化写法,逻辑更直观:
loadingBuilder: (BuildContext context) => _isLoading ? Align( child: Padding( padding: EdgeInsets.symmetric(vertical: 8), child: ExtendedProgressIndicator(), ), ) : const SizedBox.shrink();
额外注意事项
你当前suggestionsCallback的强制类型转换也存在空安全隐患:你将入参为可空String?的函数,强制转为了入参非空的FutureOr<Iterable<Map<String, dynamic>>> Function(String),后续如果传入null的pattern可能触发运行时错误,建议同步将强转的函数入参类型改为Function(String?)适配空安全规则。
内容的提问来源于stack exchange,提问作者Abdullah Hamadi
相关产品推荐
相关产品推荐

