Flutter

ListViewウィジェットに余白を設定するときの違い

はじめに

Flutterにて、ListViewウィジェットを使用する際に、余白を設定する位置によって表示が変わりました。
この記事では、余白の設定の位置によって、どのような表示になるのかまとめます。

余白を設定する位置について

ListViewウェジェットの親にPaddingウィジェットを配置する

ListViewウィジェットの親にPaddingウィジェットを配置すると、ListViewウィジェットの外側に余白が設定されることになります。

これは、スクロール可能領域の外側に余白ができるため、スクロール可能領域にテキスト等があると、見切れる形で表示されます。

ListViewウィジェットのコンストラクタにて、paddingパラメーターに設定する

ListViewのコンストラクタにて、paddingというパラメーターが準備されています。
このパラメーターに設定することで、ListViewウィジェットの内側に余白が設定されることになります。

これは、スクロール可能領域の内側に余白ができるため、スクロール可能領域にテキスト等があっても、見切れることはありません。

実装例

ListViewウェジェットの親にPaddingウィジェットを配置する

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text('Test'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(20.0),
        child: ListView(children: const [
          Text('testtesttest'),
          // ...(スクロールできるくらいのウィジェット)
        ]),
      ),
    );
  }
}

ListViewウィジェットのコンストラクタにて、paddingパラメーターに設定する

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text('Test'),
      ),
      body: ListView(
        padding: const EdgeInsets.all(20.0),
        children: const [
          Text('testtesttest'),
          // ...(スクロールできるくらいのウィジェット)
        ],
      ),
    );
  }
}

まとめ

ListViewは、余白の設定方法によって、表示が変わります。

上手く使いこなして、ユーザービリティの高い画面を開発しましょう!

参考文献

https://api.flutter.dev/flutter/widgets/ListView-class.html

-Flutter
-, , , ,