 いちの
いちのこんばんは〜
弊社ブログに辿り着いていただきありがとうございます!
株式会社メモリアインクのいちのです
この記事を読んでわかること
- カード(Card)ウィジェットの押下処理の基本的な実装方法
- 商品リストをカードで表示する方法
- カードをタップして商品詳細画面へ遷移する処理の実装方法
開発環境
- Dart 3.0.0
- Flutter 3.10.0
カード(Card)ウィジェットの押下処理の実装
概要
カードウィジェットは非常に便利で、リスト表示や情報カードなど、様々な場面で使用されます。ここでは、カードをタップした際にログを出力する簡単な例から始めてみましょう。
サンプルコード
import 'package:flutter/material.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('カードの押下処理デモ'),
        ),
        body: CardWidget(),
      ),
    );
  }
}
class CardWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: InkWell(
        onTap: () {
          print('カードがタップされました!');
        },
        child: Card(
          child: Container(
            width: 300,
            height: 100,
            child: Center(
              child: Text('タップしてください'),
            ),
          ),
        ),
      ),
    );
  }
}サンプルコードの解説
- 4行目: アプリケーションのエントリポイントを定義します。
- 7-19行目: MyAppクラスでアプリケーションの基本的な構造を定義します。Scaffoldウィジェット内にAppBarとCardWidgetを配置しています。
- 21-41行目: CardWidgetクラスでは、Centerウィジェットを使って中央に配置されたCardを表示します。InkWellウィジェットを使うことで、カードにタップ処理を追加しています。
- 26行目: onTapメソッドでカードがタップされた時のアクションを定義しています。ここでは、コンソールにログを出力します。
- 29-37行目: Cardウィジェット内にテキストを表示するためのContainerを配置しています。このContainerはカードのサイズを定義し、中央にテキストを配置しています。
表示確認



それでは、表示を確認してみましょ〜


Containerのカスタマイズ方法にご興味のある読者様。以下の記事で分かりやすく丁寧に解説しておりますので、ぜひご一読いただけますと幸いです。


商品リストのカード表示
概要
リスト内の商品をカード形式で表示する方法について解説します。ここでは、ListView.builder を使用して、リスト内の各商品に対してカードを動的に生成します。
サンプルコード
import 'package:flutter/material.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('商品リスト'),
        ),
        body: ProductList(),
      ),
    );
  }
}
class ProductList extends StatelessWidget {
  final List<String> products = ['商品1', '商品2', '商品3', '商品4'];
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: products.length,
      itemBuilder: (context, index) {
        return Card(
          child: ListTile(
            title: Text(products[index]),
            onTap: () {
              print('${products[index]}がタップされました');
            },
          ),
        );
      },
    );
  }
}サンプルコードの解説
- 21行目: ProductListクラスで商品リストを定義しています。
- 22行目: 商品データを格納するリスト productsを定義しています。
- 26-38行目: ListView.builderを使用して、リスト内の各商品に対してカードを動的に生成します。itemCountにはproductsリストの長さを指定し、itemBuilderで各商品の表示方法を定義します。
- 29-36行目: 各商品を表示するための Cardウィジェットを生成します。ListTileを使用して商品名を表示し、onTapイベントでタップ時の処理を定義しています。
表示確認



それでは、表示を確認してみましょ〜


商品詳細画面への遷移
概要
カードをタップした際に、商品の詳細画面へ遷移する方法について解説します。Flutterでは、Navigator ウィジェットを使用して画面遷移を管理します。
サンプルコード
import 'package:flutter/material.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('商品リスト'),
        ),
        body: ProductList(),
      ),
    );
  }
}
class ProductList extends StatelessWidget {
  final List<String> products = ['商品1', '商品2', '商品3', '商品4'];
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: products.length,
      itemBuilder: (context, index) {
        return Card(
          child: ListTile(
            title: Text(products[index]),
            onTap: () {
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) => ProductDetail(products[index])),
              );
            },
          ),
        );
      },
    );
  }
}
class ProductDetail extends StatelessWidget {
  final String product;
  ProductDetail(this.product);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(product),
      ),
      body: Center(
        child: Text('こちらは$productの詳細ページです'),
      ),
    );
  }
}サンプルコードの解説
- 45-61行目: ProductDetailクラスでは、商品の詳細画面を定義しています。コンストラクタで商品名を受け取り、アプリバーのタイトルとして表示します。
- 30-38行目: 商品リストの各 ListTileがタップされたときにNavigator.pushメソッドを使用して、商品詳細画面へ遷移します。MaterialPageRouteを用いて遷移先のウィジェットを指定しています。
動作確認



それでは、動作を確認してみましょ〜


リスト内の要素の追加や削除についてご興味のある読者様。以下の記事で分かりやすく丁寧に解説しておりますので、ぜひご一読いただけますと幸いです。


まとめ
いかがでしたでしょうか?今回は、カード(Card)ウィジェットの押下処理の実装からリスト内商品をタップして商品詳細画面へ遷移する方法について、サンプルコードを用いて解説してみました。読者様の開発の手助けに少しでもなればいいなと思いこの記事を書かせていただいております。弊社ではAndroid、iOS、Flutterを使ったアプリ開発についてのブログを多数投稿させていただいておりますので、ご興味のある方はぜひ!



自分の成長を加速させるチャンスがどこかにあるかもしれません。
変化を恐れずに新たな環境に飛び込む勇気のある方は、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】





 
			







コメント
コメント一覧 (2件)
[…] 【Flutter】カード(Card)ウィジェットの押下処理の実装からリスト内商品をタ… […]
[…] 【Flutter】カード(Card)ウィジェットの押下処理の実装からリスト内商品をタ… […]