今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

Flutterコンポーネントの基本——GridView

Flutter コンポーネントの基本 ——GridView#

GridView はグリッドレイアウトで、iOS の UICollectionView に似ており、各行のアイテム数、個々のオブジェクトのアスペクト比、オブジェクトの水平方向の間隔、垂直方向の間隔などを設定できます。

GridView の一般的な属性#

  • GridView
    • scrollDirection: スクロール方向
      • Axis.horizontal: 水平方向にスクロール
      • Axis.vertical: 垂直方向にスクロール、デフォルトはこれです。
    • padding: GridView の親ビューに対するマージン
    • crossAxisCount: 各行のアイテム数
    • mainAxisSpacing: スクロール方向に垂直な方向の間隔、例:横方向にスクロールする場合、これは垂直方向のオブジェクト間の間隔を表します;
    • crossAxisSpacing: スクロール方向に平行な方向の間隔、例:横方向にスクロールする場合、これは水平方向のオブジェクト間の間隔を表します;
    • childAspectRatio:個々の要素のアスペクト比(または高幅比)、scrollDirection が vertical の場合、アスペクト比を表します;scrollDirection が horizontal の場合、高幅比を表します。

簡単な使用法#

コードは以下の通りです:


class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'GridViewウィジェット',
        home: Scaffold(
          body: GridView.count(
            scrollDirection: Axis.vertical,
            childAspectRatio: 2,
            padding: const EdgeInsets.all(40.0),
            crossAxisSpacing: 10.0,
            mainAxisSpacing: 20.0,
            crossAxisCount: 2,
            children: <Widget>[
              Container(
                padding: const EdgeInsets.all(8),
                child: const Text("彼はあなたをすべて解きほぐすでしょう"),
                color: Colors.teal[100],
              ),
              Container(
                padding: const EdgeInsets.all(8),
                child: const Text('群衆に注意を払うな'),
                color: Colors.teal[200],
              ),
              Container(
                padding: const EdgeInsets.all(8),
                child: const Text('叫び声の音だが'),
                color: Colors.teal[300],
              ),
              Container(
                padding: const EdgeInsets.all(8),
                child: const Text('叫ぶ者たち'),
                color: Colors.teal[400],
              ),
              Container(
                padding: const EdgeInsets.all(8),
                child: const Text('革命が来ている...'),
                color: Colors.teal[500],
              ),
              Container(
                padding: const EdgeInsets.all(8),
                child: const Text('革命、彼らは...'),
                color: Colors.teal[600],
              ),
            ],
          ),
        ));
  }
}

効果は以下の通りです:

image

動的リスト#

コードは以下の通りです:



class MyGridView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GridView.builder(
        padding: EdgeInsets.all(40.0),
        scrollDirection: Axis.horizontal,
        gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 2,
            mainAxisSpacing: 20.0,
            crossAxisSpacing: 10.0,
            childAspectRatio: 2.0),
        itemCount: 6,
        itemBuilder: (BuildContext context, int index) {
          return Card(
            color: Colors.amber,
            child: Center(
              child: Text('$index'),
            ),
          );
        });
  }
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: new AppBar(
          title: new Text('GridViewビルダー'),
        ),
        body: MyGridView(),
      ),
    );
  }
}

効果は以下の通りです:

image

参考#

GridView Dev Doc
Flutter 無料動画第 2 シーズン - 一般的なコンポーネント

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。