如何在flutter modal_bottom_sheet中添加嵌套滚动?

问题描述

我想将嵌套滚动添加自定义底部工作表。我需要的是,当内部列表很大并且可以滚动时,只能通过在对话框顶部滑动来删除它,而不能通过滑动列表来删除它。但是,当列表中的项目很少时,则可以在整个对话区域中滑动。 我试图通过 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 的构建方法中返回的这个小部件树

 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,itemBuilder:
                  hasDefaultValue ? withDefaultValue : withoutDefaultValue,controller: controller,);

我猜您需要使用 RenderObject 来找出列表的真实高度并执行不同的行为。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)