代码:
Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Shopping List'), ), body: Column( mainAxisSize: MainAxisSize.min, children: [ ListView( padding: EdgeInsets.symmetric(vertical: 8.0), children: widget.products .map((Product product) => ShoppingListItem( product: product, inCart: _shoppingCart.contains(product), onCartChanged: _handleCartChanged, )) .toList(), ), ], )); }
错误提示:
Vertical viewport was given unbounded height.
RenderBox was not laid out: RenderViewport#6b63c NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
'package:flutter/src/rendering/box.dart':
Failed assertion: line 1785 pos 12: 'hasSize'
Column中已经添加了MainAxisSize.min属性,但还是报hasSize错误。
分析原因:根据ide的提示,垂直方向上给了一个无限大的高度,这个是因为子Widget是ListView,flutter中ListView在构建控件时会“询问”子组件所要求的空间,而ListView无法给出具体值,导致出错(粗略理解,后期分析源码后再来分析)。
//TODO 后期有能力时分析源码找出原因
解决办法:将ListView放入一个能确定高度的Widget中。