【flutter】 実際に使ってわかった便利なライブラリ20選！

# はじめに

Flutterはいろいろなライブラリがあってどれを使えばいいのか困ると思います。
そこで、実際に使ってみてとても便利だと思ったライブラリを紹介します。
アプリの仕様に依存しないライブラリを多めに選んでみたので是非参考にしてください。

# 必須

## 1. riverpod

状態管理のライブラリです。
とても人気で便利なライブラリなので入れておいて損はないと思います。
ただ状態を管理するだけではなくて、依存関係にある状態を自動で更新したり、キャッシュしておいたりしてくれるのでパフォーマンスも良くなります。

https://pub.dev/packages/riverpod



## 2. flutter_hooks

React hooksのように`useState`や`useEffect`などの関数を使えるようになります。
Stateが更新されたタイミングでの描画更新、Widgetが破棄されたタイミングでの適切なStateの破棄なども自動で実施してくれるのでコード量が少なくなります。
React経験者にはもちろんですが、React未経験者にも是非使ってみてほしいライブラリです。

https://pub.dev/packages/flutter_hooks

## 3. freezed

クラスに便利なメソッドを自動で実装してくれるライブラリです。
インスタンスを複製するための`copyWith`メソッドや文字列に変換する`toString`、Jsonオブジェクトに変換する関数などを自動で実装してくれます。
最初は必要性が理解できないかもしれないですが、わかると非常に便利です。

https://pub.dev/packages/freezed

## 4. collection

配列に対して使える便利な関数を増やしてくれるライブラリです。
たとえば、標準で組み込まれている`firstWhere`を拡張した`firstWhereOrNull`があります。
`firstWhere`では要素が見つからなかったときにエラーが発生しますが、`firstWhereOrNull`ではエラーが発生せずに`null`を返してくれます。(`firstWhere`でも`orElse`に見つからなかったときの処理をかけますが面倒です。)
```dart
// Uncaught Error: Bad state: No element
[2].firstWhere((e)=>e==1)

// null
[2].firstWhereOrNull((e)=>e==1)
```

こんな感じの便利関数の詰め合わせです。

https://pub.dev/packages/collection

## 5. go_router

画面遷移のライブラリです。
Flutter公式なのでとりあえずこれを使っておけばいいと思います。

https://pub.dev/packages/go_router

# 便利

## 6. flutter_native_splash

スプラッシュ画面（アプリ起動時に表示される画像）をコマンド一発で実装できます。

https://pub.dev/packages/flutter_native_splash

## 7. flutter_launcher_icons

アプリのアイコンコマンド一発で実装できます。

https://pub.dev/packages/flutter_launcher_icons

## 8. keyboard_actions

なぜかiOSで数字キーボードを表示すると閉じられないので、`Close`ボタンを追加してくれるライブラリです。
↓の画像の「↑」「↓」と「CLOSE」のところを追加してくれます。

![スクリーンショット 2023-12-02 17.31.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/fd5a57b4-d4e6-4926-4dba-a2ef95204972.png)


https://pub.dev/packages/keyboard_actions

## 9. isar

データベースライブラリです。`Rust`で実装されており、非常に高速に動作します。
NoSQLなのでSQLにくらべて検索に弱いですが、今後公開される予定の`v4`では強化されそうです。

https://pub.dev/packages/isar


# 用途は限られるが便利

## 10. flutter_local_notifications

通知を表示するためのライブラリ。

<img width="200px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/788a87f1-a3c4-f186-ccd9-7329e693976b.png">


https://pub.dev/packages/flutter_local_notifications

## 11. fl_chart

グラフ表示のためのライブラリ。
円グラフ、棒グラフなど一通り揃っています。

https://pub.dev/packages/fl_chart



## 12. webview_flutter
WebViewを表示するためのライブラリ。

https://pub.dev/packages/webview_flutter


## 13. permission_handler

アプリの権限（位置情報やカメラなど）を管理するためのライブラリ。
現在の権限状態の取得だけではなくて要求もできる。

https://pub.dev/packages/permission_handler

## 14. tutorial_coach_mark

いい感じのチュートリアルを実装できるライブラリ。
カスタマイズ性も高くて使いやすい。

<img width="200px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/6afce954-41d9-dfc2-bfbf-9303522d1e41.gif">


https://pub.dev/packages/tutorial_coach_mark

## 15. firebase系
若干設定がめんどくさいですが、`firebase_analytics`(分析)と`firebase_crashlytics`(クラッシュレポート)は無料なので入れておいたほうがいいと思います。

https://pub.dev/packages/firebase_analytics

https://pub.dev/packages/firebase_crashlytics

# テスト

## 16. mocktail
モック化を簡単にできるライブラリ。
Riverpodで[override](https://riverpod.dev/ja/docs/essentials/testing#mocking-providers)できるようにしておくと完璧です。

https://pub.dev/packages/mocktail

## 17. golden_toolkit

Golden Test(画像比較テスト)を簡単に実装できるライブラリです。
差分が発生したときにはエラーが発生して差分画像が出力されるので、レイアウト崩れをすぐに見つけることができます。
また、様々なデバイスサイズでの画像も出力できます。

https://pub.dev/packages/golden_toolkit

# その他

## 18. derry
よく実行するコマンド類を`pubspec.yaml`に記載しておいてショートカットコマンドを作成できるライブラリです。
例えば、ビルドのたびに`dart run build_runner build --delete-conflicting-outputs`と入力しなければいけないですが、以下のように記載しておくと`derry build`で実行できるようになります。

```yaml:pubspec.yaml
scripts:
  build: dart run build_runner build --delete-conflicting-outputs
```

https://pub.dev/packages/derry

## 19. pedantic_mono

コードの保守性や可読性向上のためのルールを追加してくれるパッケージです。
よくない書き方をするとエラーとして表示されるようになります。

https://pub.dev/packages/pedantic_mono


## 20. logger

ログ用のライブラリです。
以下の画像のようにカラフルに表示してくれたり、ログを出力する条件（リリースビルド以外など）を定義できるようになります。
リッチにしすぎると逆に見にくくなるので注意しましょう。

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600358/1676899d-344e-47f1-cec4-b01c5cf783c8.png">


https://pub.dev/packages/logger


# まとめ

Flutterの便利なライブラリ20選でした。
他にも便利なライブラリがあれば是非教えてください！！！