初始化

This commit is contained in:
谢宇宁
2026-09-15 15:44:13 +07:00
commit a23ba685e9
1065 changed files with 101122 additions and 0 deletions
@@ -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),
),
);
}
}