Bloc架构:从实用和即兴的身份验证/数据库连接迁移
创始人
2024-12-22 20:00:25
0

在Bloc架构中,建议将所有不相关的逻辑单元隔离开来,包括身份验证和数据库连接。以下是一些示例代码的建议,可以实现这种分离:

身份验证:

  1. 创建一个包含所有身份验证逻辑的类,例如:
class AuthService {
  final FirebaseAuth _firebaseAuth;

  AuthService({
    FirebaseAuth firebaseAuth,
  }) : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance;

  Stream get user => _firebaseAuth.authStateChanges();

  Future signInWithEmailAndPassword(String email, String password) async {
    try {
      final UserCredential userCredential = await _firebaseAuth.signInWithEmailAndPassword(
        email: email,
        password: password,
      );
      return userCredential.user;
    } on FirebaseAuthException catch (e) {
      // handle error
    }
  }

  Future signOut() async {
    await _firebaseAuth.signOut();
  }
}
  1. 在视图层中使用Bloc的方式来使用这个类:
class AuthenticationBloc extends Bloc {
  final AuthService _authService;

  AuthenticationBloc(AuthService authService)
      : _authService = authService,
        super(const AuthenticationState.unknown()) {
    on(_onUserChanged);
  }

  void _onUserChanged(AuthenticationUserChanged event, Emitter emit) {
    emit(AuthenticationState.authenticated(event.user));
  }

  @override
  Future close() {
    // clean up resources
    return super.close();
  }
}

数据库连接:

  1. 创建一个包含所有数据库连接逻辑的类,例如:
class FirestoreService {
  final FirebaseFirestore _firestore;

  FirestoreService({
    FirebaseFirestore firestore,
  }) : _firestore = firestore ?? FirebaseFirestore.instance;

  Stream getCollection({@required String path}) {
    return _firestore.collection(path).snapshots();
  }

  Future setData({@required String path, @required Map data}) async {
    await _firestore.doc(path).set(data);
  }

  Future delete({@required String path}) async {
    await _firestore.doc(path).delete();
  }

  Future getDocument({@required String path}) async {
    return _firestore.doc(path).get();
  }

  Future updateData(
      {@required String path, @required Map data}) async {
    await _firestore.doc(path).update(data);
  }
}
  1. 在视图层中

相关内容

热门资讯

6分钟辅助!hhpoker是真... 6分钟辅助!hhpoker是真的假的,hhpoker真的有透视吗,演示教程(真是有挂)1、每一步都需...
第七分钟辅助!we poker... 第七分钟辅助!we poker插件,we poker免费辅助器,手筋教程(有挂方式)暗藏猫腻,小编详...
七分钟辅助!aa poker辅... 七分钟辅助!aa poker辅助包,pokemmo脚本辅助器下载,讲义教程(有挂秘籍)1、pokem...
第四分钟辅助!wepoker辅... 第四分钟辅助!wepoker辅助器安装包定制,aapoker透视脚本,大纲教程(有挂总结)所有人都在...
第四分钟辅助!wpk透视辅助靠... 第四分钟辅助!wpk透视辅助靠谱吗,wepoker透视苹果系统,诀窍教程(有挂猫腻);运wepoke...
七分钟辅助!aapoker透视... 七分钟辅助!aapoker透视脚本入口,wejoker开挂,学习教程(有挂教程)1、打开软件启动之后...
第四分钟辅助!淘宝买wepok... 第四分钟辅助!淘宝买wepoker透视有用吗,wpk俱乐部怎么作弊,积累教程(有挂规律)1、下载好淘...
6分钟辅助!we-poker软... 6分钟辅助!we-poker软件,购买的wpk辅助在哪里下载,积累教程(有挂技巧)购买的wpk辅助在...
第2分钟辅助!如何下载wepo... 第2分钟辅助!如何下载wepoker安装包,newpoker怎么安装脚本,教程书教程(今日头条)1、...
4分钟辅助!wepoker钻石... 4分钟辅助!wepoker钻石怎么看底牌,wepoker辅助器有哪些功能,法门教程(有挂详细)该软件...