import 'dart:io'; import 'package:aku_new_community/constants/api.dart'; import 'package:aku_new_community/constants/saas_api.dart'; import 'package:aku_new_community/models/user/my_house_model.dart'; import 'package:aku_new_community/models/user/user_config_model.dart'; import 'package:aku_new_community/models/user/user_info_model.dart'; import 'package:aku_new_community/pages/sign/sign_func.dart'; import 'package:aku_new_community/provider/app_provider.dart'; import 'package:aku_new_community/utils/hive_store.dart'; import 'package:aku_new_community/utils/network/base_model.dart'; import 'package:aku_new_community/utils/network/net_util.dart'; import 'package:aku_new_community/utils/websocket/web_socket_util.dart'; import 'package:bot_toast/bot_toast.dart'; import 'package:common_utils/common_utils.dart'; import 'package:flutter/foundation.dart'; import 'package:get/get.dart'; import 'package:jpush_flutter/jpush_flutter.dart'; import 'package:provider/provider.dart'; class UserProvider extends ChangeNotifier { bool _isLogin = false; bool get isLogin => _isLogin; bool get isNotLogin => !_isLogin; Future init() async { if (isLogin) { await updateUserInfo(); WebSocketUtil().setUser(userInfoModel!.id.toString()); WebSocketUtil().startWebSocket(); await updateMyHouseInfo(); ///初始化用户配置 _userConfig = await HiveStore.userBox!.get('${_userInfoModel!.id}') ?? UserConfigModel( userId: _userInfoModel!.id, clockRemind: false, todayClocked: false); SignFunc.checkNameAndAccount(); } } Future setLogin(int token) async { final appProvider = Provider.of(Get.context!, listen: false); _isLogin = true; NetUtil().dio!.options.headers['app-login-token'] = token; HiveStore.appBox!.put('token', token); HiveStore.appBox!.put('login', true); await init(); notifyListeners(); } logout() { if (!kIsWeb && !Platform.isMacOS) JPush().deleteAlias(); final appProvider = Provider.of(Get.context!, listen: false); appProvider.setCurrentHouse(null); if (_isLogin) { NetUtil().post(SAASAPI.login.logOut, showMessage: true); NetUtil().dio!.options.headers.remove('app-login-token'); _isLogin = false; } _token = null; _userInfoModel = null; _myHouses = []; HiveStore.appBox!.delete('token'); HiveStore.appBox!.delete('login'); WebSocketUtil().closeWebSocket(); notifyListeners(); } ///更新用户信息 Future updateUserInfo() async { _userInfoModel = await SignFunc.getUserInfo(); if (_userInfoModel == null) { BotToast.showText(text: '获取用户信息失败'); } if (_userInfoModel != null && !kIsWeb && !Platform.isMacOS) {} notifyListeners(); } ///更新我的房屋列表 Future updateMyHouseInfo() async { _myHouses = await SignFunc.getMyHouseInfo(); if (_myHouses.isEmpty) { _defaultHouse = null; } else { for (var item in _myHouses) { if (item.isDefault == 1) { _defaultHouse = item; } } } notifyListeners(); } String? _token; String get token => _token ?? ''; UserInfoModel? _userInfoModel; UserInfoModel? get userInfoModel => _userInfoModel; ///我的房屋列表 List _myHouses = []; List get myHouses => _myHouses; MyHouseModel? _defaultHouse; MyHouseModel? get defaultHouse => _defaultHouse; ///设置性别 Future setSex(int sex) async { BaseModel baseModel = await NetUtil().get( SAASAPI.user.updateSex, params: {'sex': sex}, showMessage: true, ); if (baseModel.success) { await updateUserInfo(); notifyListeners(); } } ///设置生日 Future setBirthday(DateTime date) async { BaseModel baseModel = await NetUtil().post( API.user.setBirthday, params: { 'birthday': DateUtil.formatDate(date, format: "yyyy-MM-dd HH:mm:ss") }, showMessage: true, ); if (baseModel.success) { await updateUserInfo(); notifyListeners(); } } //修改昵称 Future setName(String name) async { var re = await SignFunc.setNickName(name); if (re) { await updateUserInfo(); notifyListeners(); } } //修改手机号 Future updateTel(String oldTel, String newTel, String code) async { BaseModel baseModel = await NetUtil().post( SAASAPI.user.updateTel, params: {'tel': oldTel, 'newTel': newTel, 'telCode': code}, showMessage: true, ); if (baseModel.success) { await updateUserInfo(); notifyListeners(); } } ///修改头像 Future updateAvatar(String? path) async { BaseModel model = await NetUtil().post( SAASAPI.user.updateAvatar, params: { 'imgUrls': [path] }, showMessage: true, ); if (model.success) { await updateUserInfo(); } notifyListeners(); } ///用户配置 ///签到提醒 ///今日签到 UserConfigModel _userConfig = UserConfigModel(userId: 0, clockRemind: false, todayClocked: false); UserConfigModel get userConfig => _userConfig; Future changeClockRemind() async { _userConfig.clockRemind = !_userConfig.clockRemind; await updateUserConfig(); notifyListeners(); } Future changeTodayClocked() async { _userConfig.todayClocked = true; await updateUserConfig(); notifyListeners(); } Future updateUserConfig() async { HiveStore.userBox!.put('${_userConfig.userId}', _userConfig); } }