yumi-flutter/lib/modules/store/theme/store_theme_page.dart
2026-05-18 14:08:16 +08:00

101 lines
2.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:yumi/ui_kit/components/sc_page_list.dart';
import 'package:yumi/shared/data_sources/sources/repositories/sc_store_repository_imp.dart';
import 'package:yumi/shared/business_logic/models/res/store_list_res.dart';
import 'package:yumi/ui_kit/widgets/store/props_store_theme_detail_dialog.dart';
import 'package:yumi/ui_kit/widgets/store/store_bag_page_helpers.dart';
import 'package:yumi/modules/store/headdress/store_headdress_page.dart';
import '../../../shared/data_sources/models/enum/sc_currency_type.dart';
import '../../../shared/data_sources/models/enum/sc_props_type.dart';
///房间主题
class StoreThemePage extends SCPageList {
const StoreThemePage({super.key});
@override
SCPageListState createState() => _StoreThemePagePageState();
}
class _StoreThemePagePageState
extends SCPageListState<StoreListResBean, StoreThemePage> {
//折扣
double disCount = 1;
@override
void initState() {
super.initState();
enablePullUp = false;
isGridView = true;
gridViewCount = 3;
padding = EdgeInsets.symmetric(horizontal: 6.w);
backgroundColor = Colors.transparent;
gridDelegate = SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: gridViewCount,
mainAxisSpacing: 12.w,
crossAxisSpacing: 12.w,
childAspectRatio: 0.88,
);
loadData(1);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.transparent,
body:
items.isEmpty && isLoading
? const SCStoreGridSkeleton()
: buildList(context),
);
}
@override
Widget buildItem(StoreListResBean res) {
return SCStoreGridItemCard(
res: res.res,
discount: disCount,
coverBorderRadius: BorderRadius.all(Radius.circular(8.w)),
onDetailsTap: () => _showDetail(res.res),
);
}
void _showDetail(StoreListRes res) {
SmartDialog.show(
tag: "showPropsDetail",
alignment: Alignment.bottomCenter,
animationType: SmartAnimationType.fade,
builder: (_) {
return PropsStoreThemeDetailDialog(res, disCount);
},
);
}
///加载数据
@override
loadPage({
required int page,
required Function(List<StoreListResBean>) onSuccess,
Function? onErr,
}) async {
try {
List<StoreListResBean> beans = [];
var storeList = await SCStoreRepositoryImp().storeList(
SCCurrencyType.GOLD.name,
SCPropsType.THEME.name,
);
for (var value in storeList) {
beans.add(StoreListResBean(value, false));
}
onSuccess(beans);
} catch (e) {
if (onErr != null) {
onErr();
}
}
}
}