[英]Flutter Riverpod 1.0: What provider to use for Firebase AuthService object?
我想對 Flutter 應用程序使用 Firebase 電話身份驗證。 我有一個 AuthService 類,我需要公開 getter codeSent 來更改 UI。 來自官方 Riverpod 站點的第三方示例正在使用其他軟件包並且不是很清楚。 那么在這種情況下如何使用 Riverod 呢?
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
String _verificationId = '';
int? _resendToken;
bool _codeSent = false;
Stream<User?> get user {
return _auth.authStateChanges();
}
get currentUser {
return _auth.currentUser;
}
Future verifyPhoneNumber(String phoneNumber) async {
await _auth.verifyPhoneNumber(
verificationCompleted: (PhoneAuthCredential credential) async {
await _auth.signInWithCredential(credential);
},
verificationFailed: (FirebaseAuthException e) {
if (e.code == 'invalid-phone-number') {
print('The provided phone number is not valid.');
}
},
codeSent: (String verificationId, int? resendToken) {
_verificationId = verificationId;
_resendToken = resendToken;
_codeSent = true;
},
codeAutoRetrievalTimeout: (String verificationId) {
_verificationId = verificationId;
});
}
Future signWithOtp(String otp) async {
PhoneAuthCredential credential = PhoneAuthProvider.credential(
verificationId: _verificationId, smsCode: otp);
await _auth.signInWithCredential(credential);
}
Future signOut() async {
try {
return await _auth.signOut();
} catch (error) {
print(error.toString());
return null;
}
}
}
問題已通過 ChangeNotifierProvider 解決。
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:aptekamall/service/auth.dart';
final authProvider = ChangeNotifierProvider<AuthService>((ref) {
return AuthService();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.