Flutter报错:返回类型'SliverAppBar?'不符合闭包要求的'List<Widget>'类型
报错原因
- 类型不匹配:
NestedScrollView的headerSliverBuilder参数要求闭包返回List<Widget>类型的值,你当前直接返回从Map中取出的单个SliverAppBar对象,不符合类型要求。 - 空安全问题:从
Map中通过Key取值时,返回的是可空类型SliverAppBar?,如果传入的Key不存在会返回null,需要做兼容处理。 - 额外语法错误:你当前代码中
appBarList[_currentAppBar]]多写了一个多余的闭合方括号],也会触发语法报错。
修复方案
将headerSliverBuilder的返回值修改为包含目标SliverAppBar的列表,同时处理空安全兼容即可,参考代码如下:
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { final targetAppBar = appBarList[_currentAppBar]; // 兼容空值,存在对应AppBar就返回包含它的列表,否则返回空列表 return targetAppBar != null ? [targetAppBar] : []; }
如果你可以确定_currentAppBar的取值永远是appBarList中存在的有效Key,也可以使用强制解包简化写法:
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return [appBarList[_currentAppBar]!]; }
内容的提问来源于stack exchange,提问作者sarina
相关产品推荐
相关产品推荐

