FlutterFlow

FlutterFlow カスタムウィジェットの作り方と活用ガイド

ⓘ本ページはプロモーションが含まれています

スポンサードリンク

カスタムウィジェットの概要と公式サポート

FlutterFlow では、標準パレットにない UI コンポーネントやロジックを Dart コードで実装 し、アプリ内へ組み込むことができます。これを「カスタムウィジェット」と呼び、公式ドキュメントでも Custom Widgets として明示的にサポートされています【FlutterFlow Documentation: Custom Widgets】[^1]。

本セクションでは、なぜカスタムウィジェットが必要か、そして 全プランで利用可能なのは事実だが機能面の差異があること を簡潔にまとめます。

  • ビジュアルエディタだけでは表現できない高度なグラフ・ゲームロジック
  • ノーコードとコードベースをハイブリッドに活用できる柔軟性
  • プラン別のビルド回数制限が作業効率に与える影響

必要な事前準備

カスタムウィジェット作成は、環境設定が整っていないと途中で手間が増えてしまいます。ここでは アカウント取得 → プロジェクト作成 → プラン確認 → 基本的な Dart 知識 の4ステップを順に解説します。

1. アカウント取得

FlutterFlow の公式サイト(https://flutterflow.io)からメール認証で無料アカウントを作成します。登録後はダッシュボードへ即座にアクセス可能です。

2. プロジェクトの新規作成

Dashboard の Create New Project をクリックし、テンプレートか空白プロジェクトを選択します。名前・対象プラットフォーム(iOS / Android / Web)を設定すれば、基本的な開発環境が完成します。

3. プランの確認とビルド回数制限

プラン 月間クラウドビルド上限* 主な特徴
Free 10 回 カスタムコード利用可、ビルド回数に制限あり
Pro 無制限 ビルド回数無制限+チーム共有機能
Team 無制限 Pro の機能に加え、ロールベースの権限管理

*2025 年 4 月時点の公式プラン情報(FlutterFlow Pricing)[^2]。Free プランは 月間 10 回 が上限であり、頻繁にテストする場合は Pro または Team へのアップグレードが推奨されます。

4. 基本的な Dart 知識

カスタムウィジェットは Dart で記述します。最低限以下の構文を把握しておくとスムーズです。

  • 変数宣言 (var, final)
  • 関数定義 (Widget build(BuildContext context))
  • クラス継承 (class MyWidget extends StatelessWidget)

ビルド回数制限とプラン比較(最新情報)

Free プランのビルド上限は 月間 10 回 と公式に明記されていますが、過去のブログ記事や非公式情報では「5 回」や「15 回」といった表記が混在していました。誤解を防ぐため、最新プランページ(2025 年 4 月更新)を直接参照してください【FlutterFlow Pricing】[^2]。

ポイント
- ビルド回数は「クラウドビルド」のみ対象です。ローカルで flutterflow_cli を使ったテストはカウントされません。
- Free ユーザーは ローカルデバッグ を活用し、クラウドビルドの回数を節約する戦略が有効です。


カスタムウィジェット作成フロー

以下では、公式ガイド(2025 年 8 月版)と実務で広く利用されている AI 補助ツール GeminiCursor の活用例を交えて、ステップバイステップで解説します。なお、Gemini と Cursor は FlutterFlow が公式に統合しているわけではなく、外部 AI アシスタントとして提供されている ことに留意してください(詳細は各サービスの利用規約をご参照)[^3][^4]。

ステップ① ウィジェット名と概要を設定する

カスタムウィジェット画面で「Add New」をクリックし、以下項目を入力します。

  1. Widget Name – プロジェクト内で一意になる名前(例: HelloWorldWidget
  2. Description – 簡潔な概要(例: 「センターに Hello World を表示」)

これだけでコードエディタが自動的に開き、次の工程へ進めます。

ステップ② Gemini で雛形コードを生成

Gemini は Google が提供する大規模言語モデルです。FlutterFlow の UI に AI Assist ボタンはありませんが、外部ブラウザや VS Code 拡張機能から呼び出すことができます。

  • 利用手順
  • Gemini の Web コンソールまたは拡張機能を起動
  • プロンプト例:

    Dart で StatelessWidget を作成してください。センターに "Hello World" と表示するだけです。

  • 出力されたコードをコピーし、FlutterFlow のカスタムウィジェットエディタに貼り付けて Save

生成されるコード例は以下の通りです(実際には最新 Flutter SDK に合わせたインポートが自動で含まれます):

注意
Gemini の出力はあくまで「提案」なので、必ず コードの整合性とセキュリティ を自分で確認してください。

ステップ③ Cursor で微調整・デバッグ

Cursor(cursor.com)は AI がコンテキストを保持したままリアルタイムでコード補完・修正を行えるエディタです。FlutterFlow のカスタムウィジェット画面から Edit with Cursor を選択すると、ブラウザ内に統合されたエディタが立ち上がります。

  • 代表的な利用例:インベーダーゲーム風ロジックの追加
  • プロンプト: 「敵キャラが左右に往復し、画面端で向きを変えるロジックを実装してください」
  • Cursor が生成した AnimationControllerTimer.periodic を受け入れ、Save

このとき得られるコードは以下のようになります(抜粋):

ポイント
- Cursor の提案は コードコンテキストを保持 しているため、手動で検索・貼り付けするよりエラーが少ないです。
- 提案内容は必ずローカルでビルド・プレビューし、期待通りに動作するか確認してください。

ステップ④ 外部パッケージのインポートとバージョン管理

カスタムウィジェットで charts_flutter など外部ライブラリを使う場合は、Package Manager から依存関係を追加します。

  1. カスタムコード画面 → Add Dependency ボタン
  2. パッケージ名(例: charts_flutter) を検索し、最新安定版(2025 年 10 月時点で ^0.12.0)を選択

自動的に pubspec.yaml に以下が追記されます:

注意:古いバージョンを手動で指定すると、Flutter SDK と衝突しビルドエラーになる可能性があります。常に公式が推奨する 最新安定版 を使用してください。

ステップ⑤ プレビューとコンパイルチェックポイント

保存後は右上の Preview ボタンでウィジェットを即座に確認できます。エラーが出た場合は Compile Log から原因を特定します。

チェック項目 確認方法
Missing import ログに Undefined name が表示されていないか
State dispose の有無 StatefulWidgetdispose() が呼び出されているか
パッケージ警告 pubspec.yaml のバージョン警告が出ていないか

例として、AnimationController を忘れて dispose() しなかった場合は Memory leak 警告がコンソールに表示されます。該当行を追加すれば解消できます。

ステップ⑥ ページへの配置とプロパティ設定

カスタムウィジェットはデザイン画面の左側パネルからドラッグ&ドロップで配置できます。さらに 入力プロパティ を設定すると、同一ウィジェットを異なるページや条件で再利用しやすくなります。

  1. Custom Widgets パネル → 作成したウィジェットを選択
  2. 任意のページに配置し、サイズ・位置を調整
  3. Properties タブでプロパティを追加(例: speed (double)、color (Color))

プロパティを設定すると、デザイン画面上にスライダーやカラーピッカーが自動生成され、リアルタイムでプレビューが更新されます。


デバッグとトラブルシューティング

アセット関連エラーの対処法

  • SVG・フォントassets/ に配置したら、必ず pubspec.yamlflutter: セクションにパスを記述(インデントは 2 スペース)

  • 変更後は Full Rebuild(左上メニューの Recompile)を実行して確実に反映させます。

よくあるエラーと対策一覧

エラー 主な原因 推奨対策
Undefined name 'Chart' パッケージ未インポート import 'package:charts_flutter/flutter.dart' as charts; を追加
setState が呼ばれない タイマー外部で状態更新 if (mounted) setState(() {}); を使用
アセットパスが見つからない pubspec.yaml のインデントミス 2 スペースインデントで正しく記述

ログ取得と活用法

  1. プレビュー画面右上の Console アイコン → Show Logs
  2. コード内に print('debug: $variable');debugPrint() を入れると、リアルタイムで出力が確認できる

ログはエラー解析の第一手段です。特に ビルド失敗時 はコンパイルロジックや依存関係の問題が多いため、最初にログをチェックしてください。


再利用・チーム共有のベストプラクティス

テンプレート化して保存

カスタムウィジェット画面右上の Save as Template をクリックし、テンプレート名を付けて保存します。プロジェクト内の「Templates」タブからいつでも呼び出せるため、チーム全体で UI の統一感が保たれます。

バージョン管理と Git 連携

重要なウィジェットは FlutterFlow CLIflutterflow_cli)を使ってローカルにエクスポートし、GitHub にプッシュすると変更履歴が追跡できます。タグ付けやブランチ運用で以下のようなフローがおすすめです。

チーム内共有のポイント

  • 権限設定:Team プランではロールベースで編集権限を細分化できるため、コードレビュー担当者だけがウィジェットを更新できるようにする。
  • ドキュメント化:各ウィジェットの使用方法・プロパティ一覧を Markdown か Notion に残しておくと、新メンバーでもすぐに利用可能。

次に取るべきアクション

  1. Hello World ウィジェット を作成し、プレビューで動作確認。
  2. charts_flutter パッケージを追加し、円グラフウィジェットを実装。
  3. 必要に応じて Gemini でコード雛形を生成し、Cursor でロジックや UI の微調整を行う。
  4. 完成したウィジェットはテンプレート化し、チーム共有リポジトリへプッシュしてバージョン管理を開始する。

これらの手順を踏めば、FlutterFlow で コード生成からデバッグ・再利用まで一貫したフロー が構築でき、プロジェクト全体の開発効率が大幅に向上します。


参考文献

[^1]: FlutterFlow Documentation – Custom Widgets. https://docs.flutterflow.io/custom-widgets (accessed 2025-04-28)
[^2]: FlutterFlow Pricing. https://flutterflow.io/pricing (accessed 2025-04-28)
[^3]: Gemini AI – Google Cloud. https://cloud.google.com/vertex-ai/generative-ai/docs/start (accessed 2025-04-27)
[^4]: Cursor – AI‑powered code editor. https://cursor.com (accessed 2025-04-27)


スポンサードリンク

-FlutterFlow