【Flutter/Dart】スクロール部 + 最下部に張り付け
やりたいこと
登場人物
何らかのアイテムの一覧(以降ListViewとして話を進める)
何らかのWidget(以降テキストとして話を進める)
配置
テキストは、アイテムの個数に関わらず画面最下部に固定
アイテム一覧は、テキストを配置して残った領域を使用 数が少ない場合は、下の方は余白 数が多い場合は、スクロール
解決策
以下のようにする。
Container(
padding: const EdgeInsets.all(16),
height: double.infinity,
child: Column(
children: [
Expanded(
child: _itemList(),
),
_bottom()
],
)
)
//アイテム一覧
Widget _itemList () => ListView.builder(
shrinkWrap: true,
itemBuilder: (context, index) => Text(
index.toString(),
style: const TextStyle(
fontSize: 16
),
),
itemCount: 100,
);
//最下部に張り付けるWidget
Widget _bottom() => const Text(
"Bottom",
style: TextStyle(
fontSize: 18
),
);
レイアウトとサイズは以下のように決まる
Container(height = doubke.infinity)の高さは画面高さに設定される
Textが画面最下部に配置される
画面からTextのサイズを除いた領域がExpandedに割り当てられる
Expandedの高さがListViewの高さに割り当てられる
Expandedの高さよりリストが長い場合は、スクロールされる
最後に
ColumnのmainAxisAlignmentでやろうとすると上手くいかないです。
こういう場合、「どういう順番でレイアウトとサイズを決めるか」を実際に頭の中で想像していくと解が出たりします。
最新記事
すべて表示やりたいこと TextFieldで入力フォームを作りたい。 例えば入力内容が金額の場合、3桁区切りで頭に¥を付けた表記にしたい。 ただしユーザにこれらを入力させるのではなく、ユーザはあくまで数字を入力するだけで、アプリ側で自動でフォーマットしたい。 方法...
現象 やってること iosシミュレータで画像をデバイスのローカルに保存 保存したパスをデータベースに保存 アプリ立ち上げ時にデータベースから画像パスを取得し、そのパスの画像を画面上に表示 起きている現象 iosシミュレータを再起動した場合、上記3で「ファイルパスが見つからな...
やりたいこと 初期値さえ決まればあとは不変な変数がある ただし、コンストラクタ起動時にはまだ決定できない このような変数について late finalで変数を定義 (何らかのタイミングで)初期化されたかどうかをチェックし、されていなければ値を入れる(チェックしないとfina...
댓글