我正在创建一个 Flutter 移动应用程序。我有一个带抽屉的脚手架,它在应用程序中居中,如下所示:
当用户点击第二个 ListTile 即“过滤字符/选择类别”时,会弹出一个 AlertDialog。问题是警报对话框在横向中既不是垂直居中也不是水平居中,并且在纵向中它不是垂直居中。
景观警报对话框: https ://ibb.co/GtdJ2jZ
纵向警报对话框: https ://ibb.co/HH6vQbx
我尝试计算错位的百分比并将其添加为右侧的填充,当设备方向为 LandscapeRight 时它起作用,但当方向变为 LandscapeLeft 时再次错位。
我已经搜索过,但目前在获取设备的真实方向时存在问题。
那么任何人都可以帮助我将 AlertDialog 居中,或者告诉我为什么它没有居中?提前致谢。
总结抽屉代码:
Scaffold(
key: scaffoldKey,
backgroundColor: Colors.grey[100],
body: _getScaffoldBody(homePageState, context),
drawer: Center(
child: Container(
alignment: Alignment.center,
width: MediaQuery.of(context).size.width * 0.9 > 375
? 375
: MediaQuery.of(context).size.width * 0.9,
height: MediaQuery.of(context).size.height * 0.9 > 58.0 * 6
? 58.0 * 6 // 58 * Number of List Tiles
: MediaQuery.of(context).size.height * 0.9,
decoration: new BoxDecoration(
color: Colors.white,
borderRadius: new BorderRadius.all(Radius.circular(5)),
),
child: ListView(
shrinkWrap: true,
padding: EdgeInsets.zero,
physics: BouncingScrollPhysics(),
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
ListTile(
title: Text('Filter Characters / Choose Categories'),
trailing: Icon(
Icons.search,
color: Colors.blue,
),
onTap: () {
showCategoriesDialg(homePageState, context);
},
),
],
),
),
),
),
显示 AlertDialog 的代码:
Future showCategoriesDialg(State<HomePage> homePageState, BuildContext context) async {
return showDialog<void>(
context: context,
barrierDismissible: false, // user must tap a button!
builder: (BuildContext context) {
return AlertDialog(
scrollable: true,
content: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height - 200,
child: ListView.builder(
itemCount: categories.length,
itemBuilder: (context, index) {
return CheckboxListTile(
title: Text(categories.values.elementAt(index).titleEn),
value: categories.values.elementAt(index).checked,
onChanged: (newValue) {
homePageState.setState(() {
categories.values.elementAt(index).checked = newValue;
});
},
controlAffinity: ListTileControlAffinity.trailing,
);
},
),
),
);
},
);
}