From bc83d260736fca1bc1f517fd9e8b18c1e97904ac Mon Sep 17 00:00:00 2001 From: guozhigq Date: Thu, 27 Jul 2023 23:35:20 +0800 Subject: [PATCH] =?UTF-8?q?mod:=20=E7=94=A8=E6=88=B7=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=8A=95=E7=A8=BF=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/fan/controller.dart | 11 ++- lib/pages/fan/view.dart | 2 +- lib/pages/follow/controller.dart | 11 ++- lib/pages/follow/view.dart | 12 ++- lib/pages/member/archive/controller.dart | 2 + lib/pages/member/archive/view.dart | 108 ++++++++++++++++++++--- lib/pages/member/view.dart | 2 +- lib/pages/member/widgets/profile.dart | 75 +++++++++------- lib/pages/mine/controller.dart | 7 ++ 9 files changed, 180 insertions(+), 50 deletions(-) diff --git a/lib/pages/fan/controller.dart b/lib/pages/fan/controller.dart index 6639e5ea..c8ca6f08 100644 --- a/lib/pages/fan/controller.dart +++ b/lib/pages/fan/controller.dart @@ -9,13 +9,22 @@ class FansController extends GetxController { int pn = 1; int total = 0; RxList fansList = [FansItemModel()].obs; + late int mid; + late String name; + + @override + void onInit() { + super.onInit(); + mid = int.parse(Get.parameters['mid'] ?? user.get(UserBoxKey.userMid)); + name = Get.parameters['name'] ?? user.get(UserBoxKey.userName); + } Future queryFans(type) async { if (type == 'init') { pn = 1; } var res = await FanHttp.fans( - vmid: user.get(UserBoxKey.userMid), + vmid: mid, pn: pn, ps: 20, orderType: 'attention', diff --git a/lib/pages/fan/view.dart b/lib/pages/fan/view.dart index 08bbb3d4..e17d87d2 100644 --- a/lib/pages/fan/view.dart +++ b/lib/pages/fan/view.dart @@ -46,7 +46,7 @@ class _FansPageState extends State { centerTitle: false, titleSpacing: 0, title: Text( - '我的粉丝', + '${_fansController.name}的粉丝', style: Theme.of(context).textTheme.titleMedium, ), ), diff --git a/lib/pages/follow/controller.dart b/lib/pages/follow/controller.dart index 49fbdbd4..ebb95a75 100644 --- a/lib/pages/follow/controller.dart +++ b/lib/pages/follow/controller.dart @@ -9,13 +9,22 @@ class FollowController extends GetxController { int pn = 1; int total = 0; RxList followList = [FollowItemModel()].obs; + late int mid; + late String name; + + @override + void onInit() { + super.onInit(); + mid = int.parse(Get.parameters['mid'] ?? user.get(UserBoxKey.userMid)); + name = Get.parameters['name'] ?? user.get(UserBoxKey.userName); + } Future queryFollowings(type) async { if (type == 'init') { pn = 1; } var res = await FollowHttp.followings( - vmid: user.get(UserBoxKey.userMid), + vmid: mid, pn: pn, ps: 20, orderType: 'attention', diff --git a/lib/pages/follow/view.dart b/lib/pages/follow/view.dart index 37cd466a..ec46c0c5 100644 --- a/lib/pages/follow/view.dart +++ b/lib/pages/follow/view.dart @@ -46,7 +46,7 @@ class _FollowPageState extends State { titleSpacing: 0, centerTitle: false, title: Text( - '我的关注', + '${_followController.name}的关注', style: Theme.of(context).textTheme.titleMedium, ), ), @@ -72,9 +72,13 @@ class _FollowPageState extends State { ), ); } else { - return HttpError( - errMsg: data['msg'], - fn: () => _followController.queryFollowings('init'), + return CustomScrollView( + slivers: [ + HttpError( + errMsg: data['msg'], + fn: () => _followController.queryFollowings('init'), + ) + ], ); } } else { diff --git a/lib/pages/member/archive/controller.dart b/lib/pages/member/archive/controller.dart index 52400893..e893a07d 100644 --- a/lib/pages/member/archive/controller.dart +++ b/lib/pages/member/archive/controller.dart @@ -4,6 +4,7 @@ import 'package:pilipala/http/member.dart'; class ArchiveController extends GetxController { int? mid; int pn = 1; + int count = 0; @override void onInit() { @@ -15,6 +16,7 @@ class ArchiveController extends GetxController { Future getMemberArchive() async { var res = await MemberHttp.memberArchive(mid: mid, pn: pn); if (res['status']) { + count = res['data'].page['count']; pn += 1; } return res; diff --git a/lib/pages/member/archive/view.dart b/lib/pages/member/archive/view.dart index e66f157b..d477ae13 100644 --- a/lib/pages/member/archive/view.dart +++ b/lib/pages/member/archive/view.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:loading_more_list/loading_more_list.dart'; @@ -40,7 +41,6 @@ class _ArchivePanelState extends State return PullToRefreshHeader(info, lastRefreshTime); }, ), - const SizedBox(height: 4), Expanded( child: LoadingMoreList( ListConfig( @@ -49,9 +49,7 @@ class _ArchivePanelState extends State (BuildContext c, VListItemModel item, int index) { return VideoCardH(videoItem: item); }, - indicatorBuilder: (context, status) { - return const Center(child: Text('加载中')); - }, + indicatorBuilder: _buildIndicator, ), ), ) @@ -61,18 +59,104 @@ class _ArchivePanelState extends State ), ); } + + Widget _buildIndicator(BuildContext context, IndicatorStatus status) { + TextStyle style = + TextStyle(fontSize: 13, color: Theme.of(context).colorScheme.outline); + Widget? widget; + switch (status) { + case IndicatorStatus.none: + widget = Container(height: 0.0); + break; + case IndicatorStatus.loadingMoreBusying: + widget = Text('加载中...', style: style); + widget = _setbackground(false, widget, height: 60.0); + break; + case IndicatorStatus.fullScreenBusying: + widget = Text('加载中...', style: style); + widget = _setbackground(true, widget); + break; + case IndicatorStatus.error: + + /// TODO 异常逻辑 + widget = Text('没有更多了', style: style); + widget = _setbackground(false, widget); + + widget = GestureDetector( + onTap: () {}, + child: widget, + ); + + break; + case IndicatorStatus.fullScreenError: + + /// TODO 异常逻辑 + widget = Text('没有更多了', style: style); + widget = _setbackground(true, widget); + widget = GestureDetector( + onTap: () {}, + child: widget, + ); + break; + case IndicatorStatus.noMoreLoad: + widget = Text('没有更多了', style: style); + widget = _setbackground(false, widget, height: 60.0); + break; + case IndicatorStatus.empty: + widget = Text('用户没有投稿', style: style); + widget = _setbackground(true, widget); + break; + } + return widget; + } + + Widget _setbackground(bool full, Widget widget, {double height = 100}) { + widget = Padding( + padding: height == double.infinity + ? EdgeInsets.zero + : EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom), + child: Container( + width: double.infinity, + height: height, + color: Theme.of(context).colorScheme.background, + alignment: Alignment.center, + child: widget, + ), + ); + return widget; + } + + Widget getIndicator(BuildContext context) { + final TargetPlatform platform = Theme.of(context).platform; + return platform == TargetPlatform.iOS + ? const CupertinoActivityIndicator( + animating: true, + radius: 16.0, + ) + : CircularProgressIndicator( + strokeWidth: 2.0, + valueColor: + AlwaysStoppedAnimation(Theme.of(context).primaryColor), + ); + } } class LoadMoreListSource extends LoadingMoreBase { final ArchiveController _archiveController = Get.put(ArchiveController()); + @override - Future loadData([bool isloadMoreAction = false]) { - return Future(() async { - var res = await _archiveController.getMemberArchive(); - if (res['status']) { - addAll(res['data'].list.vlist); - } - return true; - }); + Future loadData([bool isloadMoreAction = false]) async { + bool isSuccess = false; + var res = await _archiveController.getMemberArchive(); + if (res['status']) { + addAll(res['data'].list.vlist); + } + print(length); + if (length < res['data'].page['count']) { + isSuccess = true; + } else { + isSuccess = false; + } + return isSuccess; } } diff --git a/lib/pages/member/view.dart b/lib/pages/member/view.dart index c22d7b73..6eafbe6f 100644 --- a/lib/pages/member/view.dart +++ b/lib/pages/member/view.dart @@ -108,7 +108,7 @@ class _MemberPageState extends State const SizedBox(height: 14), Row( children: [ - Expanded( + Flexible( child: Text( _memberController .memberInfo.value.name!, diff --git a/lib/pages/member/widgets/profile.dart b/lib/pages/member/widgets/profile.dart index c76cd39b..d8dc651a 100644 --- a/lib/pages/member/widgets/profile.dart +++ b/lib/pages/member/widgets/profile.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:pilipala/common/widgets/network_img_layer.dart'; import 'package:pilipala/models/live/item.dart'; @@ -81,42 +82,54 @@ Widget profile(ctr, {loadingStatus = false}) { mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ - Column( - children: [ - Text( - !loadingStatus - ? ctr.userStat!['following'].toString() - : '-', - style: - const TextStyle(fontWeight: FontWeight.bold), - ), - Text( - '关注', - style: TextStyle( - fontSize: Theme.of(context) - .textTheme - .labelMedium! - .fontSize), - ) - ], - ), - Column( - children: [ - Text( + InkWell( + onTap: () { + Get.toNamed( + '/follow?mid=${memberInfo.mid}&name=${memberInfo.name}'); + }, + child: Column( + children: [ + Text( !loadingStatus - ? Utils.numFormat( - ctr.userStat!['follower'], - ) + ? ctr.userStat!['following'].toString() : '-', style: const TextStyle( - fontWeight: FontWeight.bold)), - Text('粉丝', + fontWeight: FontWeight.bold), + ), + Text( + '关注', style: TextStyle( fontSize: Theme.of(context) .textTheme .labelMedium! - .fontSize)) - ], + .fontSize), + ) + ], + ), + ), + InkWell( + onTap: () { + Get.toNamed( + '/fan?mid=${memberInfo.mid}&name=${memberInfo.name}'); + }, + child: Column( + children: [ + Text( + !loadingStatus + ? Utils.numFormat( + ctr.userStat!['follower'], + ) + : '-', + style: const TextStyle( + fontWeight: FontWeight.bold)), + Text('粉丝', + style: TextStyle( + fontSize: Theme.of(context) + .textTheme + .labelMedium! + .fontSize)) + ], + ), ), Column( children: [ @@ -172,7 +185,9 @@ Widget profile(ctr, {loadingStatus = false}) { ) ] else ...[ TextButton( - onPressed: () {}, + onPressed: () { + SmartDialog.showToast('功能开发中 💪'); + }, style: TextButton.styleFrom( padding: const EdgeInsets.only(left: 80, right: 80), foregroundColor: diff --git a/lib/pages/mine/controller.dart b/lib/pages/mine/controller.dart index 0be8fa8c..6d515243 100644 --- a/lib/pages/mine/controller.dart +++ b/lib/pages/mine/controller.dart @@ -36,6 +36,13 @@ class MineController extends GetxController { 'pageTitle': '登录bilibili', }, ); + } else { + int mid = user.get(UserBoxKey.userMid); + String face = user.get(UserBoxKey.userFace); + Get.toNamed( + '/member?mid=$mid', + arguments: {'face': face}, + ); } }