Flutterでグリッドレイアウトを実現できるパッケージ「flutter_staggered_grid_view」

今回は「flutter_staggered_grid_view」というパッケージについて紹介します。

Flutterのパッケージ「flutter_staggered_grid_view」について、簡単に説明をまとめてください。また、コードの使用例も提示してください。

「flutter_staggered_grid_view」は、Flutterで不均等なグリッドレイアウトを作成するためのパッケージです。通常の「GridView」とは異なり、異なるサイズのセルを持つグリッドレイアウトを簡単に作成できます。これ使うことで、Pinterestのような不均一なカラムのグリッド表示が可能になります。

特徴としては以下が挙げられます。

・アイテムごとに異なる高さや幅を設定でき、動的に変化するコンテンツにも対応します。

StaggeredGridView.countStaggeredGridView.builderの2種類のグリッド表示方法があります。

・カスタムレイアウトやカスタムサイズのアイテムを簡単に扱えます。

実装例

import 'package:flutter/material.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Grid Example")),
        body: StaggeredGridViewExample(),
      ),
    );
  }
}

class StaggeredGridViewExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StaggeredGridView.countBuilder(
      crossAxisCount: 4, // 横の列数
      itemCount: 10, // アイテム数
      itemBuilder: (BuildContext context, int index) {
        return Card(
          color: Colors.blue[(index + 1) * 100],
          child: Center(
            child: Text(
              'Item $index',
              style: TextStyle(color: Colors.white, fontSize: 16),
            ),
          ),
        );
      },
      staggeredTileBuilder: (int index) {
        // 偶数は2×1、奇数は1×1のタイル
        return StaggeredTile.count(
          index.isEven ? 2 : 1, // 幅
          index.isEven ? 1 : 1, // 高さ
        );
      },
      mainAxisSpacing: 4.0, // アイテム間の縦スペース
      crossAxisSpacing: 4.0, // アイテム間の横スペース
    );
  }
}

StaggeredGridView.countBuilderを使用して、クロス軸の列数(crossAxisCount)とアイテムのレイアウトを指定します。

itemBuilderで表示するウィジェット(この例ではCard)を構築します。

staggeredTileBuilderで各アイテムのレイアウト(横幅、高さ)を定義します。ここでは偶数インデックスのアイテムを2列分の幅に、奇数インデックスのアイテムを1列分に設定しています。

mainAxisSpacingcrossAxisSpacingでアイテム間のスペースを調整しています。

このパッケージは、デザインを柔軟にカスタマイズしたい場合に非常に有用ですので、ぜひ使ってみてください。

タイトルとURLをコピーしました