У меня проблема, когда я прокручиваю границу списка, обрезанную поверх карточки. Я использовал stackchildlist с SliverPersistentHeader. Я добавил код ниже. Когда я прокручиваю список вверху списка, размер уменьшается, пожалуйста, проверьте код. Мы применяем maxHeight и minHeight. Обрежьте рамку наверху карточки. Если у кого-то есть представление об этом типе списка или проблемы, пожалуйста, оставьте свои предложения. С уважением и уважением.
@override
Widget build(BuildContext context) {
return Container(
color: ColorsApp.black,
child: CustomScrollView(
slivers: colr
.map(
(color) =>
StackedListChild(
minHeight: _minHeight,
maxHeight: colr.indexOf(color) == colr.length - 1
? MediaQuery
.of(context)
.size
.height
: _maxHeight,
pinned: true,
child: Center(
child: new Container(
height: 300.0,
color: Colors.transparent,
child: new Container(
decoration: new BoxDecoration(
color: Colors.green,
borderRadius: new BorderRadius.only(
topLeft: const Radius.circular(40.0),
topRight: const Radius.circular(40.0),
)
),
child: new Center(
child: new Text("Hi modal sheet"),
)
),
),
),
),
)
.toList(),
),
);}
class StackedListChild extends StatelessWidget {
final double minHeight;
final double maxHeight;
final bool pinned;
final bool floating;
final Widget child;
SliverPersistentHeaderDelegate get _delegate => _StackedListDelegate(
minHeight: minHeight, maxHeight: maxHeight, child: child);
const StackedListChild({
Key key,
@required this.minHeight,
@required this.maxHeight,
@required this.child,
this.pinned = false,
this.floating = false,
}) : assert(child != null),
assert(minHeight != null),
assert(maxHeight != null),
assert(pinned != null),
assert(floating != null),
super(key: key);
@override
Widget build(BuildContext context) => SliverPersistentHeader(
key: key, pinned: pinned, floating: floating, delegate: _delegate);}
class _StackedListDelegate extends SliverPersistentHeaderDelegate {
final double minHeight;
final double maxHeight;
final Widget child;
_StackedListDelegate({
@required this.minHeight,
@required this.maxHeight,
@required this.child,
});
@override
double get minExtent => minHeight;
@override
double get maxExtent => math.max(maxHeight, minHeight);
@override
Widget build(
BuildContext context, double shrinkOffset, bool overlapsContent) {
return new SizedBox.expand(child: child);
}
@override
bool shouldRebuild(_StackedListDelegate oldDelegate) {
return maxHeight != oldDelegate.maxHeight ||
minHeight != oldDelegate.minHeight ||
child != oldDelegate.child; }