我尝试使用提供程序获取API数据,但遇到此错误
发生异常。范围错误(范围错误(索引):无效值:有效值范围为空:1)、
我之前用的是listviewbuilder,这样我就可以用索引访问数据了,但是在这里我不太明白,请指导我
class _MiddleSectionState extends State<MiddleSection> {
@override
void initState() {
getdata();
super.initState();
}
getdata() async {
likesdata = await Repos().getdata();
}
bool isLikebuttonPressed = false;
List<LikeModelData> likesdata = [];
@override
@override
Widget build(BuildContext context) {
//final likedData = Provider.of<CommentPageProvider>(context);
Size size = MediaQuery.of(context).size;
return ChangeNotifierProvider(
create: (context) => CommentPageProvider(),
child: Padding(
padding: const EdgeInsets.all(15.0),
child: Container(
width: size.width * 0.2,
height: size.height * 0.1,
child: Column(children: [
Consumer<CommentPageProvider>(
builder: (context, value, child) {
return Row(
children: [
TextWidgetCommentpage(
text: value.isLoading? likesdata[0].postId ?? "Likes ": 'data fetching' ),
// TextWidgetCommentpage(text:likesdata[0].postId.toString() ??"11"),
const Spacer(),
TextWidgetCommentpage(
text: '${widget.commentCount} comments')
],
);
},
),
显示发生异常的错误。RangeError(RangeError(index):无效值:有效值范围为空:(一)
2条答案
按热度按时间drnojrws1#
因为
likesdata
是null
,所以需要使用setState
来更新值。调用
setState
通知框架,此对象的内部状态已更改,更改方式可能会影响此子树中的用户界面。nxowjjhe2#
我认为在'likesdata'列表中没有数据意味着这个列表是空的,这就是为什么你会得到这样的错误,你也检查列表是否是空的,通过把print放在build方法中。
并且API数据在构建后获取,则需要在填充数据后使用setState