微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flutter,如何解决“RenderBox 未布局:...NEEDS-PAINT”

如何解决Flutter,如何解决“RenderBox 未布局:...NEEDS-PAINT”

我正在尝试使用 GridView.builder 显示一个列表并在每一行中显示一个子项...这是代码的一部分:

SafeArea(
        child: Column(
          children: [
            Header(),SizedBox(height: 20),Expanded(child: SingleChildScrollView(child: Konten())),],),)

Konten()代码

Padding(
      padding: const EdgeInsets.all(10),child: GridView.builder(
        physics: NeverScrollableScrollPhysics(),shrinkWrap: true,itemCount: data.length,gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 1,crossAxisspacing: 16,mainAxisspacing: 16,childAspectRatio:
                10
            ),itemBuilder: (context,index) => Container(
          alignment: Alignment.center,child: Text(data[index]["API"]),decoration: Boxdecoration(
              color: Colors.Amber,borderRadius: BorderRadius.circular(15)),)

但我收到此错误

════════ Exception caught by rendering library ═════════════════════════════════
Assertion Failed:
../…/rendering/Box.dart:1930
hasSize
"RenderBox was not laid out: RenderRepaintBoundary#0992d relayoutBoundary=up3 NEEDS-PAINT"

The relevant error-causing widget was
Column
lib/screen_utama.dart:18
════════════════════════════════════════════════════════════════════════════════

我使用的 data 列表是来自 api 的数据......但是当我将数据更改为这个时,不会显示错误

List data=List.generate(10,(index) => {"id": index,"name": "Lowongan $index"})
      .toList();

有没有办法解决这个问题?

解决方法

认为当您的数据为空时会发生这种情况。当没有可用数据时,您可以通过显示一个空的占位符来简单地修复它。

对于您的 Konten 小部件,build 函数可能如下所示:

@override
  Widget build(BuildContext context) {
    if (data.isEmpty){
      return Text('no content available');
    }

    return Padding(
      padding: const EdgeInsets.all(10),child: GridView.builder(
        physics: NeverScrollableScrollPhysics(),shrinkWrap: true,itemCount: data.length,gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 1,crossAxisSpacing: 16,mainAxisSpacing: 16,childAspectRatio: 10,mainAxisExtent: 0),itemBuilder: (context,index) => Container(
          alignment: Alignment.center,child: Text(data[index]["API"]),decoration: BoxDecoration(color: Colors.amber,borderRadius: BorderRadius.circular(15)),),);
  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。