[flutter]初心者用 Layouts in Flutterを学習してみる

image

趣旨

本記事はflutter初心者が公式のドキュメント「Layouts in Flutter」を原文を訳しながら、学習した内容をまとめたものです。

自分と同じようにこれからflutterを学習しようとしている人や、英語読めなくて詰んでいる人の役に立てば良いと思いつつ、備忘録として書いています。

初心者なので、間違っていることを書いている可能性があります。

Layouts in Flutterとは?

flutterの公式ドキュメントであり、flutterのUIを構築する際の基礎的な知識を学習できます。

それでは早速学習していきましょう。

flutterのUIの基礎情報

ポイントは以下3つ

  • WidgetsはUIを構築するクラスである
  • WidgetsはUI,layout両方に使われる
  • 簡単なWidgetを組み合わせて複雑なWidgetを作成していく

下図は簡単なレイアウトの例

下図は上図のlauoutの構造を表した図、青丸が実際に人間に見えているwidgetで赤丸は見えていないwidget。

Containerはpadding,margin,border,背景色などに使われている。

UIを構築してみる

Textを配置してみる

以下のようにTextだけのコードを書いてみると、左上にTextが表示される。

Text以外のwidgetでも同様に左上に表示される

配置を調整する

全てのwidgetには以下の内どちらかの性質を持っている

  • childプロパティを持っている(ex Center or Container
  • childrenプロパティを持っている(ex Row,Column,ListView,Stack

Center widgetを使ってTextを中央寄せすることができる。

下記のコードを見ればわかるが、child要素として指定したTextが中央寄せされる。

アプリの表示方法

  • Flutterアプリはそれ自体がウィジェットであり、ほとんどのウィジェットにはbuild() メソッドがあります。アプリのbuild()メソッドでウィジェットをインスタンス化して返すと、ウィジェットが表示されます

マテリアルデザインに沿ったアプリを表示する場合

Scaffold widgetを使って実装します。

マテリアルデザインアプリ

非マテリアルデザインのアプリを表示する場合

Center widgetを使って実装してください。

非マテリアルデザインの場合AppBar,title,背景色がないので自分で設定する必要があります。

非マテリアルデザインのアプリ

複数のwidgetを水平方向、垂直方向に配置する方法

複数のwidgetを水平、垂直方向に配置する最も一般的な方法はRow,Column widgetを使うことです。

重要なポイントをまとめておきます。

  • Row,Columnは最も一般的なlayoutパターン
  • Row,Columnはchild widgetのリストを持っている
  • child widgetはRow,Columnもしくは他のwidgetである
  • Row,Columnは水平、垂直方向の配置の指定ができる
  • 特定のchild widgetは拡大縮小できる
  • Row,Columnの間隔を指定できる

Rowを使った例

Row

整列の設定方法

mainAxisAlignment,crossAxisAlignment を使用することで、整列の細かな設定ができます。

Row,ColumnでMain,Cross Axisが違うので注意しましょう。

ちなみにmainAxisAlignment,crossAxisAlignment はenum値で設定します。

例)Center

例)SpaceEvenly

ネスト化

widgetの定義を変数に入れることができます。

下記の例ではtextRowという変数にwidgetの定義を書いています。

一般的なレイアウトwidget

flutterにはよりリッチなwidgetがあります。

詳細は Widget catalogに載っていますので、参照してください。

リッチなwidgetは以下の2種類存在します。

  • widgets libraryにあるstandard widgets:非マテリアルappで使える
  • Material libraryにあるspecialized widgets:非マテリアル、マテリアルappで使える

Standard Widgetsの例

Container

細かい仕様は公式ドキュメントを参照してください

特徴は以下の通り

  • ボーダー、padding,マージンを追加できる
  • 背景色や背景イメージを変更できる
  • 一つのchildを持つことができる

Containerの例

こんな感じでTextをContainerで囲ってみると、特に変化はありません。

以下のように白を指定してみると、Textの背景色が白に変化します。

上記の結果か分かるように、Containerの大きさはchildの大きさに合わせて変化します。

childの大きさより大きくしたい場合はpaddingを指定しましょう。

GridView

特徴は以下の通り

  • widgetをgridに配置できる
  • gridViewの大きさを超えてwidgetを配置した際は自動でスクロールできるようにしてくれる
  • gridを自由にカスタムできる

詳細は公式ドキュメントを参照してください。

gridviewの例

こんな感じで使えます。

ListView

特徴は以下の通り

  • 垂直、水平どちらでも配置できる
  • 自動でスクロールバーを追加してくれる
  • Columnより調整できることは少ないが自動でスクロールバーを提供してくれ、使いやすい

詳細は公式ドキュメントを参照ください。

ListViewの例

Stack

特徴は以下の通り

  • 複数のwidgetを重ねて表示するのに使う
  • childに最初に定義されたwidgetがベースwidgetになる
  • スクロールできない

詳細は公式ドキュメントをご覧ください。

Stackの例

ベースwidgetが一番下にきているのが分かると思います。

specialized widgetsの例

Card

特徴は以下の通り

  • 関連する情報を表示するのに使用される
  • スクロールできない

詳細は公式ドキュメントを参照してください。

Cardの例

ListTile

特徴は以下の通りです。

  • 最大3行からなる特別なRow
  • Rowより細かい調整はできないが使いやすい

詳細は公式ドキュメントを参照ください。

ListTileの例

まとめ

以上flutterの基本を学んでみました:)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


error: Content is protected !!