mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-24 12:32:40 +08:00
opt: login/logout
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -30,8 +30,9 @@ class DynamicsController extends GetxController
|
||||
RxList<int> tempBannedList = <int>[].obs;
|
||||
late List<Widget> tabsPageList;
|
||||
RxInt initialValue = 0.obs;
|
||||
RxBool userLogin = false.obs;
|
||||
dynamic userInfo;
|
||||
RxBool isLogin = false.obs;
|
||||
dynamic ownerMid;
|
||||
dynamic face;
|
||||
RxBool isLoadingDynamic = false.obs;
|
||||
List<UpItem> hasUpdatedUps = <UpItem>[];
|
||||
List<UpItem> allFollowedUps = <UpItem>[];
|
||||
@@ -40,10 +41,13 @@ class DynamicsController extends GetxController
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
userInfo = GStorage.userInfo.get('userInfoCache');
|
||||
userLogin.value = userInfo != null;
|
||||
super.onInit();
|
||||
|
||||
dynamic userInfo = GStorage.userInfo.get('userInfoCache');
|
||||
ownerMid = userInfo?.mid;
|
||||
face = userInfo?.face;
|
||||
isLogin.value = userInfo != null;
|
||||
|
||||
tabController = TabController(
|
||||
length: tabsConfig.length,
|
||||
vsync: this,
|
||||
@@ -52,9 +56,7 @@ class DynamicsController extends GetxController
|
||||
);
|
||||
tabsPageList =
|
||||
tabsConfig.map((e) => DynamicsTabPage(dynamicsType: e['tag'])).toList();
|
||||
}
|
||||
|
||||
void refreshNotifier() {
|
||||
queryFollowUp();
|
||||
}
|
||||
|
||||
@@ -223,7 +225,7 @@ class DynamicsController extends GetxController
|
||||
return;
|
||||
}
|
||||
var res = await FollowHttp.followings(
|
||||
vmid: userInfo.mid,
|
||||
vmid: ownerMid,
|
||||
pn: allFollowedUpsPage,
|
||||
ps: 50,
|
||||
orderType: 'attention',
|
||||
@@ -246,9 +248,11 @@ class DynamicsController extends GetxController
|
||||
}
|
||||
|
||||
Future queryFollowUp({type = 'init'}) async {
|
||||
if (!userLogin.value) {
|
||||
return {'status': false, 'msg': '账号未登录'};
|
||||
if (!isLogin.value) {
|
||||
upData.value.errMsg = '账号未登录';
|
||||
upData.refresh();
|
||||
}
|
||||
upData.value.errMsg = null;
|
||||
if (type == 'init') {
|
||||
upData.value.upList = [];
|
||||
upData.value.liveUsers = LiveUsers();
|
||||
@@ -258,13 +262,16 @@ class DynamicsController extends GetxController
|
||||
allFollowedUpsPage = 1;
|
||||
Future f1 = DynamicsHttp.followUp();
|
||||
Future f2 = FollowHttp.followings(
|
||||
vmid: userInfo.mid,
|
||||
pn: allFollowedUpsPage,
|
||||
ps: 50,
|
||||
orderType: 'attention');
|
||||
vmid: ownerMid,
|
||||
pn: allFollowedUpsPage,
|
||||
ps: 50,
|
||||
orderType: 'attention',
|
||||
);
|
||||
List<dynamic> ress = await Future.wait([f1, f2]);
|
||||
if (!ress[0]['status']) {
|
||||
SmartDialog.showToast("获取关注动态失败:${ress[0]['msg']}");
|
||||
upData.value.errMsg = ress[0]['msg'];
|
||||
upData.refresh();
|
||||
} else {
|
||||
upData.value.liveUsers = ress[0]['data'].liveUsers;
|
||||
hasUpdatedUps = ress[0]['data'].upList!;
|
||||
@@ -286,16 +293,18 @@ class DynamicsController extends GetxController
|
||||
}
|
||||
upData.value.upList =
|
||||
allFollowedUpsTotal > 0 ? allFollowedUps : hasUpdatedUps;
|
||||
return ress[0];
|
||||
}
|
||||
var res = await DynamicsHttp.followUp();
|
||||
if (res['status']) {
|
||||
upData.value = res['data'];
|
||||
if (upData.value.upList!.isEmpty) {
|
||||
mid.value = -1;
|
||||
} else {
|
||||
var res = await DynamicsHttp.followUp();
|
||||
if (res['status']) {
|
||||
upData.value = res['data'];
|
||||
if (upData.value.upList!.isEmpty) {
|
||||
mid.value = -1;
|
||||
}
|
||||
} else {
|
||||
upData.value.errMsg = res['msg'];
|
||||
upData.refresh();
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
onSelectUp(mid) async {
|
||||
@@ -308,8 +317,8 @@ class DynamicsController extends GetxController
|
||||
}
|
||||
|
||||
onRefresh() async {
|
||||
queryFollowUp();
|
||||
await Future.wait(<Future>[
|
||||
queryFollowUp(),
|
||||
Get.find<DynamicsTabController>(
|
||||
tag: tabsConfig[tabController.index]['tag'])
|
||||
.onRefresh()
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:PiliPlus/common/widgets/http_error.dart';
|
||||
import 'package:PiliPlus/http/msg.dart';
|
||||
import 'package:PiliPlus/models/common/dynamics_type.dart';
|
||||
import 'package:PiliPlus/models/common/up_panel_position.dart';
|
||||
@@ -15,7 +14,6 @@ import 'package:PiliPlus/utils/storage.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
|
||||
import 'package:nil/nil.dart';
|
||||
|
||||
import 'controller.dart';
|
||||
import 'widgets/up_panel.dart';
|
||||
@@ -42,9 +40,7 @@ class DynamicsPage extends StatefulWidget {
|
||||
class _DynamicsPageState extends State<DynamicsPage>
|
||||
with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin {
|
||||
final DynamicsController _dynamicsController = Get.put(DynamicsController());
|
||||
late Future _futureBuilderFutureUp;
|
||||
late UpPanelPosition upPanelPosition;
|
||||
StreamSubscription? _listener;
|
||||
|
||||
@override
|
||||
bool get wantKeepAlive => true;
|
||||
@@ -64,7 +60,7 @@ class _DynamicsPageState extends State<DynamicsPage>
|
||||
}),
|
||||
),
|
||||
onPressed: () {
|
||||
if (GStorage.isLogin) {
|
||||
if (_dynamicsController.isLogin.value) {
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
useSafeArea: true,
|
||||
@@ -85,24 +81,6 @@ class _DynamicsPageState extends State<DynamicsPage>
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_futureBuilderFutureUp = _dynamicsController.queryFollowUp();
|
||||
// _dynamicsController.tabController =
|
||||
// TabController(vsync: this, length: DynamicsType.values.length);
|
||||
// ..addListener(() {
|
||||
// if (!_dynamicsController.tabController.indexIsChanging) {
|
||||
// // if (!mounted) return;
|
||||
// // debugPrint('indexChanging: ${_dynamicsController.tabController.index}');
|
||||
// _dynamicsController
|
||||
// .onSelectType(_dynamicsController.tabController.index);
|
||||
// }
|
||||
// });
|
||||
_listener = _dynamicsController.userLogin.listen((status) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_futureBuilderFutureUp = _dynamicsController.queryFollowUp();
|
||||
});
|
||||
}
|
||||
});
|
||||
upPanelPosition = UpPanelPosition.values[GStorage.setting.get(
|
||||
SettingBoxKey.upPanelPosition,
|
||||
defaultValue: UpPanelPosition.leftFixed.index)];
|
||||
@@ -123,7 +101,6 @@ class _DynamicsPageState extends State<DynamicsPage>
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_listener?.cancel();
|
||||
_dynamicsController.tabController.removeListener(() {});
|
||||
_dynamicsController.scrollController.removeListener(() {});
|
||||
super.dispose();
|
||||
@@ -136,41 +113,25 @@ class _DynamicsPageState extends State<DynamicsPage>
|
||||
? Theme.of(context).colorScheme.surface
|
||||
: Colors.transparent,
|
||||
width: 64,
|
||||
child: FutureBuilder(
|
||||
future: _futureBuilderFutureUp,
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.connectionState == ConnectionState.done) {
|
||||
if (snapshot.data == null) {
|
||||
return nil;
|
||||
}
|
||||
// TODO: refactor
|
||||
if (snapshot.data is! Map) {
|
||||
return HttpError(
|
||||
isSliver: false,
|
||||
callback: () => setState(() {
|
||||
_futureBuilderFutureUp = _dynamicsController.queryFollowUp();
|
||||
}),
|
||||
);
|
||||
}
|
||||
Map data = snapshot.data;
|
||||
if (data['status']) {
|
||||
return Obx(() => UpPanel(_dynamicsController.upData.value,
|
||||
_dynamicsController.scrollController));
|
||||
} else {
|
||||
return Center(
|
||||
child: IconButton(
|
||||
icon: Icon(Icons.refresh),
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
_futureBuilderFutureUp =
|
||||
_dynamicsController.queryFollowUp();
|
||||
});
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
child: Obx(
|
||||
() {
|
||||
if (_dynamicsController.upData.value.upList == null &&
|
||||
_dynamicsController.upData.value.liveUsers == null) {
|
||||
return const SizedBox.shrink();
|
||||
} else if (_dynamicsController.upData.value.errMsg != null) {
|
||||
return Center(
|
||||
child: IconButton(
|
||||
icon: Icon(Icons.refresh),
|
||||
onPressed: () {
|
||||
_dynamicsController.queryFollowUp();
|
||||
},
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return nil;
|
||||
return UpPanel(
|
||||
key: ValueKey(_dynamicsController.upData.value),
|
||||
dynamicsController: _dynamicsController,
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
import 'package:PiliPlus/pages/dynamics/controller.dart';
|
||||
import 'package:PiliPlus/utils/extension.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:PiliPlus/common/widgets/network_img_layer.dart';
|
||||
import 'package:PiliPlus/models/dynamics/up.dart';
|
||||
import 'package:PiliPlus/models/live/item.dart';
|
||||
import 'package:PiliPlus/pages/dynamics/controller.dart';
|
||||
import 'package:PiliPlus/utils/feed_back.dart';
|
||||
import 'package:PiliPlus/utils/storage.dart';
|
||||
import 'package:PiliPlus/utils/utils.dart';
|
||||
|
||||
class UpPanel extends StatefulWidget {
|
||||
final FollowUpModel? upData;
|
||||
final ScrollController scrollController;
|
||||
const UpPanel(this.upData, this.scrollController, {super.key});
|
||||
final DynamicsController dynamicsController;
|
||||
const UpPanel({
|
||||
required this.dynamicsController,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
State<UpPanel> createState() => _UpPanelState();
|
||||
@@ -19,27 +21,21 @@ class UpPanel extends StatefulWidget {
|
||||
|
||||
class _UpPanelState extends State<UpPanel> {
|
||||
int currentMid = -1;
|
||||
List<UpItem> upList = [];
|
||||
List<LiveUserItem> liveList = [];
|
||||
dynamic userInfo;
|
||||
List<UpItem> get upList =>
|
||||
widget.dynamicsController.upData.value.upList ?? <UpItem>[];
|
||||
List<LiveUserItem> get liveList =>
|
||||
widget.dynamicsController.upData.value.liveUsers?.items ??
|
||||
<LiveUserItem>[];
|
||||
bool _showLiveItems = false;
|
||||
late DynamicsController dynamicsController;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
userInfo = GStorage.userInfo.get('userInfoCache');
|
||||
dynamicsController = Get.find<DynamicsController>();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
upList = widget.upData!.upList!;
|
||||
liveList = widget.upData!.liveUsers?.items ?? [];
|
||||
// return const SizedBox();
|
||||
if (widget.dynamicsController.isLogin.value.not) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
return CustomScrollView(
|
||||
physics: const AlwaysScrollableScrollPhysics(),
|
||||
controller: widget.scrollController,
|
||||
controller: widget.dynamicsController.scrollController,
|
||||
slivers: [
|
||||
SliverToBoxAdapter(
|
||||
child: SizedBox(
|
||||
@@ -93,9 +89,9 @@ class _UpPanelState extends State<UpPanel> {
|
||||
upItemBuild(UpItem(face: '', uname: '全部动态', mid: -1), 0),
|
||||
upItemBuild(
|
||||
UpItem(
|
||||
face: userInfo?.face,
|
||||
uname: '我',
|
||||
mid: userInfo?.mid,
|
||||
face: widget.dynamicsController.face,
|
||||
mid: widget.dynamicsController.ownerMid,
|
||||
),
|
||||
1,
|
||||
),
|
||||
@@ -120,8 +116,9 @@ class _UpPanelState extends State<UpPanel> {
|
||||
if (data.type == 'up') {
|
||||
currentMid = data.mid;
|
||||
// dynamicsController.mid.value = data.mid;
|
||||
dynamicsController.upInfo.value = data;
|
||||
dynamicsController.onSelectUp(data.mid);
|
||||
widget.dynamicsController
|
||||
..upInfo.value = data
|
||||
..onSelectUp(data.mid);
|
||||
// int liveLen = liveList.length;
|
||||
// int upLen = upList.length;
|
||||
// double itemWidth = contentWidth + itemPadding.horizontal;
|
||||
|
||||
Reference in New Issue
Block a user