[英]Flutter Riverpod 1.0: What provider to use for Firebase AuthService object?
I want to use Firebase Phone authentication for an Flutter app.我想对 Flutter 应用程序使用 Firebase 电话身份验证。 I have an AuthService class and I need to expose getter codeSent to change a UI.
我有一个 AuthService 类,我需要公开 getter codeSent 来更改 UI。 Third party examples from official Riverpod's site are using other packages and not very clear.
来自官方 Riverpod 站点的第三方示例正在使用其他软件包并且不是很清楚。 So how to use Riverod in this case?
那么在这种情况下如何使用 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;
}
}
}
The problem was solved with ChangeNotifierProvider.问题已通过 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.