この記事は
CA21 Advent Calendar 2020 の17日目の記事です.
私はAndroidアプリ開発を始めてまだ1年ちょっとですが,最近はiOSアプリも同時に開発したくなることが多々ありFlutterを用いた開発を行っています.
Flutterは比較的簡単ということもあり,手を出している人も多いと思いますが,私がFlutter開発していて便利だなや,Androidアプリ開発のデファクトスタンダードなライブラリと似ていてよく使われてそうだなと思うpackageをまとめたいと思います.
僕が普段Androidをやっているということもあり,Android関連の技術と比較した説明が多めです.
アーキテクチャ
Flutterのアーキテクチャに関してはAndroidに比べるとまだ戦国時代みたいな感じがします.自分もFlutterを始めて半年くらいしか経っていませんが3つほどアーキテクチャに関してはこれが良さそうというふうに変わってきている気がします.
provider
Remi Rousseletさんによって開発されたpackageです.StatefulWidgetを使ってWidgetと状態管理クラスを混ぜ合わせて状態が変わったタイミングでWidgetを更新していたものを,ViewModelをつくるようにWidget(View)と実際の状態管理している部分(ViewModel)を分けて記述できるようになります.状態管理するクラスをDIするためにも使われます.
ChangeNotifierと組み合わせて使われることも多く見ます.
state notifier
こちらもRemi Rousseletさんによって開発されたpackageです.ChangeNotifierとProviderを使った開発では状態を更新する際に notifyListeners()
呼ぶ必要がありましたが,StateNotifierではそれが不要です.また,ChangeNotifierとProviderではAndroidで言うViewModelのような構成でLiveDataとそれを更新するロジックが同一のクラスに属していましたが,StateNotifierではLiveDataだけが属するimmutableなクラスとそれを更新するクラスを完全に分離することができます.
freezed
こちらもRemi Rousseletさんによって開発されたpackageです.StateNotifierで値を更新する際に毎回状態そのものを持っているimmutableなクラスを生成して更新していた手間をシュッとかけるようにしてくれます.
riverpod
こちらもRemi Rousseletさんによって開発されたpackageです.providerの上位互換みたいなものです.グローバル変数としてproviderを宣言できるようになって従来のproviderのBuildContextの依存がなくなりとても使いやすくなりました.
flutter hooks
React HooksのFlutterバージョンのようなものです.riverpodと一緒に使われることが多いイメージです.
ローカルDB
これに関しては@kabochapoさんがわかりやすくまとめた記事があるのでそちらを参照してもらいたいと思います.
通信周り
dio
AndroidのOkhttpっぽくかけるHTTPクライアントpackageみたいです.
retrofit
名前の通り,Androidでよく使われるRetrofitにインスパイアされたFlutter版です.
その他
image picker
端末内に保存されている画像を選択して取ってくるやつを作れるやつです.
url launcher
URLをWebViewで表示するようにしたり,ブラウザアプリで表示するようにしたり,事前に定められているフォーマット通りにURLを記述すれば端末内にインストールされているTwitterアプリなどに飛ばしてくれるやつを作れます.
intl
日付や数字などアプリをグローバル化してくれるpackageです.
おわり
私もまだFlutterに手を出して日が浅いので,「こんなのもあるよ」みたいなpackageあれば教えて下さい.
PR
内定先のCyberAgentでは22卒のエンジニア採用を行っています!