Orientation Builder 给出了错误的方向
Orientation Builder gives wrong orientation
在我的应用程序中,我使用 GridView
来显示类别网格和 TextField
。我想根据 Screen Orientation
更改一行中显示的项目数(即在 Portrait mode 5 items per line
和 landscape mode 8 items per line
中)。
我正在尝试使用 OrientationBuilder
小部件来实现此目的。在我打开软键盘编辑 TextField 之前,它工作得很好。
但是当我打开软键盘时,OrientationBuilder returns 方向为 landscape
从而导致溢出问题。
这是我的代码,
return new Scaffold(
appBar: buildFilterAppBar(context),
body: new OrientationBuilder(builder: (context, orientation) {
return new Column(
children: <Widget>[
new Expanded(
child: new ListView(
children: <Widget>[
buildContentTitle(
context, true, Icons.local_offer, '', 'Choose category'),
new GridView.count(
crossAxisCount: orientation == Orientation.portrait ? 5 : 8,
shrinkWrap: true,
physics: new NeverScrollableScrollPhysics(),
children: buildCategories(orientation),
),
new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
buildContentTitle(context, false, null,
'assets/money_pouch.png', 'Set a price range'),
new Padding(
padding: const EdgeInsets.only(left: 44.0),
child: new Text(
'Price (\u20B9)',
style: new TextStyle(
color: Theme.of(context).primaryColorDark,
fontSize: 15.0,
fontWeight: FontWeight.w600),
),
),
new Padding(
padding: const EdgeInsets.only(left: 44.0, right: 12.0),
child: new Row(
children: <Widget>[
new Flexible(
child: new TextField(
decoration: new InputDecoration(labelText: 'From'),
)),
new Container(
width: 1.0,
height: 40.0,
color: Colors.grey[700],
margin: const EdgeInsets.symmetric(horizontal: 5.0),
),
new Flexible(
child: new TextField(
decoration: new InputDecoration(labelText: 'To'),
)),
],
),
),
],
),
],
),
),
new MaterialButton(
padding: const EdgeInsets.symmetric(vertical: 15.0),
onPressed: () {},
color: Theme.of(context).accentColor,
minWidth: double.infinity,
child: new Text(
'APPLY FILTERS',
style: new TextStyle(color: Colors.white, fontSize: 16.0, fontWeight: FontWeight.w500),
),
),
],
);
}),
);
除了使用 OrientationBuilder
还有其他选择吗?或者有什么方法可以纠正它吗?
提前致谢。
文档中已经说过
OrientationBuilder builds a widget tree that can depend on the parent widget's orientation (distinct from the device orientation).
在我的例子中,当软键盘打开时,屏幕的宽度变得大于高度(注意我计算的高度是Full Screen Height - Soft Keyboard height
)。
因此 OrientationBuilder returns as landscape
根据文档,这是 correct behaviour
。
因此 OrientationBuilder cannot be used
对于这种情况。
为了解决这个问题,我们可以使用从 MediaQuery
获得的方向
MediaQuery.of(context).orientation == Orientation.portrait ? 5 : 8
在我的应用程序中,我使用 GridView
来显示类别网格和 TextField
。我想根据 Screen Orientation
更改一行中显示的项目数(即在 Portrait mode 5 items per line
和 landscape mode 8 items per line
中)。
我正在尝试使用 OrientationBuilder
小部件来实现此目的。在我打开软键盘编辑 TextField 之前,它工作得很好。
但是当我打开软键盘时,OrientationBuilder returns 方向为 landscape
从而导致溢出问题。
这是我的代码,
return new Scaffold(
appBar: buildFilterAppBar(context),
body: new OrientationBuilder(builder: (context, orientation) {
return new Column(
children: <Widget>[
new Expanded(
child: new ListView(
children: <Widget>[
buildContentTitle(
context, true, Icons.local_offer, '', 'Choose category'),
new GridView.count(
crossAxisCount: orientation == Orientation.portrait ? 5 : 8,
shrinkWrap: true,
physics: new NeverScrollableScrollPhysics(),
children: buildCategories(orientation),
),
new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
buildContentTitle(context, false, null,
'assets/money_pouch.png', 'Set a price range'),
new Padding(
padding: const EdgeInsets.only(left: 44.0),
child: new Text(
'Price (\u20B9)',
style: new TextStyle(
color: Theme.of(context).primaryColorDark,
fontSize: 15.0,
fontWeight: FontWeight.w600),
),
),
new Padding(
padding: const EdgeInsets.only(left: 44.0, right: 12.0),
child: new Row(
children: <Widget>[
new Flexible(
child: new TextField(
decoration: new InputDecoration(labelText: 'From'),
)),
new Container(
width: 1.0,
height: 40.0,
color: Colors.grey[700],
margin: const EdgeInsets.symmetric(horizontal: 5.0),
),
new Flexible(
child: new TextField(
decoration: new InputDecoration(labelText: 'To'),
)),
],
),
),
],
),
],
),
),
new MaterialButton(
padding: const EdgeInsets.symmetric(vertical: 15.0),
onPressed: () {},
color: Theme.of(context).accentColor,
minWidth: double.infinity,
child: new Text(
'APPLY FILTERS',
style: new TextStyle(color: Colors.white, fontSize: 16.0, fontWeight: FontWeight.w500),
),
),
],
);
}),
);
除了使用 OrientationBuilder
还有其他选择吗?或者有什么方法可以纠正它吗?
提前致谢。
文档中已经说过
OrientationBuilder builds a widget tree that can depend on the parent widget's orientation (distinct from the device orientation).
在我的例子中,当软键盘打开时,屏幕的宽度变得大于高度(注意我计算的高度是Full Screen Height - Soft Keyboard height
)。
因此 OrientationBuilder returns as landscape
根据文档,这是 correct behaviour
。
因此 OrientationBuilder cannot be used
对于这种情况。
为了解决这个问题,我们可以使用从 MediaQuery
MediaQuery.of(context).orientation == Orientation.portrait ? 5 : 8