我想将嵌套滚动添加到自定义底部工作表。我需要当内部列表很大并且可以滚动时,它只能通过在对话框顶部滑动来删除,而不是通过滑动列表来删除。但是,当列表中的项目很少时,则可以在整个对话区域中滑动。我试图通过 GestureDetector 解决这个问题,以便它不会将滑动发送给父级,但它仅在列表不滚动时才有效。这是创建对话框的当前代码。这是 showCustomModalBottomSheet 的调用
final res = await showCustomModalBottomSheet<T>(
context: context,
builder: (context) {
return StreamBuilder<PaginationData<T>>(
stream: items,
builder: (ctx, snapshot) {
final data = snapshot.data;
if (data == null) {
return Center(child: CircularLoader());
}
return CustomPaginationPicker(
title: title,
onClosePressed: () {
wasDismissed = false;
Navigator.pop(context, selectedValue);
},
onValueSelected: (v) {
wasDismissed = false;
Navigator.pop(context, v);
},
loadNextPageCallback: loadNextPageCallback,
loadedAllItems: data.loadedAllItems,
itemCount: data.itemsCount,
items: data.items,
toText: toString,
selectedItem: selectedValue,
defaultText: defaultText,
hasDefaultValue: hasDefaultValue,
//controller: ModalScrollController.of(context),
);
},
);
},
containerWidget: (_, animation, child) => FloatingModal(
child: child,
padding: EdgeInsets.zero,
),
barrierColor: AppOverlays.black30,
animationCurve: SpringCurve(0.08, 6),
);
我在 CustomPaginationPicker 的 build 方法中返回的这个小部件树
return Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
height: 56.h,
color: AppColors.grayscale100,
child: Stack(
alignment: Alignment.center,
children: [
Align(
alignment: Alignment.center,
child: Text(
title,
style: TextStyles.bodyBoldM.copyWith(
color: AppColors.grayscale900,
),
),
),
Positioned(
right: 22.w,
child: IconButton(
padding: EdgeInsets.zero,
iconSize: 12.w,
icon: SvgPicture.asset(
AppIcons.crossM,
color: AppColors.grayscale900,
),
onPressed: onClosePressed,
),
),
],
),
),
ConstrainedBox(
constraints: BoxConstraints(maxHeight: 650.h),
child: GestureDetector(
onVerticalDragUpdate: (_) {},
onVerticalDragDown: (_) {},
behavior: HitTestBehavior.deferToChild,
child: PaginationListView(
shrinkWrap: true,
physics: BouncingScrollPhysics(),
loadedAllItems: loadedAllItems,
itemCount: hasDefaultValue ? itemCount + 1 : itemCount,
loadNextPageCallback: loadNextPageCallback,
itemBuilder:
hasDefaultValue ? withDefaultValue : withoutDefaultValue,
controller: controller,
),
),
),
],
);
我猜您需要使用 RenderObject 来找出列表的实际高度并执行不同的行为。