flutter 发生异常,范围错误(范围错误(索引):无效值:有效值范围为空:(一)

pftdvrlh  于 2022-12-27  发布在  Flutter
关注(0)|答案(2)|浏览(104)

我尝试使用提供程序获取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):无效值:有效值范围为空:(一)

drnojrws

drnojrws1#

因为likesdatanull,所以需要使用setState来更新值。

getdata() async {
     setState(() { // use it like this
     likesdata = await Repos().getdata();
    }); 
  }

调用setState通知框架,此对象的内部状态已更改,更改方式可能会影响此子树中的用户界面。

nxowjjhe

nxowjjhe2#

我认为在'likesdata'列表中没有数据意味着这个列表是空的,这就是为什么你会得到这样的错误,你也检查列表是否是空的,通过把print放在build方法中。

likesdata.isEmpty?SizedBox():YourWidgets()

并且API数据在构建后获取,则需要在填充数据后使用setState

likesdata = await Repos().getdata();
   setState((){});

相关问题