Flutter 关闭包含DragableScrollableSheet的底板,使其处于颤振状态

Flutter 关闭包含DragableScrollableSheet的底板,使其处于颤振状态,flutter,flutter-layout,Flutter,Flutter Layout,我正在使用showButtomSheet显示包含DragableScrollableSheet的底部工作表。我想通过点击DargableScrollableSheet上的按钮来关闭底部工作表。我该怎么做 只要DragableScrollableSheet不靠近屏幕顶部,我就可以让它工作,但当它接近顶部时,一种模式覆盖会出现在工作表下方,当我关闭工作表时,模式覆盖会保持不变 我曾尝试使用PersistentBottomSheetController.close()关闭工作表,并使用Navigato

我正在使用showButtomSheet显示包含DragableScrollableSheet的底部工作表。我想通过点击DargableScrollableSheet上的按钮来关闭底部工作表。我该怎么做

只要DragableScrollableSheet不靠近屏幕顶部,我就可以让它工作,但当它接近顶部时,一种模式覆盖会出现在工作表下方,当我关闭工作表时,模式覆盖会保持不变

我曾尝试使用PersistentBottomSheetController.close()关闭工作表,并使用Navigator.pop关闭工作表,如下所示,但结果是一样的:工作表关闭后会留下一个黑色覆盖层,我无法找到删除它的方法

省道板:

屏幕录制:

导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
静态常量字符串_title='颤振代码示例';
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:_标题,
家:脚手架(
正文:MyStatelessWidget(),
),
);
}
}
类MyStatelessWidget扩展了无状态小部件{
MyStatelessWidget({Key}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回中心(
儿童:升降按钮(
子项:常量文本('showBottomSheet'),
已按下:(){
脚手架(上下文)。展示底图(
(构建上下文){
返回DragableScrollableSheet(
扩展:false,
maxChildSize:0.935,
生成器:(上下文,scrollController)=>ListView(
控制器:滚动控制器,
填充:常量边集。全部(8),
儿童:[
容器(
身高:200,
颜色:颜色。琥珀色[600],
儿童:中心(
儿童:升降按钮(
子项:常量文本('Close BottomSheet'),
onPressed:()=>Navigator.pop(上下文),
),
),
),
容器(
身高:500,
颜色:颜色。琥珀色[500],
子项:常量中心(子项:文本('条目B')),
),
],
),
);
},
);
},
),
);
}
}
Scaffold.of(context.showBottomSheet
更改为
showModalBottomSheet

showModalBottomSheet(
  isScrollControlled: true,
  barrierColor: Colors.transparent,
  isDismissible: false,
  context: context, 
  builder: (context)=> ...,
);

解决方案是将关闭操作更改为:

ElevatedButton(
    child: const Text('Close BottomSheet'),
    onPressed: () {
        Navigator.pop(context);
        Scaffold.of(context).showBodyScrim(false, 0.0);
    }
),

当底板一直拖到顶部时,脚手架会在底板下方添加一个ModalBarrier。ModalBarrier可以通过ScaffoldState方法showBodyScrim进行控制:

不幸的是,ModalBarrier不是一个选项,因为当工作表打开一半时,它应该可以与下面的内容交互。
ElevatedButton(
    child: const Text('Close BottomSheet'),
    onPressed: () {
        Navigator.pop(context);
        Scaffold.of(context).showBodyScrim(false, 0.0);
    }
),