Flutter モバイル アプリケーションを作成しています。次のように、アプリの中央に配置された引き出し付きの足場があります。
中央の引き出し: https://ibb.co/s5BMdNM
ユーザーが "Filter Character / Choose Categories" である 2 番目の ListTile をタップすると、AlertDialog がポップアップします。問題は、警告ダイアログが横向きでは垂直方向にも水平方向にも中央に配置されておらず、縦方向では垂直方向に中央に配置されていないことです。
Landscape AlertDialog: https://ibb.co/GtdJ2jZ
Portrait AlertDialog: https://ibb.co/HH6vQbx
デバイスの向きがLandscapeRightのときは機能しましたが、向きがLandscapeLeftになったときに再び置き忘れました。
左置き忘れ: https://ibb.co/JykZ67x
検索しましたが、現在、デバイスの真の向きを取得する際に問題があります。
では、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,
);
},
),
),
);
},
);
}