Merge branch 'design' into alpha
This commit is contained in:
@ -70,9 +70,17 @@ class NetworkImgLayer extends StatelessWidget {
|
|||||||
|
|
||||||
Widget placeholder(context) {
|
Widget placeholder(context) {
|
||||||
return Container(
|
return Container(
|
||||||
color: Theme.of(context).colorScheme.onInverseSurface.withOpacity(0.4),
|
|
||||||
width: width ?? double.infinity,
|
width: width ?? double.infinity,
|
||||||
height: height ?? double.infinity,
|
height: height ?? double.infinity,
|
||||||
|
clipBehavior: Clip.hardEdge,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Theme.of(context).colorScheme.onInverseSurface.withOpacity(0.4),
|
||||||
|
borderRadius: BorderRadius.circular(type == 'avatar'
|
||||||
|
? 50
|
||||||
|
: type == 'emote'
|
||||||
|
? 0
|
||||||
|
: StyleString.imgRadius.x),
|
||||||
|
),
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
type == 'avatar'
|
type == 'avatar'
|
||||||
|
|||||||
@ -11,7 +11,6 @@ import 'package:pilipala/common/widgets/http_error.dart';
|
|||||||
import 'package:pilipala/common/widgets/no_data.dart';
|
import 'package:pilipala/common/widgets/no_data.dart';
|
||||||
import 'package:pilipala/models/dynamics/result.dart';
|
import 'package:pilipala/models/dynamics/result.dart';
|
||||||
import 'package:pilipala/pages/main/index.dart';
|
import 'package:pilipala/pages/main/index.dart';
|
||||||
import 'package:pilipala/utils/event_bus.dart';
|
|
||||||
import 'package:pilipala/utils/feed_back.dart';
|
import 'package:pilipala/utils/feed_back.dart';
|
||||||
import 'package:pilipala/utils/storage.dart';
|
import 'package:pilipala/utils/storage.dart';
|
||||||
|
|
||||||
@ -32,7 +31,6 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
late Future _futureBuilderFuture;
|
late Future _futureBuilderFuture;
|
||||||
late Future _futureBuilderFutureUp;
|
late Future _futureBuilderFutureUp;
|
||||||
Box userInfoCache = GStrorage.userInfo;
|
Box userInfoCache = GStrorage.userInfo;
|
||||||
EventBus eventBus = EventBus();
|
|
||||||
late ScrollController scrollController;
|
late ScrollController scrollController;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -66,12 +64,13 @@ class _DynamicsPageState extends State<DynamicsPage>
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
eventBus.on(EventName.loginEvent, (args) {
|
_dynamicsController.userLogin.listen((status) {
|
||||||
_dynamicsController.userLogin.value = args['status'];
|
if (mounted) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_futureBuilderFuture = _dynamicsController.queryFollowDynamic();
|
_futureBuilderFuture = _dynamicsController.queryFollowDynamic();
|
||||||
_futureBuilderFutureUp = _dynamicsController.queryFollowUp();
|
_futureBuilderFutureUp = _dynamicsController.queryFollowUp();
|
||||||
});
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
import 'package:pilipala/http/fan.dart';
|
import 'package:pilipala/http/fan.dart';
|
||||||
@ -7,11 +8,13 @@ import 'package:pilipala/utils/storage.dart';
|
|||||||
class FansController extends GetxController {
|
class FansController extends GetxController {
|
||||||
Box userInfoCache = GStrorage.userInfo;
|
Box userInfoCache = GStrorage.userInfo;
|
||||||
int pn = 1;
|
int pn = 1;
|
||||||
|
int ps = 20;
|
||||||
int total = 0;
|
int total = 0;
|
||||||
RxList<FansItemModel> fansList = [FansItemModel()].obs;
|
RxList<FansItemModel> fansList = [FansItemModel()].obs;
|
||||||
late int mid;
|
late int mid;
|
||||||
late String name;
|
late String name;
|
||||||
var userInfo;
|
var userInfo;
|
||||||
|
RxString loadingText = '加载中...'.obs;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
@ -26,23 +29,31 @@ class FansController extends GetxController {
|
|||||||
Future queryFans(type) async {
|
Future queryFans(type) async {
|
||||||
if (type == 'init') {
|
if (type == 'init') {
|
||||||
pn = 1;
|
pn = 1;
|
||||||
|
loadingText.value == '加载中...';
|
||||||
|
}
|
||||||
|
if (loadingText.value == '没有更多了') {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
var res = await FanHttp.fans(
|
var res = await FanHttp.fans(
|
||||||
vmid: mid,
|
vmid: mid,
|
||||||
pn: pn,
|
pn: pn,
|
||||||
ps: 20,
|
ps: ps,
|
||||||
orderType: 'attention',
|
orderType: 'attention',
|
||||||
);
|
);
|
||||||
if (res['status']) {
|
if (res['status']) {
|
||||||
if (type == 'init') {
|
if (type == 'init') {
|
||||||
fansList.value = res['data'].list;
|
fansList.value = res['data'].list;
|
||||||
total = res['data'].total;
|
total = res['data'].total;
|
||||||
} else if (type == 'onRefresh') {
|
|
||||||
fansList.insertAll(0, res['data'].list);
|
|
||||||
} else if (type == 'onLoad') {
|
} else if (type == 'onLoad') {
|
||||||
fansList.addAll(res['data'].list);
|
fansList.addAll(res['data'].list);
|
||||||
}
|
}
|
||||||
|
print(total);
|
||||||
|
if ((pn == 1 && total < ps) || res['data'].list.isEmpty) {
|
||||||
|
loadingText.value = '没有更多了';
|
||||||
|
}
|
||||||
pn += 1;
|
pn += 1;
|
||||||
|
} else {
|
||||||
|
SmartDialog.showToast(res['msg']);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
|
import 'package:easy_debounce/easy_throttle.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:pilipala/common/widgets/http_error.dart';
|
import 'package:pilipala/common/widgets/http_error.dart';
|
||||||
|
import 'package:pilipala/common/widgets/no_data.dart';
|
||||||
import 'package:pilipala/models/fans/result.dart';
|
import 'package:pilipala/models/fans/result.dart';
|
||||||
|
|
||||||
import 'controller.dart';
|
import 'controller.dart';
|
||||||
@ -17,7 +19,6 @@ class _FansPageState extends State<FansPage> {
|
|||||||
final FansController _fansController = Get.put(FansController());
|
final FansController _fansController = Get.put(FansController());
|
||||||
final ScrollController scrollController = ScrollController();
|
final ScrollController scrollController = ScrollController();
|
||||||
Future? _futureBuilderFuture;
|
Future? _futureBuilderFuture;
|
||||||
bool _isLoadingMore = false;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -27,11 +28,9 @@ class _FansPageState extends State<FansPage> {
|
|||||||
() async {
|
() async {
|
||||||
if (scrollController.position.pixels >=
|
if (scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 200) {
|
scrollController.position.maxScrollExtent - 200) {
|
||||||
if (!_isLoadingMore) {
|
EasyThrottle.throttle('follow', const Duration(seconds: 1), () {
|
||||||
_isLoadingMore = true;
|
_fansController.queryFans('onLoad');
|
||||||
await _fansController.queryFans('onLoad');
|
});
|
||||||
_isLoadingMore = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -66,14 +65,38 @@ class _FansPageState extends State<FansPage> {
|
|||||||
if (data['status']) {
|
if (data['status']) {
|
||||||
List<FansItemModel> list = _fansController.fansList;
|
List<FansItemModel> list = _fansController.fansList;
|
||||||
return Obx(
|
return Obx(
|
||||||
() => list.length == 1
|
() => list.isNotEmpty
|
||||||
? const SizedBox()
|
? ListView.builder(
|
||||||
: ListView.builder(
|
|
||||||
controller: scrollController,
|
controller: scrollController,
|
||||||
itemCount: list.length,
|
itemCount: list.length + 1,
|
||||||
itemBuilder: (BuildContext context, int index) {
|
itemBuilder: (BuildContext context, int index) {
|
||||||
return fanItem(item: list[index]);
|
if (index == list.length) {
|
||||||
|
return Container(
|
||||||
|
height:
|
||||||
|
MediaQuery.of(context).padding.bottom + 60,
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
bottom:
|
||||||
|
MediaQuery.of(context).padding.bottom),
|
||||||
|
child: Center(
|
||||||
|
child: Obx(
|
||||||
|
() => Text(
|
||||||
|
_fansController.loadingText.value,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Theme.of(context)
|
||||||
|
.colorScheme
|
||||||
|
.outline,
|
||||||
|
fontSize: 13),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return fanItem(item: list[index]);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
)
|
||||||
|
: const CustomScrollView(
|
||||||
|
slivers: [NoData()],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
import 'package:pilipala/http/follow.dart';
|
import 'package:pilipala/http/follow.dart';
|
||||||
@ -7,11 +8,13 @@ import 'package:pilipala/utils/storage.dart';
|
|||||||
class FollowController extends GetxController {
|
class FollowController extends GetxController {
|
||||||
Box userInfoCache = GStrorage.userInfo;
|
Box userInfoCache = GStrorage.userInfo;
|
||||||
int pn = 1;
|
int pn = 1;
|
||||||
|
int ps = 20;
|
||||||
int total = 0;
|
int total = 0;
|
||||||
RxList<FollowItemModel> followList = [FollowItemModel()].obs;
|
RxList<FollowItemModel> followList = [FollowItemModel()].obs;
|
||||||
late int mid;
|
late int mid;
|
||||||
late String name;
|
late String name;
|
||||||
var userInfo;
|
var userInfo;
|
||||||
|
RxString loadingText = '加载中...'.obs;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
@ -26,23 +29,30 @@ class FollowController extends GetxController {
|
|||||||
Future queryFollowings(type) async {
|
Future queryFollowings(type) async {
|
||||||
if (type == 'init') {
|
if (type == 'init') {
|
||||||
pn = 1;
|
pn = 1;
|
||||||
|
loadingText.value == '加载中...';
|
||||||
|
}
|
||||||
|
if (loadingText.value == '没有更多了') {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
var res = await FollowHttp.followings(
|
var res = await FollowHttp.followings(
|
||||||
vmid: mid,
|
vmid: mid,
|
||||||
pn: pn,
|
pn: pn,
|
||||||
ps: 20,
|
ps: ps,
|
||||||
orderType: 'attention',
|
orderType: 'attention',
|
||||||
);
|
);
|
||||||
if (res['status']) {
|
if (res['status']) {
|
||||||
if (type == 'init') {
|
if (type == 'init') {
|
||||||
followList.value = res['data'].list;
|
followList.value = res['data'].list;
|
||||||
total = res['data'].total;
|
total = res['data'].total;
|
||||||
} else if (type == 'onRefresh') {
|
|
||||||
followList.insertAll(0, res['data'].list);
|
|
||||||
} else if (type == 'onLoad') {
|
} else if (type == 'onLoad') {
|
||||||
followList.addAll(res['data'].list);
|
followList.addAll(res['data'].list);
|
||||||
}
|
}
|
||||||
|
if ((pn == 1 && total < ps) || res['data'].list.isEmpty) {
|
||||||
|
loadingText.value = '没有更多了';
|
||||||
|
}
|
||||||
pn += 1;
|
pn += 1;
|
||||||
|
} else {
|
||||||
|
SmartDialog.showToast(res['msg']);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
|
import 'package:easy_debounce/easy_throttle.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:pilipala/common/widgets/http_error.dart';
|
import 'package:pilipala/common/widgets/http_error.dart';
|
||||||
|
import 'package:pilipala/common/widgets/no_data.dart';
|
||||||
import 'package:pilipala/models/follow/result.dart';
|
import 'package:pilipala/models/follow/result.dart';
|
||||||
|
|
||||||
import 'controller.dart';
|
import 'controller.dart';
|
||||||
@ -17,7 +19,6 @@ class _FollowPageState extends State<FollowPage> {
|
|||||||
final FollowController _followController = Get.put(FollowController());
|
final FollowController _followController = Get.put(FollowController());
|
||||||
final ScrollController scrollController = ScrollController();
|
final ScrollController scrollController = ScrollController();
|
||||||
Future? _futureBuilderFuture;
|
Future? _futureBuilderFuture;
|
||||||
bool _isLoadingMore = false;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -27,11 +28,9 @@ class _FollowPageState extends State<FollowPage> {
|
|||||||
() async {
|
() async {
|
||||||
if (scrollController.position.pixels >=
|
if (scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent - 200) {
|
scrollController.position.maxScrollExtent - 200) {
|
||||||
if (!_isLoadingMore) {
|
EasyThrottle.throttle('follow', const Duration(seconds: 1), () {
|
||||||
_isLoadingMore = true;
|
_followController.queryFollowings('onLoad');
|
||||||
await _followController.queryFollowings('onLoad');
|
});
|
||||||
_isLoadingMore = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -67,14 +66,40 @@ class _FollowPageState extends State<FollowPage> {
|
|||||||
if (data['status']) {
|
if (data['status']) {
|
||||||
List<FollowItemModel> list = _followController.followList;
|
List<FollowItemModel> list = _followController.followList;
|
||||||
return Obx(
|
return Obx(
|
||||||
() => list.length == 1
|
() => list.isNotEmpty
|
||||||
? const SizedBox()
|
? ListView.builder(
|
||||||
: ListView.builder(
|
|
||||||
controller: scrollController,
|
controller: scrollController,
|
||||||
itemCount: list.length,
|
itemCount: list.length + 1,
|
||||||
itemBuilder: (BuildContext context, int index) {
|
itemBuilder: (BuildContext context, int index) {
|
||||||
return followItem(item: list[index]);
|
if (index == list.length) {
|
||||||
|
return Container(
|
||||||
|
height:
|
||||||
|
MediaQuery.of(context).padding.bottom +
|
||||||
|
60,
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
bottom: MediaQuery.of(context)
|
||||||
|
.padding
|
||||||
|
.bottom),
|
||||||
|
child: Center(
|
||||||
|
child: Obx(
|
||||||
|
() => Text(
|
||||||
|
_followController.loadingText.value,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Theme.of(context)
|
||||||
|
.colorScheme
|
||||||
|
.outline,
|
||||||
|
fontSize: 13),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return followItem(item: list[index]);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
)
|
||||||
|
: const CustomScrollView(
|
||||||
|
slivers: [NoData()],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -48,9 +48,10 @@ class HomeController extends GetxController with GetTickerProviderStateMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 更新登录状态
|
// 更新登录状态
|
||||||
void updateLoginStatus(val) {
|
void updateLoginStatus(val) async {
|
||||||
userInfo = userInfoCache.get('userInfoCache');
|
userInfo = await userInfoCache.get('userInfoCache');
|
||||||
userLogin.value = val ?? false;
|
userLogin.value = val ?? false;
|
||||||
|
if (val) return;
|
||||||
userFace.value = userInfo != null ? userInfo.face : '';
|
userFace.value = userInfo != null ? userInfo.face : '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -134,11 +134,13 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
() => ctr!.userLogin.value
|
() => ctr!.userLogin.value
|
||||||
? Stack(
|
? Stack(
|
||||||
children: [
|
children: [
|
||||||
NetworkImgLayer(
|
Obx(
|
||||||
type: 'avatar',
|
() => NetworkImgLayer(
|
||||||
width: 34,
|
type: 'avatar',
|
||||||
height: 34,
|
width: 34,
|
||||||
src: ctr!.userFace.value,
|
height: 34,
|
||||||
|
src: ctr!.userFace.value,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
Positioned.fill(
|
Positioned.fill(
|
||||||
child: Material(
|
child: Material(
|
||||||
|
|||||||
@ -35,6 +35,7 @@ class MediaController extends GetxController {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
var userInfo;
|
var userInfo;
|
||||||
|
int? mid;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
@ -44,13 +45,13 @@ class MediaController extends GetxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<dynamic> queryFavFolder() async {
|
Future<dynamic> queryFavFolder() async {
|
||||||
if (!userLogin.value || GStrorage.userInfo.get('userInfoCache') == null) {
|
if (!userLogin.value) {
|
||||||
return {'status': false, 'data': [], 'msg': '未登录'};
|
return {'status': false, 'data': [], 'msg': '未登录'};
|
||||||
}
|
}
|
||||||
var res = await await UserHttp.userfavFolder(
|
var res = await await UserHttp.userfavFolder(
|
||||||
pn: 1,
|
pn: 1,
|
||||||
ps: 5,
|
ps: 5,
|
||||||
mid: GStrorage.userInfo.get('userInfoCache').mid,
|
mid: mid ?? GStrorage.userInfo.get('userInfoCache').mid,
|
||||||
);
|
);
|
||||||
favFolderData.value = res['data'];
|
favFolderData.value = res['data'];
|
||||||
return res;
|
return res;
|
||||||
|
|||||||
@ -3,7 +3,6 @@ import 'package:get/get.dart';
|
|||||||
import 'package:pilipala/common/widgets/network_img_layer.dart';
|
import 'package:pilipala/common/widgets/network_img_layer.dart';
|
||||||
import 'package:pilipala/models/user/fav_folder.dart';
|
import 'package:pilipala/models/user/fav_folder.dart';
|
||||||
import 'package:pilipala/pages/media/index.dart';
|
import 'package:pilipala/pages/media/index.dart';
|
||||||
import 'package:pilipala/utils/event_bus.dart';
|
|
||||||
import 'package:pilipala/utils/utils.dart';
|
import 'package:pilipala/utils/utils.dart';
|
||||||
|
|
||||||
class MediaPage extends StatefulWidget {
|
class MediaPage extends StatefulWidget {
|
||||||
@ -17,7 +16,6 @@ class _MediaPageState extends State<MediaPage>
|
|||||||
with AutomaticKeepAliveClientMixin {
|
with AutomaticKeepAliveClientMixin {
|
||||||
late MediaController mediaController;
|
late MediaController mediaController;
|
||||||
late Future _futureBuilderFuture;
|
late Future _futureBuilderFuture;
|
||||||
EventBus eventBus = EventBus();
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
@ -27,8 +25,8 @@ class _MediaPageState extends State<MediaPage>
|
|||||||
super.initState();
|
super.initState();
|
||||||
mediaController = Get.put(MediaController());
|
mediaController = Get.put(MediaController());
|
||||||
_futureBuilderFuture = mediaController.queryFavFolder();
|
_futureBuilderFuture = mediaController.queryFavFolder();
|
||||||
eventBus.on(EventName.loginEvent, (args) {
|
|
||||||
mediaController.userLogin.value = args['status'];
|
mediaController.userLogin.listen((status) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_futureBuilderFuture = mediaController.queryFavFolder();
|
_futureBuilderFuture = mediaController.queryFavFolder();
|
||||||
});
|
});
|
||||||
|
|||||||
@ -7,7 +7,6 @@ import 'package:pilipala/common/constants.dart';
|
|||||||
import 'package:pilipala/common/widgets/network_img_layer.dart';
|
import 'package:pilipala/common/widgets/network_img_layer.dart';
|
||||||
import 'package:pilipala/models/common/theme_type.dart';
|
import 'package:pilipala/models/common/theme_type.dart';
|
||||||
import 'package:pilipala/models/user/info.dart';
|
import 'package:pilipala/models/user/info.dart';
|
||||||
import 'package:pilipala/utils/event_bus.dart';
|
|
||||||
import 'controller.dart';
|
import 'controller.dart';
|
||||||
|
|
||||||
class MinePage extends StatefulWidget {
|
class MinePage extends StatefulWidget {
|
||||||
@ -20,14 +19,13 @@ class MinePage extends StatefulWidget {
|
|||||||
class _MinePageState extends State<MinePage> {
|
class _MinePageState extends State<MinePage> {
|
||||||
final MineController mineController = Get.put(MineController());
|
final MineController mineController = Get.put(MineController());
|
||||||
late Future _futureBuilderFuture;
|
late Future _futureBuilderFuture;
|
||||||
EventBus eventBus = EventBus();
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_futureBuilderFuture = mineController.queryUserInfo();
|
_futureBuilderFuture = mineController.queryUserInfo();
|
||||||
eventBus.on(EventName.loginEvent, (args) {
|
|
||||||
mineController.userLogin.value = args['status'];
|
mineController.userLogin.listen((status) {
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_futureBuilderFuture = mineController.queryUserInfo();
|
_futureBuilderFuture = mineController.queryUserInfo();
|
||||||
@ -214,36 +212,6 @@ class _MinePageState extends State<MinePage> {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
// LayoutBuilder(
|
|
||||||
// builder: (context, BoxConstraints box) {
|
|
||||||
// return Container(
|
|
||||||
// width: box.maxWidth,
|
|
||||||
// height: 1,
|
|
||||||
// color: Theme.of(context).colorScheme.onInverseSurface,
|
|
||||||
// child: Stack(
|
|
||||||
// children: [
|
|
||||||
// Positioned(
|
|
||||||
// top: 0,
|
|
||||||
// left: 0,
|
|
||||||
// bottom: 0,
|
|
||||||
// child: Container(
|
|
||||||
// width: box.maxWidth *
|
|
||||||
// (_mineController
|
|
||||||
// .userInfo.value.levelInfo!.currentExp! /
|
|
||||||
// _mineController
|
|
||||||
// .userInfo.value.levelInfo!.nextExp!),
|
|
||||||
// height: 1,
|
|
||||||
// decoration: BoxDecoration(
|
|
||||||
// borderRadius: BorderRadius.circular(4),
|
|
||||||
// color: Theme.of(context).colorScheme.primary,
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// ],
|
|
||||||
// ),
|
|
||||||
// );
|
|
||||||
// },
|
|
||||||
// ),
|
|
||||||
],
|
],
|
||||||
const SizedBox(height: 30),
|
const SizedBox(height: 30),
|
||||||
Padding(
|
Padding(
|
||||||
|
|||||||
@ -4,16 +4,13 @@ import 'package:get/get.dart';
|
|||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
import 'package:pilipala/http/init.dart';
|
import 'package:pilipala/http/init.dart';
|
||||||
import 'package:pilipala/models/common/theme_type.dart';
|
import 'package:pilipala/models/common/theme_type.dart';
|
||||||
import 'package:pilipala/pages/home/index.dart';
|
|
||||||
import 'package:pilipala/pages/mine/controller.dart';
|
|
||||||
import 'package:pilipala/utils/event_bus.dart';
|
|
||||||
import 'package:pilipala/utils/feed_back.dart';
|
import 'package:pilipala/utils/feed_back.dart';
|
||||||
|
import 'package:pilipala/utils/login.dart';
|
||||||
import 'package:pilipala/utils/storage.dart';
|
import 'package:pilipala/utils/storage.dart';
|
||||||
|
|
||||||
class SettingController extends GetxController {
|
class SettingController extends GetxController {
|
||||||
Box userInfoCache = GStrorage.userInfo;
|
Box userInfoCache = GStrorage.userInfo;
|
||||||
Box setting = GStrorage.setting;
|
Box setting = GStrorage.setting;
|
||||||
// Box userInfoCache = GStrorage.userInfo;
|
|
||||||
Box localCache = GStrorage.localCache;
|
Box localCache = GStrorage.localCache;
|
||||||
|
|
||||||
RxBool userLogin = false.obs;
|
RxBool userLogin = false.obs;
|
||||||
@ -59,17 +56,7 @@ class SettingController extends GetxController {
|
|||||||
localCache
|
localCache
|
||||||
.put(LocalCacheKey.accessKey, {'mid': -1, 'value': ''});
|
.put(LocalCacheKey.accessKey, {'mid': -1, 'value': ''});
|
||||||
|
|
||||||
// 更改我的页面登录状态
|
await LoginUtils.refreshLoginStatus(false);
|
||||||
await Get.find<MineController>().resetUserInfo();
|
|
||||||
|
|
||||||
// 更改主页登录状态
|
|
||||||
HomeController homeCtr = Get.find<HomeController>();
|
|
||||||
homeCtr.updateLoginStatus(false);
|
|
||||||
|
|
||||||
// 事件通知
|
|
||||||
EventBus eventBus = EventBus();
|
|
||||||
eventBus.emit(EventName.loginEvent, {'status': false});
|
|
||||||
|
|
||||||
SmartDialog.dismiss().then((value) => Get.back());
|
SmartDialog.dismiss().then((value) => Get.back());
|
||||||
},
|
},
|
||||||
child: const Text('确认'),
|
child: const Text('确认'),
|
||||||
|
|||||||
@ -8,8 +8,10 @@ import 'package:hive/hive.dart';
|
|||||||
import 'package:pilipala/http/init.dart';
|
import 'package:pilipala/http/init.dart';
|
||||||
import 'package:pilipala/http/user.dart';
|
import 'package:pilipala/http/user.dart';
|
||||||
import 'package:pilipala/pages/home/index.dart';
|
import 'package:pilipala/pages/home/index.dart';
|
||||||
|
import 'package:pilipala/pages/media/index.dart';
|
||||||
import 'package:pilipala/utils/cookie.dart';
|
import 'package:pilipala/utils/cookie.dart';
|
||||||
import 'package:pilipala/utils/event_bus.dart';
|
import 'package:pilipala/utils/event_bus.dart';
|
||||||
|
import 'package:pilipala/utils/login.dart';
|
||||||
import 'package:pilipala/utils/storage.dart';
|
import 'package:pilipala/utils/storage.dart';
|
||||||
import 'package:webview_flutter/webview_flutter.dart';
|
import 'package:webview_flutter/webview_flutter.dart';
|
||||||
|
|
||||||
@ -94,11 +96,12 @@ class WebviewController extends GetxController {
|
|||||||
Box userInfoCache = GStrorage.userInfo;
|
Box userInfoCache = GStrorage.userInfo;
|
||||||
await userInfoCache.put('userInfoCache', result['data']);
|
await userInfoCache.put('userInfoCache', result['data']);
|
||||||
|
|
||||||
// 通知更新
|
|
||||||
eventBus.emit(EventName.loginEvent, {'status': true});
|
|
||||||
|
|
||||||
HomeController homeCtr = Get.find<HomeController>();
|
HomeController homeCtr = Get.find<HomeController>();
|
||||||
homeCtr.updateLoginStatus(true);
|
homeCtr.updateLoginStatus(true);
|
||||||
|
homeCtr.userFace.value = result['data'].face;
|
||||||
|
MediaController mediaCtr = Get.find<MediaController>();
|
||||||
|
mediaCtr.mid = result['data'].mid;
|
||||||
|
await LoginUtils.refreshLoginStatus(true);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
SmartDialog.show(builder: (context) {
|
SmartDialog.show(builder: (context) {
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
|
|||||||
30
lib/utils/login.dart
Normal file
30
lib/utils/login.dart
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:pilipala/pages/dynamics/index.dart';
|
||||||
|
import 'package:pilipala/pages/home/index.dart';
|
||||||
|
import 'package:pilipala/pages/media/index.dart';
|
||||||
|
import 'package:pilipala/pages/mine/index.dart';
|
||||||
|
|
||||||
|
class LoginUtils {
|
||||||
|
static Future refreshLoginStatus(bool status) async {
|
||||||
|
try {
|
||||||
|
// 更改我的页面登录状态
|
||||||
|
await Get.find<MineController>().resetUserInfo();
|
||||||
|
|
||||||
|
// 更改主页登录状态
|
||||||
|
HomeController homeCtr = Get.find<HomeController>();
|
||||||
|
homeCtr.updateLoginStatus(status);
|
||||||
|
|
||||||
|
MineController mineCtr = Get.find<MineController>();
|
||||||
|
mineCtr.userLogin.value = status;
|
||||||
|
|
||||||
|
DynamicsController dynamicsCtr = Get.find<DynamicsController>();
|
||||||
|
dynamicsCtr.userLogin.value = status;
|
||||||
|
|
||||||
|
MediaController mediaCtr = Get.find<MediaController>();
|
||||||
|
mediaCtr.userLogin.value = status;
|
||||||
|
} catch (err) {
|
||||||
|
SmartDialog.showToast('refreshLoginStatus error: ${err.toString()}');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user