初始化

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,52 @@
import 'package:get/get.dart';
import 'package:hgdj/hj_utils/api_service/ai_service.dart';
import 'package:hgdj/tools_base/base_list_controller.dart';
import '../ai_home_logic.dart';
import '../ai_mod_detail_page.dart';
import '../ai_sub_type/ai_function_logic.dart';
import '../models/ai_square_model.dart';
class AiSquareLogic extends ListBaseLogic<AISquareItemModel> {
@override
void onReady() {
super.onReady();
loadData();
}
//isRefresh=true 下拉刷新 / false 上拉加载更多
void loadData({bool isRefresh = true}) =>
fetchData(isRefresh: isRefresh, fetch: _fetch);
Future<(List<AISquareItemModel>?, bool)> _fetch(int page) async {
final resp = await AIService.getPlazaList(page);
return (resp?.list, resp?.hasNext ?? false);
}
//「做同款」:脱衣/图生视频/绘画直接切到对应 Tab,换脸类先查模版还在不在
void makeTheSameStyle(AISquareItemModel model) {
final logic = Get.find<AiHomeLogic>();
switch (AiTypeCode.fromServerCode(model.type)) {
case AiType.autoStrip:
logic.jumpSubModule(3);
case AiType.imageToVideo:
logic.jumpSubModule(1);
case AiType.aiPaint:
logic.jumpSubModule(2);
default:
jumpToChangeFace(model);
}
}
//模版还在就进详情,被下架了退回换脸 Tab
void jumpToChangeFace(AISquareItemModel model) async {
final mod = await AIService.getModelInfo(model.template, model.type);
if (mod != null) {
Get.to(() => AIModDetailPage(mod));
return;
}
final isImageFace =
AiTypeCode.fromServerCode(model.type) == AiType.imageChangeFace;
Get.find<AiHomeLogic>().jumpSubModule(isImageFace ? 5 : 4);
}
}
@@ -0,0 +1,46 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:hgdj/hj_utils/screen.dart';
import 'package:hgdj/tools_base/loading/loading_center_widget.dart';
import 'package:hgdj/tools_base/refresh/pull_refresh.dart';
import '../widgets/ai_square_cell.dart';
import 'ai_square_logic.dart';
class AiSquarePage extends StatelessWidget {
AiSquarePage({super.key});
@override
Widget build(BuildContext context) {
return GetBuilder<AiSquareLogic>(
init: AiSquareLogic(),
builder: (logic) {
return Scaffold(
body: pullYsRefresh(
onRefresh: (c) => logic.loadData(),
onLoading: (c) => logic.loadData(isRefresh: false),
onInit: (ctr) => logic.refreshCtr = ctr,
child: _buildContent(logic),
),
);
},
);
}
Widget _buildContent(AiSquareLogic logic) {
if (logic.isLoading) return LoadingCenterWidget();
if (logic.isEmptyData) {
return CErrorWidget(retryOnTap: () => logic.loadData());
}
final list = logic.dataList!;
return ListView.separated(
padding: const EdgeInsets.symmetric(vertical: 12),
separatorBuilder: (context, index) => 18.sizeBoxH,
itemCount: list.length,
itemBuilder: (ctx, index) => AISquareCell(
model: list[index],
onTap: () => logic.makeTheSameStyle(list[index]),
),
);
}
}