错误:未布置 RenderBox,断言失败:第 1940 行 pos 12:'hasSize'
Posted
技术标签:
【中文标题】错误:未布置 RenderBox,断言失败:第 1940 行 pos 12:\'hasSize\'【英文标题】:Error: RenderBox was not laid out, Failed assertion: line 1940 pos 12: 'hasSize'错误:未布置 RenderBox,断言失败:第 1940 行 pos 12:'hasSize' 【发布时间】:2021-08-19 00:19:06 【问题描述】:我无法修复此错误
RenderBox 未布局:RenderPointerListener#2b92a relayoutBoundary=up9 需要-油漆需要-合成-位-更新 'package:flutter/src/rendering/box.dart':断言失败:第 1940 行 位置 12:'hasSize'。相关的导致错误的小部件是 ->ListView
这是我的 allProducts 部分。
import 'package:flutter/material.dart';
import 'package:hospital/Drawer/drawercontent.dart';
import 'package:hospital/Product/AllProducts/ProductList/product_list.dart';
import 'package:hospital/Product/AllProducts/carousel.dart';
import 'package:hospital/Product/AllProducts/category.dart';
class AllProducts extends StatefulWidget
@override
_AllProductsState createState() => _AllProductsState();
class _AllProductsState extends State<AllProducts>
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.green,
title: Text(
"Product",
style: TextStyle(fontStyle: FontStyle.italic),
),
actions: [
IconButton(
icon: Icon(Icons.person),
onPressed: () => print("open cart"),
),
],
),
drawer: Drawer(
child: DrawerContent(),
),
body: ListView(
children: [
Carousel(),
SizedBox(
height: 10.0,
),
CategoryPage(),
SizedBox(
height: 20.0,
),
ProductList()
],
));
这是我的产品部分
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:hospital/Product/AllProducts/ProductList/network_req.dart';
import 'package:hospital/Product/AllProducts/ProductList/product_model.dart';
import 'package:hospital/constant.dart';
import 'package:http/http.dart' as http;
// import '../../drawercontent.dart';
class ProductList extends StatefulWidget
final s_id;
const ProductList(key, this.s_id) : super(key: key);
@override
_ProductListState createState() => _ProductListState();
class _ProductListState extends State<ProductList>
@override
Widget build(BuildContext context)
return Container(
// ignore: missing_required_param
child: FutureBuilder<List<Model>>(
// future: NetReq.fetchTeams(),
future: NetReq.fetchTeams(widget.s_id),
builder: (context, snapshot)
if (snapshot.hasError)
return Text("Error $snapshot.error");
else if (snapshot.hasData)
return GridView.count(
// childAspectRatio: 1.0,
padding: EdgeInsets.only(left: 20, right: 20),
crossAxisCount: 2,
crossAxisSpacing: 18,
mainAxisSpacing: 18,
children: snapshot.data.map((team)
return Card(
elevation: 3.0,
margin: EdgeInsets.all(10.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),
),
child: Container(
width: 150.0,
padding: EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Expanded(
child: ClipRRect(
borderRadius: BorderRadius.circular(14.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12.0),
image: DecorationImage(
image: NetworkImage(
"https://5.imimg.com/data5/MR/TK/KJ/SELLER-769696/tulac-granules-500x500.jpeg"),
),
),
),
),
),
SizedBox(height: 12.0),
Text(
// "Tulac Granules, For Personal, Packaging Size: 90 Gm",
team.teamUniqId,
overflow: TextOverflow.ellipsis,
maxLines: 2,
style: kTitleStyle),
SizedBox(height: 6.0),
Text(
// "\u20B9 239/ Box",
team.teamType,
maxLines: 1,
style: kSubTitleStyle),
],
),
),
);
).toList());
return Center(
child: CircularProgressIndicator(),
);
,
),
);
【问题讨论】:
【参考方案1】:请像这样添加 GridView shrinkWrap: true:
返回 GridView.count( 收缩包装:真 填充:EdgeInsets.only(左:20,右:20), 交叉轴计数:2, 交叉轴间距:18, 主轴间距:18, );
【讨论】:
【参考方案2】:当 ListView 没有限制高度时会发生这种情况,这使得它获得无限的高度,您可以使用两种解决方案来解决这个问题
添加shrinkWrap: true
作为参数
这将告诉 ListView 使用尽可能少的空间,
使用限制高度的小部件(例如 SizedBox
或 Container
)包装您的 ListView,并为其指定高度和宽度
Container(
height: 50,
width: 50,
child: ListView()
)
希望这能解决您的问题
【讨论】:
以上是关于错误:未布置 RenderBox,断言失败:第 1940 行 pos 12:'hasSize'的主要内容,如果未能解决你的问题,请参考以下文章
RenderBox 未布置:RenderFlex#4a60a 需要-油漆需要-合成-位-更新
Flutter:未布置RenderBox:RenderRepaintBoundary#58c65 relayoutBoundary = up1 NEEDS-PAINT
RenderBox 未布局,Flutter Listview Builder 未显示
Flutter:RenderBox 未布置:RenderRepaintBoundary#58c65 relayoutBoundary=up1 NEEDS-PAINT
引发了另一个异常: RenderBox 未布置:CustomRenderShrinkWrappingViewport#f6727 relayoutBoundary=up17 NEEDS-PAINT N
垂直视口被赋予了无限的高度。 RenderBox 未布置:RenderViewport#34d12 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UP