101 lines
2.8 KiB
Dart
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();
|
|
}
|
|
}
|
|
}
|
|
}
|