est*_*vez 8 dart flutter flutter-layout
我无法使 CustomMultiChildLayout 可滚动。
目前,我的 CustomMultiChildLayout 只是将子项布置在一列中。将来我会让它变得更复杂,但现在我想让它可滚动。我试着把它放进去ListView,但还是不行RenderIndexedSemantics object was given an infinite size during layout.。我尝试将其放入其中,SingleChildScrollView但IntrinsicHeight在这种情况下它无法滚动,并且它的高度与视口相同。
以下是一些无法正常工作的示例:
return SingleChildScrollView(
child: IntrinsicHeight(
child: CustomMultiChildLayout(
delegate: ViewLayoutBuilder(itemCount: cards.length),
children: _buildChildren(context),
),
),
);
Run Code Online (Sandbox Code Playgroud)
和
return ListView(
children: <Widget>[
CustomMultiChildLayout(
delegate: ViewLayoutBuilder(itemCount: cards.length),
children: _buildChildren(context),
)
],
)
Run Code Online (Sandbox Code Playgroud)
这是我的ViewLayoutBuilder代表:
class ViewLayoutBuilder extends MultiChildLayoutDelegate {
final int itemCount;
ViewLayoutBuilder({@required this.itemCount});
@override
void performLayout(Size size) {
Offset position = Offset(0,0);
Size firstSize = layoutChild('card_0', BoxConstraints.tightFor(width: size.width));
positionChild('card_0', position);
position = position.translate(0, firstSize.height);
for (int i = 1; i < itemCount; i++) {
final String cardId = 'card_$i';
if (hasChild(cardId)) {
Size newSize = layoutChild('$cardId', BoxConstraints.tightFor(width: size.width));
positionChild('$cardId', position);
position = position.translate(0, newSize.height);
}
}
}
@override
bool shouldRelayout(MultiChildLayoutDelegate oldDelegate) => false;
}
Run Code Online (Sandbox Code Playgroud)
我所有尝试中的主要错误是我CustomMultiChildLayout给出了无穷大的高度。在其他情况下,它会被裁剪到视口高度并且无法滚动。