基础库
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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