Flutter 如何将showModalBottomSheet设置为初始高度的一半,但可展开和分解
以下代码是可撤销的,但由于Flutter 如何将showModalBottomSheet设置为初始高度的一半,但可展开和分解,flutter,Flutter,以下代码是可撤销的,但由于colorsList有很多颜色,它最初占据了整个高度: onPressed: () { showModalBottomSheet( context: this.context, isScrollControlled: true, builder: (BuildContext context) { return Wrap( child
colorsList
有很多颜色,它最初占据了整个高度:
onPressed: () {
showModalBottomSheet(
context: this.context,
isScrollControlled: true,
builder: (BuildContext context) {
return Wrap(
children: [
for (List<Color> colors in colorsList)
Container(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text("${colorsName[colorsList.indexOf(colors)]}"),
Container(
height: 80,
child: ListView.builder(
padding: EdgeInsets.only(left: 8, right: 8,),
scrollDirection: Axis.horizontal,
itemCount: colors.length,
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.only(left: 8,),
child: FloatingActionButton(
backgroundColor: colors[index],
tooltip: "Choose this color",
onPressed: () {
setState(() {
this.color = colors[index];
});
Navigator.pop(context);
},
),
);
},
),
),
],
),
),
],
);
}
);
},
onPressed:(){
showModalBottomSheet(
context:this.context,
是的,
生成器:(BuildContext上下文){
回程包装(
儿童:[
用于(在颜色列表中列出颜色)
容器(
子:列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
文本(${colorsName[colorsList.indexOf(colors)]}),
容器(
身高:80,
子项:ListView.builder(
填充:边设置。仅限(左:8,右:8,),
滚动方向:轴水平,
itemCount:colors.length,
itemBuilder:(构建上下文,int索引){
返回填充(
填充:常量边集。仅限(左:8,),
子:浮动操作按钮(
背景颜色:颜色[索引],
工具提示:“选择此颜色”,
已按下:(){
设置状态(){
this.color=颜色[索引];
});
Navigator.pop(上下文);
},
),
);
},
),
),
],
),
),
],
);
}
);
},
使用流生成器包装工作表的内容,并在发生拖动时更新流
StreamController<double> controller = StreamController.broadcast();
RaisedButton(
child: Text('Show Buttom Sheet'),
onPressed: () {
showModalBottomSheet(context: context, builder: (context){
return StreamBuilder(
stream: controller.stream,
builder:(context,snapshot) => GestureDetector(
onVerticalDragUpdate: (DragUpdateDetails details){
position = MediaQuery.of(context).size.height- details.globalPosition.dy;
print('position dy = ${position}');
position.isNegative?Navigator.pop(context)
:controller.add(position);
},
behavior: HitTestBehavior.translucent,
child:
Container(
color: Colors.red,
height: snapshot.hasData ? snapshot.data:200.0,
width: double.infinity,
child: Text('Child'),
)),
);
});
}),
StreamController=StreamController.broadcast();
升起的按钮(
子项:文本(“显示按钮表”),
已按下:(){
showModalBottomSheet(上下文:上下文,生成器:(上下文){
返回流生成器(
stream:controller.stream,
生成器:(上下文,快照)=>GestureDetector(
onVerticalDragUpdate:(DragUpdate详细信息){
position=MediaQuery.of(context).size.height-details.globalPosition.dy;
打印('position dy=${position}');
position.isNegative?Navigator.pop(上下文)
:controller.add(位置);
},
行为:HitTestBehavior.transparent,
儿童:
容器(
颜色:颜色,红色,
高度:snapshot.hasData?snapshot.data:200.0,
宽度:double.infinity,
子项:文本(“子项”),
)),
);
});
}),