突然エディターに取り消し線が発生。[Provider名]Ref ref という形式の引数指定の箇所全てに発生していました。
数日前まではなかったのですが、3.0では廃止(deprecate)されるので置き換えろとのこと。Riverpod2.0の記事を参照して書いていたため、最新の記載方法になっていなかったのが原因だと思われます。
Contents
課題

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
ということで解決しました!
古い記事を参照してコードを書く場合は、最新の公式ドキュメントも確認しましょう(自戒)。
コメント