0

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/h9K0YB3

左置き忘れ: 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,
              );
            },
          ),
        ),
      );
    },
  );
}
4

1 に答える 1