0

我想将嵌套滚动添加到自定义底部工作表。我需要当内部列表很大并且可以滚动时,它只能通过在对话框顶部滑动来删除,而不是通过滑动列表来删除。但是,当列表中的项目很少时,则可以在整个对话区域中滑动。我试图通过 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 来找出列表的实际高度并执行不同的行为。

4

0 回答 0