You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aku_new_community/lib/provider/user_provider.dart

200 lines
5.5 KiB

4 years ago
import 'dart:io';
3 years ago
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/constants/sars_api.dart';
import 'package:aku_new_community/models/user/my_house_model.dart';
import 'package:aku_new_community/models/user/user_config_model.dart';
3 years ago
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/ui/profile/house/house_func.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';
3 years ago
import 'package:flutter/foundation.dart';
import 'package:get/get.dart';
import 'package:jpush_flutter/jpush_flutter.dart';
import 'package:provider/provider.dart';
4 years ago
class UserProvider extends ChangeNotifier {
bool _isLogin = false;
3 years ago
4 years ago
bool get isLogin => _isLogin;
3 years ago
bool get isNotLogin => !_isLogin;
3 years ago
Future setLogin(int token) async {
final appProvider = Provider.of<AppProvider>(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 updateUserInfo();
///初始化用户配置
_userConfig = await HiveStore.userBox!.get('${_userInfoModel!.id}') ??
UserConfigModel(
userId: _userInfoModel!.id,
clockRemind: false,
todayClocked: false);
await appProvider.updateHouses(await HouseFunc.passedHouses);
if (isLogin) {
WebSocketUtil().setUser(userInfoModel!.id.toString());
WebSocketUtil().startWebSocket();
}
notifyListeners();
4 years ago
}
logout() {
4 years ago
if (!kIsWeb && !Platform.isMacOS) JPush().deleteAlias();
4 years ago
final appProvider = Provider.of<AppProvider>(Get.context!, listen: false);
appProvider.setCurrentHouse(null);
4 years ago
_isLogin = false;
_token = null;
_userInfoModel = null;
3 years ago
_myHouses = [];
NetUtil().get(API.user.logout, showMessage: true);
NetUtil().dio!.options.headers.remove('app-login-token');
4 years ago
HiveStore.appBox!.delete('token');
HiveStore.appBox!.delete('login');
WebSocketUtil().closeWebSocket();
4 years ago
notifyListeners();
}
Future<bool> updateUserInfo() async {
_userInfoModel = await SignFunc.getUserInfo();
if (_userInfoModel == null) {
BotToast.showText(text: '获取用户信息失败');
return false;
}
if (_userInfoModel != null && !kIsWeb && !Platform.isMacOS) {}
await SignFunc.checkNameAndAccount();
notifyListeners();
return true;
}
Future updateMyHouseInfo() async {
3 years ago
_myHouses = await SignFunc.getMyHouseInfo();
if (_myHouses.isEmpty) {
_defaultHouse = null;
} else {
for (var item in _myHouses) {
if (item.isDefault == 1) {
_defaultHouse = item;
}
}
}
4 years ago
notifyListeners();
}
4 years ago
String? _token;
3 years ago
4 years ago
String get token => _token ?? '';
4 years ago
UserInfoModel? _userInfoModel;
3 years ago
4 years ago
UserInfoModel? get userInfoModel => _userInfoModel;
3 years ago
List<MyHouseModel> _myHouses = [];
3 years ago
3 years ago
List<MyHouseModel> get myHouses => _myHouses;
MyHouseModel? _defaultHouse;
MyHouseModel? get defaultHouse => _defaultHouse;
///设置性别
Future setSex(int sex) async {
BaseModel baseModel = await NetUtil().post(
API.user.setSex,
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) {
notifyListeners();
}
}
//修改昵称
Future setName(String name) async {
BaseModel baseModel = await NetUtil().post(
API.user.updateNickName,
params: {'nickName': name},
showMessage: true,
);
if (baseModel.success) {
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.success) {
await updateUserInfo();
notifyListeners();
}
}
///修改头像
4 years ago
Future updateAvatar(String? path) async {
BaseModel model = await NetUtil().post(
SARSAPI.user.updateAvatar,
params: {
'fileUrls': [path]
},
showMessage: true,
);
if (model.success) {
await updateUserInfo();
}
}
///用户配置
///签到提醒
///今日签到
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);
}
4 years ago
}