如何在颤动中隐藏布局溢出消息
How to hide layout overflow message in flutter
我是 Flutter.Working 的新手,底部 sheet.Bottom sheet 具有正常的恒定高度。它的高度会随着拖动而增加。请参考代码 below.Issue 是当底部 sheet 是正常尺寸的视图溢出时。请参考附图。我想删除 window.
中的溢出消息
class MyBottomSheet extends StatefulWidget {
@override
_MyBottomSheetState createState() => new _MyBottomSheetState();
}
class _MyBottomSheetState extends State<MyBottomSheet> {
Offset dragDetail;
double slidingPercent;
static const PAGE_FULL_HEIGHT= 600.0;
static const PAGE_NORMAL_HEIGHT=80.0;
SlideDirection direction;
static double pageHeight = PAGE_NORMAL_HEIGHT;
static PagePosition pagePosition = PagePosition.Bottom;
onVerticalStart(DragStartDetails details) {
dragDetail = details.globalPosition;
}
onVerticalEnd(DragEndDetails details) {
setState(() {
if (pageHeight < 300) {
pageHeight = PAGE_NORMAL_HEIGHT;
pagePosition = PagePosition.Bottom;
} else if (pageHeight > 300) {
pageHeight = PAGE_FULL_HEIGHT;
pagePosition = PagePosition.Top;
}
});
}
onVerticalUpdate(DragUpdateDetails details) {
setState(() {
if (dragDetail != null) {
final newPosition = details.globalPosition;
final dy = dragDetail.dy - newPosition.dy;
if (dy > 0.0) {
direction = SlideDirection.bottomToTop;
} else if (dy < 0.0) {
direction = SlideDirection.topToBottom;
}
if (direction == SlideDirection.bottomToTop &&
pagePosition != PagePosition.Top) {
pageHeight =
((dy / PAGE_FULL_HEIGHT) * 1000).abs().clamp(PAGE_NORMAL_HEIGHT, PAGE_FULL_HEIGHT);
} else if (direction == SlideDirection.topToBottom &&
pagePosition != PagePosition.Bottom) {
pageHeight = PAGE_FULL_HEIGHT -
((dy / PAGE_FULL_HEIGHT) * 1000).abs().clamp(PAGE_NORMAL_HEIGHT, PAGE_FULL_HEIGHT);
}
}
});
}
Column buildButtonColumn(IconData icon, String label) {
return new Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
new Icon(icon),
new Container(
margin: const EdgeInsets.only(left: 30.0,right: 30.0),
child: new Text(
label,
style: new TextStyle(
fontSize: 12.0,
fontWeight: FontWeight.w400,
color: Colors.blue,
),
),
),
],
);
}
@override
Widget build(BuildContext context) {
return new Container(
height: pageHeight,
width: MediaQuery.of(context).size.width,
child: new Stack(
children: <Widget>[
new Padding(
padding: const EdgeInsets.fromLTRB(5.0, 5.0, 5.0, 0.0),
child: new Card(
elevation: 5.0,
child: new PhysicalModel(
shape: BoxShape.rectangle,
borderRadius: new BorderRadius.circular(5.0),
color: Colors.black12,
child: new Padding(
padding: const EdgeInsets.all(8.0),
child: new Column(
children: <Widget>[
new Align(
alignment: Alignment.topCenter,
child: new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
buildButtonColumn(Icons.local_offer, 'Offer'),
buildButtonColumn(Icons.notifications_active, 'Notification'),
buildButtonColumn(Icons.shopping_cart, 'Cart'),
],
),
),
new Divider(color: Colors.black,)
],
),
)),
),
),
new GestureDetector(
onVerticalDragStart: onVerticalStart,
onVerticalDragEnd: onVerticalEnd,
onVerticalDragUpdate: onVerticalUpdate,
)
],
),
);
}
}
正常尺寸
全尺寸
在flutter中,溢出被认为是一个错误。并且应该被修复,而不是被忽略。
在您的情况下,是底页根容器中的 height: pageHeight
导致问题,因为它太小了。
删除或增加其值应该可以解决您的问题。
尝试使用 OverflowBox 包装您的小部件
我是 Flutter.Working 的新手,底部 sheet.Bottom sheet 具有正常的恒定高度。它的高度会随着拖动而增加。请参考代码 below.Issue 是当底部 sheet 是正常尺寸的视图溢出时。请参考附图。我想删除 window.
中的溢出消息class MyBottomSheet extends StatefulWidget {
@override
_MyBottomSheetState createState() => new _MyBottomSheetState();
}
class _MyBottomSheetState extends State<MyBottomSheet> {
Offset dragDetail;
double slidingPercent;
static const PAGE_FULL_HEIGHT= 600.0;
static const PAGE_NORMAL_HEIGHT=80.0;
SlideDirection direction;
static double pageHeight = PAGE_NORMAL_HEIGHT;
static PagePosition pagePosition = PagePosition.Bottom;
onVerticalStart(DragStartDetails details) {
dragDetail = details.globalPosition;
}
onVerticalEnd(DragEndDetails details) {
setState(() {
if (pageHeight < 300) {
pageHeight = PAGE_NORMAL_HEIGHT;
pagePosition = PagePosition.Bottom;
} else if (pageHeight > 300) {
pageHeight = PAGE_FULL_HEIGHT;
pagePosition = PagePosition.Top;
}
});
}
onVerticalUpdate(DragUpdateDetails details) {
setState(() {
if (dragDetail != null) {
final newPosition = details.globalPosition;
final dy = dragDetail.dy - newPosition.dy;
if (dy > 0.0) {
direction = SlideDirection.bottomToTop;
} else if (dy < 0.0) {
direction = SlideDirection.topToBottom;
}
if (direction == SlideDirection.bottomToTop &&
pagePosition != PagePosition.Top) {
pageHeight =
((dy / PAGE_FULL_HEIGHT) * 1000).abs().clamp(PAGE_NORMAL_HEIGHT, PAGE_FULL_HEIGHT);
} else if (direction == SlideDirection.topToBottom &&
pagePosition != PagePosition.Bottom) {
pageHeight = PAGE_FULL_HEIGHT -
((dy / PAGE_FULL_HEIGHT) * 1000).abs().clamp(PAGE_NORMAL_HEIGHT, PAGE_FULL_HEIGHT);
}
}
});
}
Column buildButtonColumn(IconData icon, String label) {
return new Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
new Icon(icon),
new Container(
margin: const EdgeInsets.only(left: 30.0,right: 30.0),
child: new Text(
label,
style: new TextStyle(
fontSize: 12.0,
fontWeight: FontWeight.w400,
color: Colors.blue,
),
),
),
],
);
}
@override
Widget build(BuildContext context) {
return new Container(
height: pageHeight,
width: MediaQuery.of(context).size.width,
child: new Stack(
children: <Widget>[
new Padding(
padding: const EdgeInsets.fromLTRB(5.0, 5.0, 5.0, 0.0),
child: new Card(
elevation: 5.0,
child: new PhysicalModel(
shape: BoxShape.rectangle,
borderRadius: new BorderRadius.circular(5.0),
color: Colors.black12,
child: new Padding(
padding: const EdgeInsets.all(8.0),
child: new Column(
children: <Widget>[
new Align(
alignment: Alignment.topCenter,
child: new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
buildButtonColumn(Icons.local_offer, 'Offer'),
buildButtonColumn(Icons.notifications_active, 'Notification'),
buildButtonColumn(Icons.shopping_cart, 'Cart'),
],
),
),
new Divider(color: Colors.black,)
],
),
)),
),
),
new GestureDetector(
onVerticalDragStart: onVerticalStart,
onVerticalDragEnd: onVerticalEnd,
onVerticalDragUpdate: onVerticalUpdate,
)
],
),
);
}
}
正常尺寸
全尺寸
在flutter中,溢出被认为是一个错误。并且应该被修复,而不是被忽略。
在您的情况下,是底页根容器中的 height: pageHeight
导致问题,因为它太小了。
删除或增加其值应该可以解决您的问题。
尝试使用 OverflowBox 包装您的小部件