1. 程式人生 > 實用技巧 >flutter中Cloumn的children中包含了一個ListView提示hasSize錯誤

flutter中Cloumn的children中包含了一個ListView提示hasSize錯誤

程式碼:
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中。