Flutter 在下拉事件中检测模式表
是否可以在向下拖动底部工作表时截取事件,并在其即将关闭时显示消息?这不是一个确定的答案,但我在这里发帖,因为它提供了一个方向,并且对于注释来说太长(因为链接) BottomSheet类定义当用户开始拖动底部工作表时的回调 _ModalBottomSheet作为onDragStart和onDragEnd参数传递给它的BottomSheet子级 因此,从理论上讲,如果你真的想,你可以按照“ModalBottomSheet”的例子来实现定制的底部表单,并根据需要来定制这些内容。试试这个 我添加了bool变量,检查底部工作表是否打开或关闭, (我也在appBar中打印了此操作)Flutter 在下拉事件中检测模式表,flutter,flutter-layout,flutter-dependencies,flutter-animation,Flutter,Flutter Layout,Flutter Dependencies,Flutter Animation,是否可以在向下拖动底部工作表时截取事件,并在其即将关闭时显示消息?这不是一个确定的答案,但我在这里发帖,因为它提供了一个方向,并且对于注释来说太长(因为链接) BottomSheet类定义当用户开始拖动底部工作表时的回调 _ModalBottomSheet作为onDragStart和onDragEnd参数传递给它的BottomSheet子级 因此,从理论上讲,如果你真的想,你可以按照“ModalBottomSheet”的例子来实现定制的底部表单,并根据需要来定制这些内容。试试这个 我添加了boo
class Home扩展StatefulWidget{
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
bool-isOpen=false;
无功功率控制器;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:对,
标题:isOpen?文本(“打开底页”):文本(“关闭底页”),
),
正文:
浮动操作按钮(
已按下:(){
设置状态(){
等参=!等参;
});
打印(“点击底部页面”);
if(等参线){
bottomSheetController=showBottomSheet(
背景颜色:颜色。透明,
上下文:上下文,
建造商:(ctx){
返回ClipRRect(
borderRadius:仅限borderRadius(
右上角:半径。圆形(20),
左上:半径。圆形(20),
),
子:容器(
身高:150,
颜色:颜色,黑色,
子项:TextField()
),
);
});
bottomSheetController.closed.then((值){
设置状态(){
等参=!等参;
});
});
}否则{
Navigator.of(context.pop();
设置状态(){
等参=!等参;
});
}
},
子项:等参图标(图标。向下箭头):图标(图标。向上箭头),
),
);
}
}
如果您只是想在底部工作表关闭时得到通知,您可以依赖showBottomSheet()返回的控制器,该控制器将显示
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
bool isOpen = false;
var bottomSheetController;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: isOpen?Text("Open Bottom Sheet"):Text("Closed Bottom Sheet"),
),
body:
FloatingActionButton(
onPressed: () {
setState(() {
isOpen = !isOpen;
});
print('clicked on the bottom sheet');
if(isOpen) {
bottomSheetController = showBottomSheet(
backgroundColor: Colors.transparent,
context: context,
builder: (ctx) {
return ClipRRect(
borderRadius: BorderRadius.only(
topRight: Radius.circular(20),
topLeft: Radius.circular(20),
),
child: Container(
height: 150,
color: Colors.black,
child: TextField()
),
);
});
bottomSheetController.closed.then((value) {
setState(() {
isOpen = !isOpen;
});
});
} else {
Navigator.of(context).pop();
setState(() {
isOpen = !isOpen;
});
}
},
child: isOpen?Icon(Icons.arrow_downward):Icon(Icons.arrow_upward),
),
);
}
}