1. ホーム
  2. listview

Flutter SimpleDialogの中のListView

2023-11-15 12:17:31

質問

FlutterアプリでListView.builderを使ったSimpleDialogを以下のコードで表示したいのですが、どうすればいいですか?

showDialog(
  context: context,
  builder: (BuildContext context) {
    return new SimpleDialog(
      children: <Widget>[
        new FittedBox(
          child: new ListView(
            children: <Widget>[
              new Text("one"),
              new Text("two"),
            ],
          ),
        )
      ],
    );
  },
);

で、このようなエラーが発生します(すみません、Stackoverflowがコードが多すぎると文句を言うので、ログをコードとして包むことができませんでした)。

══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════ I/flutter ( 4481 ): 次のアサーションが performLayout() の間にスローされました。 I/flutter ( 4481): RenderViewport は固有次元を返すことをサポートしていません。 I/flutter ( 4481): 固有次元を計算するには、ビューポートのすべての子をインスタンス化する必要があります。 I/flutter ( 4481): ビューポートが遅延であることのポイントを打ち消します。 I/flutter ( 4481): 単に主軸方向にビューポートを縮めようとしているのであれば、そのために I/flutter ( 4481): RenderShrinkWrappingViewport レンダーオブジェクト (ShrinkWrappingViewport ウィジェット)で実現します。 I/flutter ( 4481): 本質的な次元 API を実装することなく、その効果を得ることができます。 I/flutter ( 4481): ... I/flutter ( 4481): 別の例外が発生しました。RenderBox はレイアウトされていません。RenderPhysicalShape#83d92 relayoutBoundary=up2 NEEDS-PAINT I/flutter ( 4481 ): 別の例外が発生しました: 'package:flutter/src/rendering/shifted_box.dart': Failed assertion: line 310 pos 12: 'child.hasSize': は真ではありません。 I/flutter ( 4481 ): 別の例外がスローされました。RenderBox はレイアウトされていません。RenderPhysicalShape#83d92 relayoutBoundary=up2

Containerでheightとwidthを指定して試してみましたが、ListViewがDialogの中に収まるようにしたいのですが、可能でしょうか?

SimpleDialogにListViewを含めるにはどうすればよいですか?

どのように解決するのですか?

ただ、ラップ ListView.builder の中に Container で、特定の の高さ .

Widget setupAlertDialoadContainer() {
  return Container(
    height: 300.0, // Change as per your requirement
    width: 300.0, // Change as per your requirement
    child: ListView.builder(
      shrinkWrap: true,
      itemCount: 5,
      itemBuilder: (BuildContext context, int index) {
        return ListTile(
          title: Text('Gujarat, India'),
        );
      },
    ),
  );
}

で上記のメソッドを呼び出します。 showDialog .

showDialog(
    context: context,
    builder: (BuildContext context) {
      return AlertDialog(
        title: Text('Country List'),
        content: setupAlertDialoadContainer(),
      );
    });

編集しました。

で行くことができます。 ラップの のコメントも。