feat: 登录信息缓存

This commit is contained in:
guozhigq
2023-05-17 14:26:32 +08:00
parent 75ed91c29d
commit 13cecf5b84
6 changed files with 216 additions and 17 deletions

View File

@ -1,6 +1,6 @@
class Api {
// 推荐视频
static const String recommendList = '/x/web-interface/index/top/rcmd';
static const String recommendList = '/x/web-interface/index/top/feed/rcmd';
// 热门视频
static const String hotList = '/x/web-interface/popular';

View File

@ -19,8 +19,7 @@ class VideoHttp {
var res = await Request().get(
Api.recommendList,
data: {
'user-agent': Request().headerUa('mob'),
'feed_version': 'V4',
'feed_version': 'V3',
'ps': ps,
'fresh_idx': freshIdx,
},
@ -203,14 +202,13 @@ class VideoHttp {
int? root,
int? parent,
}) async {
if(message == ''){
if (message == '') {
return {'status': false, 'data': [], 'msg': '请输入评论内容'};
}
print('root:$root');
print('parent: $parent');
var res = await Request()
.post(Api.replyAdd, queryParameters: {
var res = await Request().post(Api.replyAdd, queryParameters: {
'type': type.index,
'oid': oid,
'root': root ?? '',

View File

@ -1,3 +1,8 @@
import 'package:hive/hive.dart';
part 'info.g.dart';
@HiveType(typeId: 4)
class UserInfoData {
UserInfoData({
this.isLogin,
@ -25,30 +30,53 @@ class UserInfoData {
this.hasShop,
this.shopUrl,
});
@HiveField(0)
bool? isLogin;
@HiveField(1)
int? emailVerified;
@HiveField(2)
String? face;
@HiveField(3)
LevelInfo? levelInfo;
@HiveField(4)
int? mid;
@HiveField(5)
int? mobileVerified;
@HiveField(6)
int? money;
@HiveField(7)
int? moral;
@HiveField(8)
Map? official;
@HiveField(9)
Map? officialVerify;
@HiveField(10)
Map? pendant;
@HiveField(11)
int? scores;
@HiveField(12)
String? uname;
@HiveField(13)
int? vipDueDate;
@HiveField(14)
int? vipStatus;
@HiveField(15)
int? vipType;
@HiveField(16)
int? vipPayType;
@HiveField(17)
int? vipThemeType;
@HiveField(18)
Map? vipLabel;
@HiveField(19)
int? vipAvatarSub;
@HiveField(20)
String? vipNicknameColor;
@HiveField(21)
Map? wallet;
@HiveField(22)
bool? hasShop;
@HiveField(23)
String? shopUrl;
UserInfoData.fromJson(Map<String, dynamic> json) {
@ -81,6 +109,7 @@ class UserInfoData {
}
}
@HiveType(typeId: 5)
class LevelInfo {
LevelInfo({
this.currentLevel,
@ -88,10 +117,13 @@ class LevelInfo {
this.currentExp,
this.nextExp,
});
@HiveField(0)
int? currentLevel;
@HiveField(1)
int? currentMin;
@HiveField(2)
int? currentExp;
@HiveField(3)
int? nextExp;
LevelInfo.fromJson(Map<String, dynamic> json) {

153
lib/models/user/info.g.dart Normal file
View File

@ -0,0 +1,153 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'info.dart';
// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************
class UserInfoDataAdapter extends TypeAdapter<UserInfoData> {
@override
final int typeId = 4;
@override
UserInfoData read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return UserInfoData(
isLogin: fields[0] as bool?,
emailVerified: fields[1] as int?,
face: fields[2] as String?,
levelInfo: fields[3] as LevelInfo?,
mid: fields[4] as int?,
mobileVerified: fields[5] as int?,
money: fields[6] as int?,
moral: fields[7] as int?,
official: (fields[8] as Map?)?.cast<dynamic, dynamic>(),
officialVerify: (fields[9] as Map?)?.cast<dynamic, dynamic>(),
pendant: (fields[10] as Map?)?.cast<dynamic, dynamic>(),
scores: fields[11] as int?,
uname: fields[12] as String?,
vipDueDate: fields[13] as int?,
vipStatus: fields[14] as int?,
vipType: fields[15] as int?,
vipPayType: fields[16] as int?,
vipThemeType: fields[17] as int?,
vipLabel: (fields[18] as Map?)?.cast<dynamic, dynamic>(),
vipAvatarSub: fields[19] as int?,
vipNicknameColor: fields[20] as String?,
wallet: (fields[21] as Map?)?.cast<dynamic, dynamic>(),
hasShop: fields[22] as bool?,
shopUrl: fields[23] as String?,
);
}
@override
void write(BinaryWriter writer, UserInfoData obj) {
writer
..writeByte(24)
..writeByte(0)
..write(obj.isLogin)
..writeByte(1)
..write(obj.emailVerified)
..writeByte(2)
..write(obj.face)
..writeByte(3)
..write(obj.levelInfo)
..writeByte(4)
..write(obj.mid)
..writeByte(5)
..write(obj.mobileVerified)
..writeByte(6)
..write(obj.money)
..writeByte(7)
..write(obj.moral)
..writeByte(8)
..write(obj.official)
..writeByte(9)
..write(obj.officialVerify)
..writeByte(10)
..write(obj.pendant)
..writeByte(11)
..write(obj.scores)
..writeByte(12)
..write(obj.uname)
..writeByte(13)
..write(obj.vipDueDate)
..writeByte(14)
..write(obj.vipStatus)
..writeByte(15)
..write(obj.vipType)
..writeByte(16)
..write(obj.vipPayType)
..writeByte(17)
..write(obj.vipThemeType)
..writeByte(18)
..write(obj.vipLabel)
..writeByte(19)
..write(obj.vipAvatarSub)
..writeByte(20)
..write(obj.vipNicknameColor)
..writeByte(21)
..write(obj.wallet)
..writeByte(22)
..write(obj.hasShop)
..writeByte(23)
..write(obj.shopUrl);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is UserInfoDataAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class LevelInfoAdapter extends TypeAdapter<LevelInfo> {
@override
final int typeId = 5;
@override
LevelInfo read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return LevelInfo(
currentLevel: fields[0] as int?,
currentMin: fields[1] as int?,
currentExp: fields[2] as int?,
nextExp: fields[3] as int?,
);
}
@override
void write(BinaryWriter writer, LevelInfo obj) {
writer
..writeByte(4)
..writeByte(0)
..write(obj.currentLevel)
..writeByte(1)
..write(obj.currentMin)
..writeByte(2)
..write(obj.currentExp)
..writeByte(3)
..write(obj.nextExp);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is LevelInfoAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}

View File

@ -1,10 +1,8 @@
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:hive/hive.dart';
import 'package:pilipala/http/user.dart';
import 'package:pilipala/models/user/info.dart';
import 'package:pilipala/models/user/stat.dart';
import 'package:pilipala/pages/main/controller.dart';
import 'package:pilipala/utils/storage.dart';
class MineController extends GetxController {
@ -14,6 +12,17 @@ class MineController extends GetxController {
Rx<UserStat> userStat = UserStat().obs;
Box user = GStrorage.user;
RxBool userLogin = false.obs;
Box userInfoCache = GStrorage.userInfo;
@override
onInit() {
super.onInit();
if (userInfoCache.get('userInfoCache') != null) {
print(userInfoCache.get('userInfoCache'));
userInfo.value = userInfoCache.get('userInfoCache');
}
}
onLogin() {
Get.toNamed(
@ -34,6 +43,7 @@ class MineController extends GetxController {
if (res['status']) {
if (res['data'].isLogin) {
userInfo.value = res['data'];
userInfoCache.put('userInfoCache', res['data']);
user.put(UserBoxKey.userName, res['data'].uname);
user.put(UserBoxKey.userFace, res['data'].face);
user.put(UserBoxKey.userMid, res['data'].mid);

View File

@ -3,10 +3,12 @@ import 'package:hive_flutter/hive_flutter.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pilipala/models/model_owner.dart';
import 'package:pilipala/models/model_rec_video_item.dart';
import 'package:pilipala/models/user/info.dart';
class GStrorage {
static late final Box user;
static late final Box recVideo;
static late final Box userInfo;
static Future<void> init() async {
final dir = await getApplicationDocumentsDirectory();
@ -17,11 +19,15 @@ class GStrorage {
Hive.registerAdapter(RcmdReasonAdapter());
Hive.registerAdapter(StatAdapter());
Hive.registerAdapter(OwnerAdapter());
Hive.registerAdapter(UserInfoDataAdapter());
Hive.registerAdapter(LevelInfoAdapter());
// 用户信息
user = await Hive.openBox('user');
// 首页推荐视频
recVideo = await Hive.openBox('recVideo');
// 登录用户信息
userInfo = await Hive.openBox('userInfo');
}
}