基础库
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

login_bloc.dart 2.5 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. /// QQ 登录
  66. Stream<LoginState> _mapLoginQQEventToState(LoginThirdQQEvent event) async* {
  67. var result = await repository.qqLogin(event?.model);
  68. if(!EmptyUtil.isEmpty(result)){
  69. yield LoginThirdLoginSuccessState(model: result, thirdType: GlobalConfig.LOGIN_THIRD_QQ);
  70. }else{
  71. yield LoginThirdLoginErrorState();
  72. }
  73. }
  74. /// 苹果登录
  75. Stream<LoginState> _mapLoginAppleEventToState(LoginThirdAppleEvent event) async* {}
  76. }