main_view_model.dart 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import 'package:domain/repository/auth_repository.dart';
  2. import 'package:plugin_basic/constants/app_constant.dart';
  3. import 'package:plugin_basic/provider/user_config/user_config_service.dart';
  4. import 'package:plugin_platform/engine/toast/toast_engine.dart';
  5. import 'package:plugin_platform/http/dio/dio_cancelable_mixin.dart';
  6. import 'package:riverpod_annotation/riverpod_annotation.dart';
  7. import 'package:shared/utils/event_bus.dart';
  8. import 'package:shared/utils/log_utils.dart';
  9. import 'main_state.dart';
  10. import 'package:plugin_basic/fcm/fcm_utils.dart';
  11. part 'main_view_model.g.dart';
  12. @riverpod
  13. class MainViewModel extends _$MainViewModel with DioCancelableMixin {
  14. late final AuthRepository _authRepository;
  15. @override
  16. MainState build() {
  17. _authRepository = ref.read(authRepositoryProvider);
  18. final state = MainState();
  19. registerEventBus();
  20. registerCancellation(callback: () {
  21. unregisterEventBus();
  22. });
  23. _registerFCM();
  24. return state;
  25. }
  26. /// 获取用户信息
  27. void fetchUserInfo() {
  28. UserConfigService.getInstance().refreshUserInfo();
  29. }
  30. // EventBus 的事件接收
  31. Subscription? subscribe;
  32. void registerEventBus() {
  33. subscribe = bus.on(AppConstant.eventProfileRefresh, (arg) {
  34. Log.d("收到消息刷新用户信息");
  35. fetchUserInfo();
  36. });
  37. }
  38. void unregisterEventBus() {
  39. bus.off(AppConstant.eventProfileRefresh, subscribe);
  40. }
  41. void _registerFCM() {
  42. //获取token,并初始化监听
  43. FcmUtils().initNotifications(onToken: (fcmToken) {
  44. Log.d("准备注册FCM Token :$fcmToken");
  45. _doRegisterFCM(fcmToken);
  46. });
  47. }
  48. /// 调用接口注册FCM
  49. void _doRegisterFCM(String fcmToken) async {
  50. final result = await _authRepository.registerFCMToken(fcmToken: fcmToken, cancelToken: cancelToken);
  51. //请求成功去首页
  52. if (result.isSuccess) {
  53. Log.d("注册 FMC Token 成功!");
  54. } else {
  55. ToastEngine.show(result.errorMsg ?? "UnKnow Error");
  56. }
  57. }
  58. }