【Flutter】riverpod_lintを試してみた

Dart

概要

どうも、@daiki1003です!

riverpod、便利ですよね。
2023年2月13日、riverpod_lintの1.0.0がリリースされました。

本記事では、
riverpod_lint気になってた!
・どんなことできるの?

な、あなたに役立つような記事になっているかなと思うので是非ご一読いただければと思います。
それでは早速行ってみましょー!

筆者環境

名前バージョン
Flutter3.7.3
Dart2.19.2
hooks_riverpod2.2.0
riverpod_lint1.0.0

riverpod_lint導入

まずは、使えるようにしないと話になりません。

基本的には、riverpod_lintのREADME.mdに書いている通りですが。

packageのインストール

custom_lintriverpod_lintpubspec.yamldev_dependenciesに追加します。

dev_dependencies:
  custom_lint:
  riverpod_lint:

flutter pub getなどでインストールします。

custom_lintの有効化

analysis_options.ymlを下記のように変更します。

analyzer: 
  plugins:
    - custom_lint

ymlはインデントも大事なのでそっくりこのまま入力してくださいね。
もちろん、他にもpluginを利用している場合は、少し見た目は変わってくると思います。

ここまでを正しく行えていれば、正常に動いているはずです。

警告の有効化/無効化

通常の警告の有効化/無効化と同様に、analysis_options.ymlを編集します。

analyzer: 
  plugins:
    - custom_lint

custom-lint:
  rules:
    - missing_provider_scope: false

何もしなければ、警告は基本的に有効になっておりrulesには無効化したいものを指定するオプトアウト方式となっています。
逆にオプトイン方式にしたければ以下のように記述します。

analyzer: 
  plugins:
    - custom_lint

custom-lint:
    # 基本的に無効
  enable_all_lint_rules: false
  rules:
    # これだけ有効
    - missing_provider_scope

これで、missing_provider_scopeのみが有効となります。

警告

missing_provider_scope

runApp内をProviderScopeでラップしていない場合に怒ってくれます。
たまーに、やらかすんですよね笑

provider_parameters

familyを使ったProviderの引数に、==overrideされていない型のインスタンスを渡すと警告してくれます。
詳しくはこちらに。

stateless_ref

stateless providerに対して、@riverpodを付与する場合には、第一引数に[メソッド名]Refの引数が必要です。
これを守れていない際に警告を出してくれます。

generator_class_extends

stateful provider@rirverpodを付与する場合には、extends _$[クラス名]が必要です。
これを守れていない際に警告を出してくれます。

アシスト

riverpod_lintlinterとしてだけでなく、riverpodの開発者体験も少し向上してくれます。
そんなアシスト機能をご紹介!

Consumerによるラップ

コンテキストメニューというのかな?笑
ここに、Consumerでラップするオプションが追加されます。

地味に、Consumerでラップする時って書くこと多いので助かりますね!

ProviderScopeによるラップ

同様に、ProviderScopeでラップするオプションが追加されます。

ConsumerWidget/ConsumerStatefulWidgetへの変更

既存のStatelessWidgetConsumerWidgetないしConsumerStatefulWidgetに変更してくれます。
ConsumerWidgetにする際、以下の変更を手作業でやっていたので自動でやってくれるのは地味に嬉しいです笑

Widget build(BuildContext context)

Widget build(BuildContext context, WidgetRef ref)

stateful provider, stateless providerのスイッチ

 @riverpod int myProvider(MyProviderRef ref) => 0;

@riverpod
class MyProvider extends _$MyProvider {
  @override
  int build() => 0;
}

をそれぞれスイッチしてくれます。

最後に

今の所出ている機能は以上です。
今後追加され次第、アップデートしていこうと思います。

それでは、ハッピーriverpodライフを!

誰かのお役に立てば。

Twitterフォローお願いします

「次回以降も記事を読んでみたい!」
「この辺分からなかったから質問したい!」

そんな時は、是非Twitter (@daiki1003)Instagram (@ashdik_flutter)のフォローお願いします♪

Twitterコミュニティ参加お願いします

Twitterコミュニティ「Flutter lovers」を開設しました!
参加お待ちしております😁

☕️ Buy me a coffee

また、記事がとても役に立ったと思う人は
コーヒーを奢っていただけると非常に嬉しいです!
@daiki1003

コメント

タイトルとURLをコピーしました