AppBar は、Flutterにおける画面上部パネルのウィジェットで、Material Designコンポーネントをタイトル、アクション、ナビゲーションボタン、タブで実装します。RowやStackを使ったカスタムパネルとは異なり、AppBarは正しい高さVdp(縮みた状態で40Vdp)と自動的SafeArea処理を備えた完成されたアーキテクチャを提供します。Flutter API Reference (2026)によると、AppBarはSliverAppBarを通じたスクロールアニメーションと、forceMaterialTransparencyパラメータを通じたMaterial3との統合をサポートしています。ティピカルなモバイルアプリでは、AppBarはページタイトル、システムアクション、セクション切り替えを組み合わせたナビゲーションおよび情報のハブとして機能します。
メインポイント
AppBar は、Scaffoldの上部に表示される標準のMaterial上部パネルコンポーネントです。画面タイトル、ナビゲーションボタン(通常は“ハンバーガー”アイコンまたは“戻る”矢印)、アクション(検索、設定、他の機能を開くアイコン)を含みます。AppBarはプラットフォームに応じて自動的に適応します:Androidでは標準のMaterial下部シャドウを使用し、iOSでは透明感のあるフラットなデザインになります。
AppBarはPreferredSizeWidgetインタフェースを実装しており、高さが固定されていて構築前に決定されます。デフォルトでは、縦向きオリエンテーションにおけるAppBarの高さはAndroidで54dp、iOSで44dpで、上部のSafeAreaを考慮しています。この機能により、Scaffoldはレンダリング中の再構成を避けて、bodyの利用可能なスペースを事前に計算できます。
Flutter Material Library Guide (2026)によると、AppBarはいくつかのイテレーションを経てきました:Flutter1.xではテキストを含む単純なコンテナでしたが、Flutter2.xでMaterial3とflexibleSpaceをサポートし、Flutter3.xではSystem UI(ステータスバーの色、透明感)との統合を実現しました。現代のAppBarは、Android12+デバイスでMaterial YouのDynamic Colorをサポートしています。
AppBarは、上部パネルの各部分を制御するパラメータセットを提供します。これらのプロパティを理解することで、カスタムソリューションを作らずに、様々なデザイン要件に対応するためにパネルを柔軟にカスタマイズできます。
| プロパティ | 型 | 説明 |
|---|---|---|
| title | Widget? | パネルの主タイトル。通常は画面名のText |
| leading | Widget? | タイトルの左側のウィジェット(“戻る”ボタンまたはメニューアイコン) |
| actions | List<Widget>? | 右側のアクションウィジェットのリスト(IconButton、PopupMenuButton) |
| bottom | PreferredSizeWidget? | TabBarまたはカスタムウィジェットのための下部領域 |
| flexibleSpace | Widget? | SliverAppBarでスクロール時にアニメートする背景ウィジェット |
| backgroundColor | Color? | パネルの背景色。テーマ色をオーバライド |
| elevation | double | パネル下の影。コンテンツ上に浮かぶ効果を作成 |
| centerTitle | bool? | タイトルの中央揃え(true — Material3の動作、false — Androidスタイル) |
titleプロパティはあらゆるウィジェットを受け付けますが、一般的にはTextStyleを通じたスタイル設定でTextを使用します。長いタイトルの場合は、スペースが不足したときにテキストが正しく切り詰まれるよう、titleをFlexibleでラップすることをおすすめします。leadingプロパティは、明示的に設定されていなければ、Navigator.pushを通じてネスト画面に移動すると、自動的にBackButtonに置き換えられます。
actionsリストには、AppBarの右端に整列されるウィジェットが含まれます。各要素の幅はVdp(Material Design標準)を超えないようにする必要があります。アクションをグループ化するには、PopupMenuButtonを使用します — これにより、重要でないオプションをドロップダウンメニューに隠し、インタフェース密度に関するMaterialの推奨に従います。
AppBarは、色、影、パディングプロパティによって深いカスタマイズをサポートしています。ベースのスタイリングはアプリのテーマから継承されますが、各プロパティは個別にオーバライドできます。主な設定シナリオを見てみましょう。
AppBarの背景色はbackgroundColorで設定されます。指定されていなければ、ThemeDataからのappBarThemeが使用されます。Material3では、AppBarの色はColorScheme.primaryから自動的に計算されますが、特定の画面のためにオーバライドできます。透明なAppBar(プロフィールでよく使用されます)には、elevation: 0とともにbackgroundColor: Colors.transparentを設定します。
elevationプロパティはAppBar下の影を制御します。値0は影を消し、Material3に関連する“フラット”なパネル効果を作ります。値4は標準のMaterial Designの影を与えます。カスタム影制御には、shadowColorを使用します — これはパネルをコンテンツから視覚的に区切る影の色です。
AppBarのテキスト色を制御するには、foregroundColorを使用します。このプロパティは、タイトル、アイコン、actions内のテキストの色に影響します。backgroundColorを変更すると、対照的なforegroundColorが自動的に選択されますが、非標準なデザインのために強制することもできます。
SliverAppBarは、CustomScrollView内で使用するAppBarの拡張で、スクロールアニメーション(縮小、パララックス効果、固定)をサポートしています。標準のAppBarとは異なり、SliverAppBarはsliverウィジェットであり、スクロール位置に応じてサイズを動的に変えることができます。
SliverAppBarの主なモードは、pinned、floating、snapプロパティの組み合わせで決定されます。pinnedモードでは、パネルは常に画面の上部に表示されます。floatingモードでは、戻るようにスクロールすると表示されます。floating + snapの組み合わせは、少し上にスクロールするだけで現れる“くっつく”パネル動作を作り、ニュースフィードでよく使用されます。
Flutter API SliverAppBar (2026)によると、SliverAppBarを使用するには、普通のListViewまたはColumnをsliverウィジェットを含むCustomScrollViewに置き換える必要があります。Scaffoldは正常に動作し続けますが、ScaffoldのappBarプロパティはnullである必要があります — SliverAppBarはCustomScrollView内の最初のsliverとして配置されます。
検索、ドロップダウンメニュー、TabBarを備えたAppBarの例を見てみましょう。このコードは、Flutterのプロダクションアプリにおけるティピカルな上部パネル構成を示しています。
Scaffold(
appBar: AppBar(
title: const Text('カタログ'),
centerTitle: true,
leading: IconButton(
icon: const Icon(Icons.menu),
onPressed: () => Scaffold.of(context).openDrawer(),
),
actions: [
IconButton(
icon: const Icon(Icons.search),
onPressed: () => showSearch(context: context, delegate: ProductSearch()),
),
PopupMenuButton<String>(
onSelected: (String value) {},
itemBuilder: (context) => [
const PopupMenuItem(value: 'settings', child: Text('設定')),
const PopupMenuItem(value: 'about', child: Text('アプリについて')),
],
),
],
bottom: const TabBar(
tabs: [
Tab(text: 'All'),
Tab(text: 'New'),
Tab(text: 'Popular'),
],
),
),
body: const TabBarView(
children: [
AllProductsPage(),
NewProductsPage(),
PopularProductsPage(),
],
),
)
この例では、AppBarに中央揃えされたタイトル、左側のDrawerを開くボタン、右側の検索アイコンとドロップダウンメニューが含まれています。下部のTabBarは、製品カテゴリを切り替えることができます。この構成は、モバイルアプリの大所、つまりナビゲーション、検索、追加オプション、セクション切り替えを、すべて一つの上部パネルでカバーしています。
よくある質問
AppBarの高さは固定(dp)しており、直接変更できません。カスタム高さには、必要な高さのカスタムウィジェットをラップするPreferredSizeを使用します。または、標準パネル機能を失わずに縮みた状態でのサイズを柔軟に管理するために、collapsedHeightを使ったSliverAppBarを使用します。
AppBarコンストラクタでelevation: 0を設定します。これにより、影が消え、パネルが視覚的にフラットになり、Material3のスタイルに合います。完全な制御には、z座標を維持する必要がある場合にelevationを変えずに影の色をオーバライドするために、shadowColor: Colors.transparentを使用します。
AppBarは、Scaffold.appBarに配置される固定高さの静止パネルです。SliverAppBarは、CustomScrollView内で使用され、スクロールに応じて縮小、固定、アニメーションできる動的バージョンです。SliverAppBarは、スクロール動作を柔軟に管理するためのcollapsedHeight、expandedHeight、pinned、floatingプロパティを提供します。
actionsリストに検索アイコンのIconButtonを追加します。タップすると、カスタムSearchDelegateを使ったshowSearchを呼び出し、自動アニメーションで検索画面を開くことができます。または、titleをTextFieldに置き換えて、AppBarをインライン検索バーに変えることもできます。これはカタログやリストに便利です。
デフォルトではcenterTitleはnullで、動作はプラットフォームに依存します:Androidではタイトルが左揃え、iOSでは中央揃えになります。両プラットフォームで強制的に中央揃えするには、centerTitle: trueを明示的に設定します。leadingが原因でタイトルが中央揃えされない場合は、leadingがnullでないことを確認してください — その存在によりタイトルが右に移動します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。