Flutter|Riverpod3.0へのマイグレ警告発生?

Devlog
Devlog

突然エディターに取り消し線が発生。[Provider名]Ref ref という形式の引数指定の箇所全てに発生していました。

数日前まではなかったのですが、3.0では廃止(deprecate)されるので置き換えろとのこと。Riverpod2.0の記事を参照して書いていたため、最新の記載方法になっていなかったのが原因だと思われます。

課題

Dart
import 'package:firebase_auth/firebase_auth.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'auth_provider.g.dart';

@riverpod
// サインインしているかどうかを格納
Stream<User?> userChanges(UserChangesRef ref) {
  return FirebaseAuth.instance.authStateChanges();
}

@riverpod
// データが入っている時だけユーザーが入る
User? user(UserRef ref) {
  final userChanges = ref.watch(userChangesProvider);
  return userChanges.when(
    loading: () => null,
    error: (_, __) => null,
    data: (d) => d,
  );
}

@riverpod
// サインインしているかをboolで表す
bool signedIn(SignedInRef ref) {
  final user = ref.watch(userProvider);
  return user != null;
}
'SignedInRef' is deprecated and shouldn't be used. Will be removed in 3.0. Use Ref instead.
Try replacing the use of the deprecated member with the replacement.dartdeprecated_member_use_from_same_package
(deprecated) typedef SignedInRef = AutoDisposeProviderRef<bool>

解決方法

1. 取り消し線部分を消す

取り消し線部分を消せばエディター上は解決するが動かない。引数の型指定がなくなるのでそれはそう。

Dart
// これは動かない

@riverpod
Stream<User?> userChanges(ref) {
  return FirebaseAuth.instance.authStateChanges();
}

2. (Ref ref)にしてみる

(Ref ref)でgeneratorで再生成してもエラーになりましたが、import追加で解決。

Dart
import 'package:flutter_riverpod/flutter_riverpod.dart'; // 元の記述だとこれが不要だった

@riverpod
Stream<User?> userChanges(Ref ref) {
  return FirebaseAuth.instance.authStateChanges();
}
flutter pub run build_runner build --delete-conflicting-outputs

ということで解決しました!

古い記事を参照してコードを書く場合は、最新の公式ドキュメントも確認しましょう(自戒)。

コメント

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