You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aku_new_community/lib/ui/market/market_page.dart

1058 lines
33 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// import 'package:aku_new_community/base/base_style.dart';
import 'dart:ui' as ui;
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/constants/saas_api.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/model/good/market_swiper_model.dart';
import 'package:aku_new_community/models/market/goods_popular_model.dart';
import 'package:aku_new_community/models/market/integral_goods_list_model.dart';
import 'package:aku_new_community/models/market/market_all_category_model.dart';
import 'package:aku_new_community/models/market/market_category_model.dart';
import 'package:aku_new_community/models/market/market_statistics_model.dart';
import 'package:aku_new_community/models/market/order/goods_home_model.dart';
import 'package:aku_new_community/provider/app_provider.dart';
import 'package:aku_new_community/ui/community/community_func.dart';
import 'package:aku_new_community/ui/market/integral/integral_exchange_page.dart';
import 'package:aku_new_community/ui/market/search/good_detail_page.dart';
import 'package:aku_new_community/ui/market/search/search_goods_page.dart';
import 'package:aku_new_community/ui/market/shop_car/shop_car_page.dart';
import 'package:aku_new_community/ui/market/widget/animated_home_background.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/utils/network/base_list_model.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:aku_new_community/widget/beeImageNetwork.dart';
import 'package:aku_new_community/widget/home/home_sliver_app_bar.dart';
import 'package:aku_new_community/widget/others/rectIndicator.dart';
import 'package:card_swiper/card_swiper.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:get/get.dart';
import 'package:provider/provider.dart';
import 'category/new_category_page.dart';
import 'market_home_goods_card.dart';
import 'order/order_page.dart';
class MarketPage extends StatefulWidget {
MarketPage({Key? key}) : super(key: key);
@override
_MarketPageState createState() => _MarketPageState();
}
class _MarketPageState extends State<MarketPage>
with TickerProviderStateMixin, AutomaticKeepAliveClientMixin {
late EasyRefreshController _refreshController;
late ScrollController _sliverListController;
late ScrollController _horListController;
GlobalKey<HomeSliverAppBarState> _sliverAppBarGlobalKey = GlobalKey();
GlobalKey<AnimatedHomeBackgroundState> _animatedBackgroundState = GlobalKey();
int _pageNum = 1;
int _size = 10;
int _pageCount = 0;
double MessageHeight = 76.w;
double bannerHeight = 260.w;
double buttonsHeight = 334.w;
double searchHeight = 74.w;
double hotGoodHeight = 288.w;
MarketStatisticsModel? _statistics;
double tabBarHeight = 40.w;
late TabController _tabController;
List<MarketSwiperModel> _marketSwiperModels = [];
List<MarketAllCategoryModel> _categoryModels = [];
OrderType _orderType = OrderType.NORMAL;
String priceIcon = R.ASSETS_ICONS_ICON_PRICE_NORMAL_PNG;
List<MarketCategoryModel> _goodsClassificationList = [];
List<GoodsHomeModel> _goodsHomeModelList = [];
List<GoodsPopularModel> _goodsPopularModelList = [];
List<IntegralGoodsListModel> _integralModelList = [];
int? orderBySalesVolume;
int? orderByPrice;
Future updateMarketInfo() async {
_pageNum = 1;
BaseListModel baseListModel = await NetUtil().getList(
SAASAPI.market.good.recommend,
params: {
'pageNum': _pageNum,
'size': _size,
'orderBySalesVolume': orderBySalesVolume,
'orderByPrice': orderByPrice,
},
);
if (baseListModel.rows.isNotEmpty) {
_goodsHomeModelList =
(baseListModel.rows).map((e) => GoodsHomeModel.fromJson(e)).toList();
}
_pageCount = baseListModel.total;
}
Future loadMarketInfo() async {
BaseListModel baseListModel = await NetUtil().getList(
SAASAPI.market.good.recommend,
params: {
'pageNum': _pageNum,
'size': _size,
'orderBySalesVolume': orderBySalesVolume,
'orderByPrice': orderByPrice,
},
);
if (baseListModel.rows.isNotEmpty) {
_goodsHomeModelList.addAll(
(baseListModel.rows).map((e) => GoodsHomeModel.fromJson(e)).toList());
}
_pageCount = baseListModel.total;
}
@override
void initState() {
super.initState();
for (int i = 0; i < 10; i++) {
_goodsClassificationList
.add(MarketCategoryModel(id: 0, name: '', imgUrls: []));
}
for (int i = 0; i < 6; i++) {
_goodsPopularModelList.add(
GoodsPopularModel(id: 0, skuName: '', mainPhoto: '', viewsNum: 0));
}
_sliverListController = ScrollController();
_horListController = ScrollController();
_tabController = TabController(initialIndex: 0, length: 3, vsync: this);
_refreshController = EasyRefreshController();
///动态appbar导致 refresh组件刷新判出现问题 首次刷新手动触发
Future.delayed(Duration(milliseconds: 0), () async {
await _refresh();
setState(() {});
});
}
@override
void dispose() {
_refreshController.dispose();
_sliverListController.dispose();
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
super.build(context);
final mediaWidth = MediaQuery.of(context).size.width;
return Scaffold(
body: Stack(
children: [
Container(
height: 530.w,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [
Color(0xFFFFFFFF),
Color(0xFFFFF9D1),
],
)),
),
EasyRefresh.custom(
firstRefresh: false,
enableControlFinishLoad: false,
header: MaterialHeader(),
footer: MaterialFooter(),
topBouncing: false,
scrollController: _sliverListController,
controller: _refreshController,
onRefresh: _refresh,
onLoad: () async {
_pageNum++;
await loadMarketInfo();
print(_goodsHomeModelList.length);
if (_goodsHomeModelList.length >= _pageCount) {
_refreshController.finishLoad(noMore: true);
}
setState(() {});
},
slivers: _buildBody(context),
)
],
),
);
}
Future _refresh() async {
await updateMarketInfo();
//_swiperModels = await CommunityFunc.swiper();
_marketSwiperModels = await CommunityFunc.marketSwiper();
_statistics = await CommunityFunc.getMarketStatistics();
_categoryModels = await CommunityFunc.getCategory();
_goodsClassificationList =
await CommunityFunc.getGoodsClassificationList(0); //0获取根目录下的分类
print(_goodsClassificationList.length);
_goodsPopularModelList = await CommunityFunc.getGoodsPopularModel(6);
_integralModelList = await CommunityFunc.getIntegralGoods(6);
setState(() {});
}
List<Widget> _buildBody(BuildContext context) {
final normalTypeButton = MaterialButton(
onPressed: () async {
_orderType = OrderType.NORMAL;
priceIcon = R.ASSETS_ICONS_ICON_PRICE_NORMAL_PNG;
orderBySalesVolume = null;
orderByPrice = null;
await updateMarketInfo();
setState(() {});
},
child: Text(
'综合',
style: TextStyle(
color: _orderType == OrderType.NORMAL ? kBalckSubColor : ktextPrimary,
fontSize: _orderType == OrderType.NORMAL ? 32.sp : 28.sp,
fontWeight: _orderType == OrderType.NORMAL
? FontWeight.bold
: FontWeight.normal,
),
),
height: 80.w,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
);
final salesTypeButton = MaterialButton(
onPressed: () async {
_orderType = OrderType.SALES;
orderBySalesVolume = 2;
orderByPrice = null;
priceIcon = R.ASSETS_ICONS_ICON_PRICE_NORMAL_PNG;
await updateMarketInfo();
setState(() {});
},
child: Text(
'销量',
style: TextStyle(
color: _orderType == OrderType.SALES ? kBalckSubColor : ktextPrimary,
fontSize: _orderType == OrderType.SALES ? 32.sp : 28.sp,
fontWeight: _orderType == OrderType.SALES
? FontWeight.bold
: FontWeight.normal,
),
),
height: 80.w,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
);
final priceButton = MaterialButton(
onPressed: () async {
switch (_orderType) {
case OrderType.NORMAL:
case OrderType.SALES:
_orderType = OrderType.PRICE_HIGH;
orderByPrice = 1;
orderBySalesVolume = null;
priceIcon = R.ASSETS_ICONS_ICON_PRICE_TOP_PNG;
break;
case OrderType.PRICE_HIGH:
_orderType = OrderType.PRICE_LOW;
orderByPrice = 2;
orderBySalesVolume = null;
priceIcon = R.ASSETS_ICONS_ICON_PRICE_BOTTOM_PNG;
break;
case OrderType.PRICE_LOW:
_orderType = OrderType.PRICE_HIGH;
orderByPrice = 1;
orderBySalesVolume = null;
priceIcon = R.ASSETS_ICONS_ICON_PRICE_TOP_PNG;
break;
}
await updateMarketInfo();
setState(() {});
},
child: Row(
children: [
Text(
'价格',
style: TextStyle(
color: _orderType == OrderType.PRICE_HIGH ||
_orderType == OrderType.PRICE_LOW
? kBalckSubColor
: ktextPrimary,
fontSize: _orderType == OrderType.PRICE_HIGH ||
_orderType == OrderType.PRICE_LOW
? 32.sp
: 28.sp,
fontWeight: _orderType == OrderType.PRICE_HIGH ||
_orderType == OrderType.PRICE_LOW
? FontWeight.bold
: FontWeight.normal,
),
),
Image.asset(
priceIcon,
width: 32.w,
height: 32.w,
)
],
),
height: 80.w,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
);
return <Widget>[
HomeSliverAppBar(
key: _sliverAppBarGlobalKey,
title: geSearch(),
backgroundColor: Color(0xFFF9F9F9),
expandedHeight: MessageHeight +
bannerHeight +
buttonsHeight +
// searchHeight +
tabBarHeight +
hotGoodHeight +
ScreenUtil().statusBarHeight +
kToolbarHeight +
//积分商城高度
172 * 2.w,
flexibleSpace: _flexibleSpaceBar(context),
bottom: PreferredSize(
preferredSize: Size.fromHeight(tabBarHeight),
child: _goodsTitle(
normalTypeButton,
salesTypeButton,
priceButton,
))),
SliverPadding(
padding: EdgeInsets.all(10.w),
),
SliverPadding(
padding: EdgeInsets.only(left: 20.w, right: 20.w),
sliver: buildSliverGrid(),
),
];
}
SliverGrid buildSliverGrid() {
return SliverGrid(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 20.w,
crossAxisSpacing: 20.w,
childAspectRatio: 0.57,
),
///子Item构建器
delegate: new SliverChildBuilderDelegate(
(BuildContext context, int index) {
///每一个子Item的样式
return MarketHomeGoodsCard(item: _goodsHomeModelList[index]);
// return Container(
// width: 200.w,
// height: 200.w,
// color: Colors.blue,
// );
},
///子Item的个数
childCount: _goodsHomeModelList.length,
),
);
}
List<Widget> _actionsWidget() {
return <Widget>[
GestureDetector(
onTap: () {
Get.to(() => ShopCarPage()); // 购物车
},
child: Image.asset(Assets.newIcon.icGouwuc.path,
height: 48.w, width: 48.w),
),
Padding(
padding: EdgeInsets.only(left: 32.w, right: 32.w),
child: GestureDetector(
onTap: () {
Get.to(() => OrderPage(
initIndex: 0,
));
},
child: Image.asset(Assets.newIcon.icDingdan.path,
height: 48.w, width: 48.w),
),
),
];
}
Widget _buildTitle() {
final appProvider = Provider.of<AppProvider>(context);
return Container(
height: kToolbarHeight,
// child: ges,
//color: Colors.blue,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
height: 40.w,
child: Flex(
direction: Axis.horizontal,
children: <Widget>[
Row(crossAxisAlignment: CrossAxisAlignment.center, children: [
if (appProvider.location != null)
Padding(
padding: EdgeInsets.only(right: 5.w, top: 5.w),
child: Image.asset(
R.ASSETS_ICONS_SHOP_LOCATION_PNG,
width: 40.w,
height: 40.w,
fit: BoxFit.fitHeight,
//color: Colors.white,
),
),
Text(
appProvider.location?['city'] == null
? ''
: appProvider.location?['city'] as String? ?? '',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 28.sp,
color: Colors.white,
),
),
]),
],
),
),
// 20.hb,
//ges,
],
),
);
}
FlexibleSpaceBar _flexibleSpaceBar(context) {
return FlexibleSpaceBar(
collapseMode: CollapseMode.pin,
background: Container(
//头部整个背景颜色
height: double.infinity,
color: Color(0xFFF9F9F9),
// color: Colors.white,
child: Stack(
children: <Widget>[
// AnimatedHomeBackground(
// key: _animatedBackgroundState,
// height: 530.w,
// backgroundColor: Colors.white,
// ),
Container(
height: 265.w,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
colors: [
Color(0xFFFFFFFF),
Color(0xFFFFF9D1),
],
)),
),
Column(
children: <Widget>[
Container(
height: ScreenUtil().statusBarHeight + kToolbarHeight,
),
// geSearch(),
20.hb,
// getNum(),
// 20.hb,
HomeSwiper(),
20.hb,
_buttonTitle(),
20.hb,
_recommend(),
20.hb,
_integralMarket(),
],
),
],
)),
);
}
//积分商城
Widget _integralMarket() {
return Container(
width: 720.w,
height: 172 * 2.w,
padding: EdgeInsets.all(16.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(24.w),
),
child: Column(
children: [
Row(
children: [
'积分商城'.richText.size(28.sp).italic.bold.black.make(),
8.wb,
Text(
'限时兑换',
style: TextStyle(
fontSize: 24.sp,
fontWeight: FontWeight.bold,
fontStyle: FontStyle.italic,
foreground: Paint()
..shader = ui.Gradient.linear(
Offset(150, 690), Offset(150, 695), [
Color(0xFFF94B4B),
Color(0xFFF7B86F),
])),
),
Spacer(),
GestureDetector(
onTap: () {
Get.to(() => IntegralExchangePage());
},
child: Row(
children: [
'查看更多'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.45))
.make(),
4.wb,
Icon(
CupertinoIcons.chevron_right,
size: 20.w,
color: Colors.black.withOpacity(0.45),
)
],
),
)
],
),
18.hb,
Flexible(
child: ListView.separated(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
controller: _horListController,
itemBuilder: (context, index) {
return _horizontalListCard(_integralModelList[index]);
},
separatorBuilder: (_, __) {
return 24.wb;
},
itemCount: _integralModelList.length),
),
],
),
);
}
Widget _horizontalListCard(IntegralGoodsListModel model) {
return GestureDetector(
onTap: () {},
child: SizedBox(
width: 148.w,
child: Column(
children: [
Image.network(
model.mainPhoto,
width: 148.w,
height: 148.w,
),
'${model.skuName}'
.text
.size(24.sp)
.color(Colors.black.withOpacity(0.65))
.maxLines(2)
.overflow(TextOverflow.ellipsis)
.make(),
10.hb,
Row(
children: [
Assets.icons.intergral.image(width: 24.w, height: 24.w),
4.wb,
'${model.points}'.text.size(24.sp).color(Colors.red).make()
],
)
],
),
),
);
}
geSearch() {
return Row(
mainAxisSize: MainAxisSize.min,
children: [
Expanded(
child: GestureDetector(
onTap: () async {
Get.to(() => SearchGoodsPage());
},
child: Container(
height: 72.w,
margin: EdgeInsets.only(left: 32.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(36.w),
color: Colors.white),
child: Row(
children: [
32.wb,
Assets.home.icSearch.image(
width: 48.w,
height: 48.w,
),
10.wb,
'请输入关键字'.text.size(28.sp).color(ktextSubColor).make(),
],
),
),
),
),
32.wb,
..._actionsWidget()
],
);
}
getNum() {
return Container(
margin: EdgeInsets.only(left: 18.w, right: 18.w),
padding: EdgeInsets.only(right: 8.w),
height: 76.w,
width: double.infinity,
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.horizontal(
right: Radius.circular(12),
left: Radius.circular(12),
),
gradient: LinearGradient(
begin: FractionalOffset.centerRight,
end: FractionalOffset.centerLeft,
colors: <Color>[Color(0xFFAD2222), Color(0xFFCD392B)],
),
),
child: Stack(
children: [
Positioned(
bottom: 5,
right: 0,
top: 5,
child: Container(
padding: EdgeInsets.only(top: 5.w, bottom: 5.w),
alignment: Alignment.center,
height: 61.w,
width: 694.w,
decoration: BoxDecoration(
color: Color(0xFFFDEEBF),
borderRadius: BorderRadius.horizontal(
right: Radius.circular(12), left: Radius.circular(12)),
),
child: Container(
height: 50.w,
width: 682.w,
decoration: BoxDecoration(
//color: Color(0x99F5AF16),
borderRadius: BorderRadius.horizontal(
right: Radius.circular(12), left: Radius.circular(12)),
border: Border.all(width: 2.w, color: Color(0x99F5AF16)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
80.wb,
Image.asset(
R.ASSETS_ICONS_SHOP_LABA_PNG,
width: 36.w,
height: 34.w,
),
20.wb,
Text(
'今日上新${_statistics?.newProductsTodayNum ?? 0}',
style: TextStyle(
color: Color(0xFFD0564B),
fontSize: 24.sp,
height: 1.05),
),
],
),
),
)),
Positioned(
left: 0,
top: 0,
child: Container(
padding: EdgeInsets.only(left: 10.w),
height: 76.w,
width: 258.w,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: FractionalOffset.centerLeft,
end: FractionalOffset.centerRight,
colors: <Color>[Color(0xFFAD2222), Color(0xFFCD392B)],
),
borderRadius: BorderRadius.horizontal(
right: Radius.circular(50), left: Radius.circular(24))),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'SKU总数${_statistics?.skuTotal ?? 0}',
style: TextStyle(color: Colors.white, fontSize: 24.sp),
),
Text(
'入驻品牌数:${_statistics?.settledBrandsNum ?? 0}',
style: TextStyle(color: Colors.white, fontSize: 24.sp),
)
],
),
)),
],
),
);
}
Widget HomeSwiper() {
return Container(
margin: EdgeInsets.symmetric(horizontal: 20.w),
width: double.infinity,
height: bannerHeight,
child: AspectRatio(
aspectRatio: 343 / 129,
child: Swiper(
key: UniqueKey(),
itemBuilder: (BuildContext context, int index) {
return getSwiperImage(_marketSwiperModels[index]);
},
pagination: SwiperPagination(
alignment: Alignment.bottomRight,
builder: SwiperCustomPagination(
builder: (BuildContext context, SwiperPluginConfig config) {
return RectIndicator(
position: config.activeIndex,
count: _marketSwiperModels.length,
activeColor: Color(0x99FFFFFF),
color: Color(0xD9FFFFFF),
//未选中 指示器颜色选中的颜色key为Color
width: 4,
//指示器宽度
activeWidth: 14,
//选中的指示器宽度
radius: 4,
//指示器圆角角度
height: 4,
); //指示器高度
})),
scrollDirection: Axis.horizontal,
// control: new SwiperControl(),
autoplay: true,
onTap: (index) {
if (_marketSwiperModels[index].jcookGoodsId != null) {
Get.to(
() => GoodDetailPage(
goodId: _marketSwiperModels[index].jcookGoodsId!),
);
}
},
itemCount: _marketSwiperModels.length,
),
),
);
}
Widget getSwiperImage(MarketSwiperModel swiperModel) {
return Container(
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12.w)),
),
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image: SAASAPI.image(swiperModel.imgList!.isNotEmpty
? swiperModel.imgList!.first.url
: ''),
fit: BoxFit.fill,
imageErrorBuilder: (context, error, stackTrace) {
return Image.asset(
R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
fit: BoxFit.cover,
);
},
),
);
}
_buttonTitle() {
Container titles = Container(
key: UniqueKey(),
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.w),
),
child: GridView.builder(
padding: EdgeInsets.zero,
physics: NeverScrollableScrollPhysics(),
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 5),
itemBuilder: (context, index) {
if (index == _goodsClassificationList.length) {
return _buildAllTile();
} else {
return _buildTile(_goodsClassificationList[index], index);
}
},
itemCount: _goodsClassificationList.length + 1,
shrinkWrap: true,
),
);
return Container(
alignment: Alignment.center,
padding: EdgeInsets.symmetric(horizontal: 20.w),
height: buttonsHeight,
width: MediaQuery.of(context).size.width,
child: titles,
);
}
_buildTile(MarketCategoryModel item, int index) {
return GestureDetector(
onTap: () {
Get.to(() => NewCategoryPage(
models: _categoryModels,
index: index,
));
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
BeeImageNetwork(
width: 88.w,
height: 88.w,
imgs: item.imgUrls,
),
8.hb,
Text(
(item.name ?? '').replaceAll('', ''),
style: TextStyle(fontSize: 28.sp, color: ktextPrimary),
)
],
),
);
}
_buildAllTile() {
return GestureDetector(
onTap: () async {
Get.to(() => NewCategoryPage(
models: _categoryModels,
index: 0,
));
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
Assets.newIcon.allClasses.path,
height: 88.w,
width: 88.w,
),
8.hb,
Text(
'全部分类',
style: TextStyle(fontSize: 28.sp, color: ktextPrimary),
),
],
),
);
}
Widget getkingCoin() {
return Container(
alignment: Alignment.center,
padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 20.w),
width: double.infinity,
height: buttonsHeight,
child: _buttonTitleRow(),
);
}
_buttonTitleRow({onPressed}) {
return Expanded(
child: CupertinoButton(
padding: EdgeInsets.zero,
child: Column(
children: <Widget>[
Container(
width: 88.w,
height: 88.w,
child: Image.asset(
R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
width: 88.w,
height: 88.w,
),
),
Container(
margin: EdgeInsets.only(top: 6.w),
child: Text(
'数码产品',
style: TextStyle(fontSize: 28.sp, color: Color(0xFF333333)),
),
)
],
),
onPressed: () {
if (onPressed != null) {
onPressed();
}
},
),
);
}
_recommend() {
return Container(
height: hotGoodHeight,
margin: EdgeInsets.only(left: 20.w, right: 20.w),
padding: EdgeInsets.only(
top: 32.w,
left: 32.w,
right: 32.w,
),
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.white,
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Color(0xFFFFF6F6), Color(0xFFFFFFFF)]),
borderRadius: BorderRadius.circular(16.w),
),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
'爆款推荐',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 32.sp,
color: ktextPrimary),
),
],
),
GridView.builder(
padding: EdgeInsets.zero,
physics: NeverScrollableScrollPhysics(),
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4),
itemBuilder: (context, index) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
GestureDetector(
onTap: () {
Get.to(
() => GoodDetailPage(
goodId: _goodsPopularModelList[index].id!),
);
},
child: Container(
width: 96.w,
height: 96.w,
key: UniqueKey(),
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image: _goodsPopularModelList.isEmpty
? ''
: _goodsPopularModelList[index].mainPhoto ?? '',
imageErrorBuilder: (context, error, stackTrace) {
return Image.asset(
R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
height: 96.w,
width: 96.w,
);
},
),
),
),
],
);
},
itemCount: 4,
shrinkWrap: true,
),
// Row(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// ..._goodsPopularModelList.map((e) => Row(
// children: [
// Container(
// width: 96.w,
// height: 96.w,
// child:FadeInImage.assetNetwork(
// placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
// image: e.mainPhoto??'',
// imageErrorBuilder: (context, error, stackTrace) {
// return Image.asset(R.ASSETS_IMAGES_PLACEHOLDER_WEBP,height: 96.w,
// width: 96.w,);
// },
// ),
// ),
// 20.wb,
// ],
// ),)
// ],
// ).expand(),
],
));
}
_goodsTitle(
Widget normalTypeButton,
Widget salesTypeButton,
Widget priceButton,
) {
return Container(
height: 90.w,
alignment: Alignment.centerLeft,
color: Color(0xFFF9F9F9),
width: MediaQuery.of(context).size.width,
child: Container(
alignment: Alignment.centerLeft,
height: 60.w,
child: Row(
children: [
normalTypeButton,
salesTypeButton,
priceButton,
],
),
),
);
}
@override
bool get wantKeepAlive => true;
}