The overlap happens because the visual element containing the label has a computed flex-shrink of 1 and a computed overflow of visible.
The flex-shrink being at 1 means that the element containing the label can shrink. In this case, both the ListView and the element containing the label have flex-shrink set to 1, so after the "initial" space is calculated, both will be shrunk in equal measures to fit the available space.
The overlap happens because the overflow of the element containing the label is set to visible. If you switch it to overflow, you should see that it is not overlapping anymore.
To ensure that the label is always visible, you can set the flex-shrink on the parent to 0, which will ensure that its size will be computed by its children.