【问题标题】:Flutter Riverpod 1.0: What provider to use for Firebase AuthService object?Flutter Riverpod 1.0:Firebase AuthService 对象使用什么提供者?
【发布时间】:2021-10-17 18:44:25
【问题描述】:

我想对 Flutter 应用使用 Firebase Phone 身份验证。我有一个 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;
    }
  }
}

【问题讨论】:

    标签: firebase flutter dart firebase-authentication riverpod


    【解决方案1】:

    问题已通过 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();
    });
    

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 2020-01-30
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2023-01-22
      • 2022-06-24
      相关资源
      最近更新 更多