import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flustars/flustars.dart'; import 'package:get/get.dart'; import 'package:jpush_flutter/jpush_flutter.dart'; import 'package:power_logger/power_logger.dart'; import 'package:provider/provider.dart'; import 'package:aku_community/constants/api.dart'; import 'package:aku_community/model/user/user_detail_model.dart'; import 'package:aku_community/model/user/user_info_model.dart'; import 'package:aku_community/pages/sign/sign_func.dart'; import 'package:aku_community/provider/app_provider.dart'; import 'package:aku_community/ui/profile/house/house_func.dart'; import 'package:aku_community/utils/hive_store.dart'; import 'package:aku_community/utils/network/base_model.dart'; import 'package:aku_community/utils/network/net_util.dart'; import 'package:aku_community/utils/websocket/web_socket_util.dart'; class UserProvider extends ChangeNotifier { bool _isLogin = false; bool get isLogin => _isLogin; bool get isNotLogin => !_isLogin; Future setLogin(int token) async { try { final appProvider = Provider.of(Get.context!, listen: false); _isLogin = true; NetUtil() .dio! .options .headers .putIfAbsent('App-Admin-Token', () => token); HiveStore.appBox!.put('token', token); HiveStore.appBox!.put('login', true); await updateProfile(); await updateUserDetail(); await appProvider.updateHouses(await HouseFunc.passedHouses); WebSocketUtil().setUser(userInfoModel!.id.toString()); WebSocketUtil().startWebSocket(); notifyListeners(); } catch (e) { LoggerData.addData(e); } } logout() { if (!kIsWeb && !Platform.isMacOS) JPush().deleteAlias(); final appProvider = Provider.of(Get.context!, listen: false); appProvider.setCurrentHouse(null); _isLogin = false; _token = null; _userInfoModel = null; _userDetailModel = null; NetUtil().get(API.user.logout, showMessage: true); NetUtil().dio!.options.headers.remove('App-Admin-Token'); HiveStore.appBox!.delete('token'); HiveStore.appBox!.delete('login'); WebSocketUtil().closeWebSocket(); notifyListeners(); } Future updateProfile() async { _userInfoModel = await SignFunc.getUserInfo(); if (_userInfoModel != null && !kIsWeb && !Platform.isMacOS) { try { await JPush().setAlias(_userInfoModel!.id.toString()); } catch (e) { LoggerData.addData(e); } } notifyListeners(); } Future updateUserDetail() async { UserDetailModel? _model = await SignFunc.getUserDetail(); if (_model != null) { _userDetailModel = _model; } notifyListeners(); } String? _token; String get token => _token ?? ''; UserInfoModel? _userInfoModel; UserInfoModel? get userInfoModel => _userInfoModel; UserDetailModel? _userDetailModel; UserDetailModel? get userDetailModel => _userDetailModel; ///设置性别 Future setSex(int sex) async { BaseModel baseModel = await NetUtil().post( API.user.setSex, params: {'sex': sex}, showMessage: true, ); if (baseModel.status!) { _userInfoModel!.sex = sex; 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.status!) { _userInfoModel!.birthday = DateUtil.formatDate(date, format: "yyyy-MM-dd HH:mm:ss"); notifyListeners(); } } //修改昵称 Future setName(String name) async { BaseModel baseModel = await NetUtil().post( API.user.updateNickName, params: {'nickName': name}, showMessage: true, ); if (baseModel.status!) { _userInfoModel!.nickName = name; notifyListeners(); } } //修改手机号 Future updateTel(String oldTel, String newTel, String code) async { BaseModel baseModel = await NetUtil().post( API.user.updateTel, params: {'oldTel': oldTel, 'newTel': newTel, 'code': code}, showMessage: true, ); if (baseModel.status!) { _userInfoModel!.tel = newTel; notifyListeners(); } } ///修改头像 Future updateAvatar(String? path) async { BaseModel model = await NetUtil().post( API.user.udpdateAvatar, params: { 'fileUrls': [path] }, showMessage: true, ); if (model.status!) { await updateProfile(); } } }