初始化
This commit is contained in:
@@ -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]),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user