[英]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.