feat: 用户投稿
This commit is contained in:
22
lib/pages/member/archive/controller.dart
Normal file
22
lib/pages/member/archive/controller.dart
Normal file
@ -0,0 +1,22 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:pilipala/http/member.dart';
|
||||
|
||||
class ArchiveController extends GetxController {
|
||||
int? mid;
|
||||
int pn = 1;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
mid = int.parse(Get.parameters['mid']!);
|
||||
}
|
||||
|
||||
// 获取用户投稿
|
||||
Future getMemberArchive() async {
|
||||
var res = await MemberHttp.memberArchive(mid: mid, pn: pn);
|
||||
if (res['status']) {
|
||||
pn += 1;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
4
lib/pages/member/archive/index.dart
Normal file
4
lib/pages/member/archive/index.dart
Normal file
@ -0,0 +1,4 @@
|
||||
library archive_panel;
|
||||
|
||||
export './controller.dart';
|
||||
export 'index.dart';
|
||||
77
lib/pages/member/archive/view.dart
Normal file
77
lib/pages/member/archive/view.dart
Normal file
@ -0,0 +1,77 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:loading_more_list/loading_more_list.dart';
|
||||
import 'package:pilipala/common/widgets/pull_to_refresh_header.dart';
|
||||
import 'package:pilipala/common/widgets/video_card_h.dart';
|
||||
import 'package:pilipala/models/member/archive.dart';
|
||||
import 'package:pilipala/pages/member/archive/index.dart';
|
||||
import 'package:pull_to_refresh_notification/pull_to_refresh_notification.dart';
|
||||
|
||||
class ArchivePanel extends StatefulWidget {
|
||||
const ArchivePanel({super.key});
|
||||
|
||||
@override
|
||||
State<ArchivePanel> createState() => _ArchivePanelState();
|
||||
}
|
||||
|
||||
class _ArchivePanelState extends State<ArchivePanel>
|
||||
with AutomaticKeepAliveClientMixin {
|
||||
DateTime lastRefreshTime = DateTime.now();
|
||||
late final LoadMoreListSource source = LoadMoreListSource();
|
||||
|
||||
@override
|
||||
bool get wantKeepAlive => true;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return PullToRefreshNotification(
|
||||
onRefresh: () async {
|
||||
await Future.delayed(const Duration(seconds: 1));
|
||||
return true;
|
||||
},
|
||||
maxDragOffset: 50,
|
||||
child: GlowNotificationWidget(
|
||||
Column(
|
||||
children: <Widget>[
|
||||
// 下拉刷新指示器
|
||||
PullToRefreshContainer(
|
||||
(PullToRefreshScrollNotificationInfo? info) {
|
||||
return PullToRefreshHeader(info, lastRefreshTime);
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Expanded(
|
||||
child: LoadingMoreList<VListItemModel>(
|
||||
ListConfig<VListItemModel>(
|
||||
sourceList: source,
|
||||
itemBuilder:
|
||||
(BuildContext c, VListItemModel item, int index) {
|
||||
return VideoCardH(videoItem: item);
|
||||
},
|
||||
indicatorBuilder: (context, status) {
|
||||
return const Center(child: Text('加载中'));
|
||||
},
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
showGlowLeading: false,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class LoadMoreListSource extends LoadingMoreBase<VListItemModel> {
|
||||
final ArchiveController _archiveController = Get.put(ArchiveController());
|
||||
@override
|
||||
Future<bool> loadData([bool isloadMoreAction = false]) {
|
||||
return Future<bool>(() async {
|
||||
var res = await _archiveController.getMemberArchive();
|
||||
if (res['status']) {
|
||||
addAll(res['data'].list.vlist);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,7 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:pilipala/http/member.dart';
|
||||
import 'package:pilipala/models/member/archive.dart';
|
||||
import 'package:pilipala/models/member/info.dart';
|
||||
import 'package:pilipala/utils/storage.dart';
|
||||
import 'package:pilipala/utils/wbi_sign.dart';
|
||||
@ -13,6 +14,8 @@ class MemberController extends GetxController {
|
||||
String? heroTag;
|
||||
Box user = GStrorage.user;
|
||||
late int ownerMid;
|
||||
// 投稿列表
|
||||
RxList<VListItemModel>? archiveList = [VListItemModel()].obs;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
@ -26,14 +29,7 @@ class MemberController extends GetxController {
|
||||
// 获取用户信息
|
||||
Future<Map<String, dynamic>> getInfo() async {
|
||||
await getMemberStat();
|
||||
String params = await WbiSign().makSign({
|
||||
'mid': mid,
|
||||
'token': '',
|
||||
'platform': 'web',
|
||||
'web_location': 1550101,
|
||||
});
|
||||
params = '?$params';
|
||||
var res = await MemberHttp.memberInfo(params: params);
|
||||
var res = await MemberHttp.memberInfo(mid: mid);
|
||||
if (res['status']) {
|
||||
memberInfo.value = res['data'];
|
||||
}
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:loading_more_list/loading_more_list.dart';
|
||||
import 'package:pilipala/common/widgets/network_img_layer.dart';
|
||||
import 'package:pilipala/models/live/item.dart';
|
||||
import 'package:pilipala/models/user/stat.dart';
|
||||
import 'package:pilipala/pages/member/archive/view.dart';
|
||||
import 'package:pilipala/pages/member/index.dart';
|
||||
import 'package:pilipala/utils/utils.dart';
|
||||
|
||||
@ -19,13 +19,15 @@ class MemberPage extends StatefulWidget {
|
||||
class _MemberPageState extends State<MemberPage>
|
||||
with SingleTickerProviderStateMixin {
|
||||
final MemberController _memberController = Get.put(MemberController());
|
||||
Future? _futureBuilderFuture;
|
||||
final ScrollController _extendNestCtr = ScrollController();
|
||||
late TabController _tabController;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_tabController = TabController(length: 3, vsync: this);
|
||||
_tabController = TabController(length: 3, vsync: this, initialIndex: 2);
|
||||
_futureBuilderFuture = _memberController.getInfo();
|
||||
}
|
||||
|
||||
@override
|
||||
@ -90,7 +92,7 @@ class _MemberPageState extends State<MemberPage>
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 18, right: 18),
|
||||
child: FutureBuilder(
|
||||
future: _memberController.getInfo(),
|
||||
future: _futureBuilderFuture,
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.connectionState ==
|
||||
ConnectionState.done) {
|
||||
@ -264,7 +266,7 @@ class _MemberPageState extends State<MemberPage>
|
||||
children: [
|
||||
Text('主页'),
|
||||
Text('动态'),
|
||||
Text('投稿'),
|
||||
ArchivePanel(),
|
||||
],
|
||||
))
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user