Flutter Widget of the Weekを見たメモ

最近暇なときにFlutterを勉強してるんですが、これできないかなーと思って検索するとだいたいやりたいことができるWidgetがヒットするのですごい。このまま一生検索し続けてもいいが、事前に浅くても網羅的に知っておいた方が楽そうなので、Flutter Widget of the Weekというyoutubeを見ながらWidgetの概要ををメモしていく。

www.youtube.com

SafeArea

ノッチとかにかからない安全な領域にchildを閉じ込めてくれる。Safeにする方向を指定できるんですね...。

Wrap

行をはみ出さないようにいい感じに改行しつつ並べてくれるやつ。chipとかを並べるのに便利らしい。

AnimatedContainer

色とかborder、形みたいなContainerの見た目を変化させた時にinterpolateして自然なアニメーションにしてくれる。

Opacity

透明度を決めるWidget。要素を消したときに隙間を埋めたくないとき、単に消すのではなくOpacityを0にするという風にも使える。AnimatedOpacityというのを使えばこれも自然なアニメーションになる。

FutureBuilder

Futureの状態を見てViewを組み立ててくれる。Loadingアイコンを表示したいときとかに自前で処理を書かなくてもFutureごとこいつに渡すといい感じで表示してくれる。

FloatingActionButton

例のボタン。floatingActionButtonLocationというプロパティで位置を調整できる。

PageView

swipeでページを切り替えることができる。Navigatorで遷移するやつの子のレイヤーの遷移なのかな?

Table

Gridviewみたいなものだけど、スクロールはできない && より細かくレイアウトが指定できる。

SliverAppBar

スクロール位置によって表示/非表示や高さが変わるAppBarかな?CustomScrollViewというやつと一緒に使うみたい。楽しそうなので使ってみたい。

SilverList/SilverList

複数のListView/GridViewを一緒にスクロールさせることができる?遅延読み込みができるのでリストの要素が大量にあるときにも便利。

FadeInImage

ネットワークから画像を表示するときに、placeholderを表示するのに使える。

StreamBuilder

FutureBuilderのStream版かな。streamを渡しておくと決まり切った記述だけでいい感じにviewにしてくれる。ネットワークの状態とかも見られる。

InheritedModel

Providerと同じことを自分でやりたいときに使うと良いのかな?親に状態を持たせておいて子がそれを購読しているとき、子を再ビルドするかを細かい粒度で指定できる。

ClipRRect

render treeに差し込むことで子のborderRadiusを指定できる。ちなみに、同じようなことを他の形でやるClipPathやClipOvalというWidgetもある。

Hero

routes間の遷移で2つのWidgetを紐づけておくとアニメーションでいい感じにしてくれる。

CustomPaint

低レベルなWidget。独自の見た目/動きを持ったWidgetを使いたいときにこいつをextendsして使う。

Tooltip

Widgetをタップしたときに吹き出しをpopupしてくれる...だけでなく、読み上げとかにも対応しているのでアクセシビリティの観点からも良い。

FittedBox

あるWidgetを別のWidgetにfitさせたいときに使う。fitのさせ方は色々選べる。

LayoutBuilder

バイスの大きさ/向きによって表示するWidgetを出し分けたいときに使うのかな?

AbsorbPointer

すべての配下のWidgetについてタッチを無効にする。

Transform

いろいろなWidgetの形を変えたり、移動させたり、角度を変えたりできる。こいつを使うと3Dっぽいやつも含めていい感じのアニメーションが作れそう。

BackdropFilter

ImageFilterを適用するためのWidget。ぼかしたり歪ませたりなどの画像の加工ができる。Stackと合わせて使う(他のWidgetの上にかぶせる)と良い。

Align

Widgetの配置を決めるやつ。Centerのカスタムできる版みたいな感じ。

Positioned

Stackの中でWidgetの配置を細かく決めたいときに使う。top/bottom/left/right/height/widthがプロパティにあってcssのように位置が指定できる。

AnimatedBuilder

アニメーションを行う方法の1つ。animationとchildを渡すとアニメーションしてくれる。

Dissmissible

リストの要素を横にswipeして消すときに使えるやつ。方向を指定できるのでswipeの方向の左/右によって操作を変えることも可能。

SizedBox

Widgetを特定のサイズにしたいときに使う。SizedBox.expandを使うと可能な限り大きくなるWidgetを作れる。2つのWidget間に決まったスペースを作りたい場合にPadding/Marginではなく空のSizedBoxを置くこともある。

Draggable

ドラッグ&ドロップの実装に使う。ドロップ先にはDragTargetを置いておく。ドロップ時に何が起こるかはDragTarget側に指定する。

AnimatedList

リストの要素を削除したり編集したりするとき、急に表示が変わると何が起こったのかわからないことがある。AnimatedListにanimationを渡すことでいい感じにしてくれる。

Flexible

flex値を指定しておくと親の大きさに合わせていい感じにスペースを占有してくれる。Expandedとの違いは、余白を完全に埋めないことができることらしい。

flutterで均等にwidgetを並べる|Captain_PAG|note

MediaQuery

バイスに関する情報を取得してくれる。画面サイズや文字サイズ、アニメーションを有効化してるかなど。

Spacer

Row/Columnの要素の間に差し込むことで並び方をカスタムできる。flexプロパティを指定できる。

AnimatedIcon

animationを渡すことでiconをアニメーションで変化させることができる。

AspectRatio

Widgetを特定のアスペクト比で表示したいときに使う。Expandedのchildとして使うとうまく動かないが、間にAlignを挟むことでちゃんとアスペクト比が保たれるようになる。

LimitedBox

Containerのように親がサイズを指定するWidgetは、子のサイズを指定しないWidgetの子になるとうまく動かない。このときにLimitedBoxを使ってサイズの最大値を指定しておくと良い。親がサイズを指定してきた場合にはLimitedBoxは何もしない。

Placeholder

placeholderです。何も指定しなければ可能な限り余白を埋める。

RichText

1行のテキストの中でTextStyleを変えたいときにはRichTextのchildをTextSpanにするとできる。文中にリンクを差し込みたいときとかにも使える。

ReorderableListView

ドラッグ&ドロップで要素の順番を変えることができるリスト。

AnimatedSwitcher

あるWidgetを別のWidgetに置き換えたいときに使う。例えばAnimatedSwitcherのchildを変数にしておいて、setStateでchildに代入すればFadeアニメーションでWidgetを入れ替えてくれる。遷移のアニメーションは好きなようにカスタムできる。

AnimatedPositioned

paddingをアニメーションで変えることができる。curve/durationを指定して動きをカスタムできる。

IndexedStack

表示するWidgetを切り替えたいときに使う。切り替えたときに状態を保存しておいてくれる。タブ切り替えとかに使うのかな?

Semantics

Widgetにメタ情報を足すためのWidget。足した情報はアクセシビリティツールや検索エンジンが使う。

ConstrainedBox

Widgetのサイズの最大値や最小値を決める。

AnimatedOpacity

WidgetをFade in/Fade outさせることができる。これを使ったより高レベルなWidgetにFadeTransitionがある

FractionallySizedBox

サイズを親Widgetに対する割合で指定することができる。

DataTable

いい感じの表を作れる。項目でソートできたりする。

Slider

スライダーです。RangeSliderで両端をスライドさせて範囲を選べるようにできる。

AlertDialog

alertです。警告を表示するだけでも良いし、ユーザアクションを取らせることもできる。showDialogで描画する。iOS風にしたければCupertinoAlertDialogを使う。

DefaultTabController & TabBar

タブ切り替えを作れるやつ。