初始化
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
import 'package:hgdj/hj_model/video_model.dart';
|
||||
import 'package:hgdj/hj_utils/api_service/mine_service.dart';
|
||||
import 'package:hgdj/hj_utils/const.dart';
|
||||
import 'package:hgdj/tools_base/base_list_controller.dart';
|
||||
|
||||
class UserWorkListLogic extends ListBaseLogic<VideoModel> {
|
||||
final int uid;
|
||||
final MediaStyle newsType;
|
||||
|
||||
UserWorkListLogic(this.uid, this.newsType);
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
loadData();
|
||||
}
|
||||
|
||||
//isRefresh 下拉刷新/加载更多;showLoading 重试时先清空显示 loading
|
||||
void loadData({bool isRefresh = true, bool showLoading = false}) {
|
||||
if (showLoading) {
|
||||
dataList = null;
|
||||
update();
|
||||
}
|
||||
fetchData(isRefresh: isRefresh, fetch: _fetch);
|
||||
}
|
||||
|
||||
Future<(List<VideoModel>?, bool)> _fetch(int page) async {
|
||||
final res = await MineService.fetchPublishes(
|
||||
page: page, uid: uid, newsType: newsType.searchRealm);
|
||||
return (res.list, res.hasNext ?? false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:hgdj/hj_page/user_center_page/view/user_work_list_logic.dart';
|
||||
import 'package:hgdj/hj_utils/const.dart';
|
||||
import 'package:hgdj/tools_base/loading/loading_center_widget.dart';
|
||||
import 'package:hgdj/tools_base/refresh/pull_refresh.dart';
|
||||
import 'package:hgdj/tools_base/unique_tag_mixin.dart';
|
||||
|
||||
import '../../../routers/jump_router.dart';
|
||||
import '../../cartoon/photo_gallery_item.dart';
|
||||
import '../../community/widget/community_post_widget.dart';
|
||||
import '../../home/home_cell_style/video_simple_cell.dart';
|
||||
|
||||
class UserWorkListView extends StatefulWidget {
|
||||
final int uid;
|
||||
final MediaStyle newsType;
|
||||
|
||||
const UserWorkListView(this.uid, this.newsType, {super.key});
|
||||
|
||||
@override
|
||||
State<UserWorkListView> createState() => _UserWorkListViewState();
|
||||
}
|
||||
|
||||
class _UserWorkListViewState extends State<UserWorkListView>
|
||||
with UniqueTagMixin {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GetBuilder<UserWorkListLogic>(
|
||||
init: UserWorkListLogic(widget.uid, widget.newsType),
|
||||
tag: uniqueTag,
|
||||
builder: (logic) {
|
||||
if (logic.isLoading) return const LoadingCenterWidget();
|
||||
if (logic.isEmptyData)
|
||||
return CErrorWidget(
|
||||
retryOnTap: () => logic.loadData(showLoading: true));
|
||||
return pullYsRefresh(
|
||||
onInit: (ctr) => logic.refreshCtr = ctr,
|
||||
onRefresh: (_) => logic.loadData(),
|
||||
onLoading: (_) => logic.loadData(isRefresh: false),
|
||||
child: _buildTypeList(logic),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildTypeList(UserWorkListLogic logic) {
|
||||
final list = logic.dataList!;
|
||||
// 帖子:单列列表
|
||||
if (widget.newsType == MediaStyle.Community) {
|
||||
return ListView.builder(
|
||||
padding: EdgeInsets.zero,
|
||||
itemCount: list.length,
|
||||
itemBuilder: (_, index) =>
|
||||
CommunityPostWidget(videoModel: list[index], videoModels: list),
|
||||
);
|
||||
}
|
||||
// 其余(影视/抖音/图集)都是双列网格,只差宽高比与 item 样式
|
||||
final isPic = widget.newsType == MediaStyle.Pic;
|
||||
final isShort = widget.newsType == MediaStyle.ShortVideo;
|
||||
return GridView.builder(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2,
|
||||
mainAxisSpacing: 12,
|
||||
crossAxisSpacing: 6,
|
||||
childAspectRatio: isShort || isPic ? 168 / 246 : 168 / 154,
|
||||
),
|
||||
itemCount: list.length,
|
||||
itemBuilder: (_, index) => isPic
|
||||
? PhotoGalleryItem(videoModel: list[index], textline: 1)
|
||||
: VideoSimpleCell(
|
||||
videoModel: list[index],
|
||||
textLines: isShort ? 1 : 2,
|
||||
isShowBottom: !isShort,
|
||||
onTap: () =>
|
||||
pushToVideoPage(videoModel: list[index], videoArr: list),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user