Flutter List.generate报错:返回值Object不符合闭包要求的Widget
报错原因
这个错误是Dart类型推断失效导致的:
List.generate是泛型方法,调用时如果没有显式指定列表元素类型,Dart无法从当前上下文准确推导出闭包需要返回Widget类型,会直接将闭包返回值类型推断为根类型Object,和上下文要求的Widget类型不匹配,因此抛出报错。- 改用
ListView.builder能正常运行,是因为ListView.builder的itemBuilder参数明确定义了回调返回值必须为Widget,上下文类型约束极强,不会出现类型推断偏差。
修复方法
选择任意一种即可解决问题:
- 给
List.generate显式指定泛型参数为Widget,明确告知Dart生成的列表元素类型是组件 - 给
List.generate的闭包参数添加明确的返回值类型Widget - 额外建议:把代码里无泛型的
(snapshot.data as List)补充上具体的业务数据类型,比如(snapshot.data as List<PromotionData>),避免动态类型带来的其他隐式类型问题。
修复后代码示例
// 显式指定泛型为Widget的写法 List<Widget>.generate( data.length, (index) { return GestureDetector( child: Padding( padding: const EdgeInsets.only(bottom: 20, left: 20, right: 20), child: CustomPromotionNew( thumbNail: (snapshot.data as List)[index].imgUrl, title: (snapshot.data as List)[index].promotionName, ), ), onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => PromotionNewsDetailScreen( items: (snapshot.data as List)[index], ), ), ); }, ); }, )
内容的提问来源于stack exchange,提问作者Trung Phạm
相关产品推荐
相关产品推荐

