基础库
 
 
 
 
 

104 lines
3.0 KiB

  1. import 'dart:async';
  2. import 'package:bloc/bloc.dart';
  3. import 'package:zhiying_comm/util/global_config.dart';
  4. import './bloc.dart';
  5. import 'login_repository.dart';
  6. import 'package:zhiying_comm/util/empty_util.dart';
  7. class LoginBloc extends Bloc<LoginEvent, LoginState> {
  8. LoginRepository repository;
  9. LoginBloc({this.repository}) : super(InitialLoginState());
  10. @override
  11. Stream<LoginState> mapEventToState(
  12. LoginEvent event,
  13. ) async* {
  14. /// 初始化
  15. if (event is LoginInitEvent) {
  16. yield* _mapLoginInitEventToState(event);
  17. }
  18. /// 淘宝登录
  19. if (event is LoginThirdAliEvent) {
  20. yield* _mapLoginAliEventToState(event);
  21. }
  22. /// 苹果登录
  23. if (event is LoginThirdAppleEvent) {
  24. yield* _mapLoginAppleEventToState(event);
  25. }
  26. /// QQ登录
  27. if (event is LoginThirdQQEvent) {
  28. yield* _mapLoginQQEventToState(event);
  29. }
  30. /// 微信登录
  31. if (event is LoginThirdWeChatEvent) {
  32. yield* _mapLoginWeChatEventToState(event);
  33. }
  34. }
  35. /// 获取页面数据
  36. Stream<LoginState> _mapLoginInitEventToState(LoginInitEvent event) async* {
  37. var cache = await repository.fetchCachePageData();
  38. if (!EmptyUtil.isEmpty(cache)) yield LoginCacheState(model: cache);
  39. var result = await repository.fetchNetPageData();
  40. if (!EmptyUtil.isEmpty(result))
  41. yield LoginLoadedState(model: result);
  42. else
  43. yield LoginErrorState();
  44. }
  45. /// 淘宝登录
  46. Stream<LoginState> _mapLoginAliEventToState(LoginThirdAliEvent event) async* {
  47. var result = await repository.aliLogin(
  48. nick: event.nick,
  49. avatarUrl: event.avatarUrl,
  50. openId: event.openId,
  51. openSid: event.openSid,
  52. topAccessToken: event.topAccessToken,
  53. topAuthCode: event.topAuthCode,
  54. );
  55. if(!EmptyUtil.isEmpty(result)){
  56. yield LoginThirdLoginSuccessState(model: result, thirdType: GlobalConfig.LOGIN_THIRD_ALI);
  57. }else{
  58. yield LoginThirdLoginErrorState();
  59. }
  60. }
  61. /// 微信登录
  62. Stream<LoginState> _mapLoginWeChatEventToState(LoginThirdWeChatEvent event) async* {
  63. var result = await repository.weChatLogin(event?.model);
  64. if(!EmptyUtil.isEmpty(result)){
  65. yield LoginThirdLoginSuccessState(model: result, thirdType: GlobalConfig.LOGIN_THIRD_WECHAT);
  66. }else{
  67. yield LoginThirdLoginErrorState();
  68. }
  69. }
  70. /// QQ 登录
  71. Stream<LoginState> _mapLoginQQEventToState(LoginThirdQQEvent event) async* {
  72. var result = await repository.qqLogin(event?.model);
  73. if(!EmptyUtil.isEmpty(result)){
  74. yield LoginThirdLoginSuccessState(model: result, thirdType: GlobalConfig.LOGIN_THIRD_QQ);
  75. }else{
  76. yield LoginThirdLoginErrorState();
  77. }
  78. }
  79. /// 苹果登录
  80. Stream<LoginState> _mapLoginAppleEventToState(LoginThirdAppleEvent event) async* {
  81. var result = await repository.appleLogin(identityToken: event.identityToken);
  82. if(!EmptyUtil.isEmpty(result)){
  83. yield LoginThirdLoginSuccessState(model: result, thirdType: GlobalConfig.LOGIN_THIRD_APPLE);
  84. }else{
  85. yield LoginThirdLoginErrorState();
  86. }
  87. }
  88. }