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.

331 lines
10 KiB

4 years ago
import 'package:dio/dio.dart';
4 years ago
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
3 years ago
import 'package:flutter_easyloading/flutter_easyloading.dart';
3 years ago
import 'package:flutter_svg/flutter_svg.dart';
4 years ago
import 'package:flutter_swiper/flutter_swiper.dart';
4 years ago
import 'package:huixiang/generated/l10n.dart';
3 years ago
import 'package:huixiang/home/home_view/coupon.dart';
import 'package:huixiang/home/home_view/featured_acticvity.dart';
3 years ago
import 'package:huixiang/home/home_view/home_banner.dart';
import 'package:huixiang/home/home_view/home_integral_store.dart';
3 years ago
import 'package:huixiang/home/home_view/quick_order.dart';
3 years ago
import 'package:huixiang/home/home_view/sign_view.dart';
3 years ago
import 'package:huixiang/home/points_mall_view/points_goods_title.dart';
import 'package:huixiang/home/points_mall_view/points_goods_view.dart';
4 years ago
import 'package:huixiang/main.dart';
4 years ago
import 'package:huixiang/retrofit/data/article.dart';
import 'package:huixiang/retrofit/data/banner.dart';
4 years ago
import 'package:huixiang/retrofit/data/base_data.dart';
4 years ago
import 'package:huixiang/retrofit/data/brand.dart';
import 'package:huixiang/retrofit/data/founder.dart';
import 'package:huixiang/retrofit/data/goods.dart';
3 years ago
import 'package:huixiang/retrofit/data/goods_category.dart';
4 years ago
import 'package:huixiang/retrofit/data/page.dart';
4 years ago
import 'package:huixiang/retrofit/retrofit_api.dart';
4 years ago
import 'package:huixiang/utils/event_type.dart';
4 years ago
import 'package:huixiang/view_widget/classic_header.dart';
3 years ago
import 'package:huixiang/view_widget/my_appbar.dart';
4 years ago
import 'package:pull_to_refresh/pull_to_refresh.dart';
4 years ago
import 'package:shared_preferences/shared_preferences.dart';
3 years ago
import 'package:flutter_screenutil/flutter_screenutil.dart';
3 years ago
4 years ago
class HomePage extends StatefulWidget {
final GestureTapCallback callback;
4 years ago
HomePage(this.callback);
4 years ago
4 years ago
@override
State<StatefulWidget> createState() {
return _HomePage(callback);
4 years ago
}
}
4 years ago
class _HomePage extends State<HomePage> with AutomaticKeepAliveClientMixin {
4 years ago
ApiService apiService;
final GestureTapCallback callback;
4 years ago
_HomePage(this.callback);
4 years ago
@override
void initState() {
super.initState();
4 years ago
eventBus.on<EventType>().listen((event) {
4 years ago
if (event.type < 3) {
setState(() {});
4 years ago
}
4 years ago
});
4 years ago
}
3 years ago
final SwiperController controller = SwiperController();
4 years ago
3 years ago
String categoryId;
int pageNum = 1;
//排序类型枚举:1-自然排序,2-销量,3-价格
int orderType = 1;
//是否降序排列
bool orderDesc = true;
List<Goods> goods = [];
List<GoodsCategory> gooodsCategorys = [];
4 years ago
List<BannerData> bannerData = [];
List<Brand> brandData = [];
List<Article> articles = [];
List<Goods> gooods = [];
Founder founder;
queryHome() async {
3 years ago
EasyLoading.show(status: S.of(context).zhengzaijiazai);
final SharedPreferences value = await SharedPreferences.getInstance();
3 years ago
apiService = ApiService(Dio(),
context: context, token: value.getString('token'), showLoading: false);
3 years ago
3 years ago
final BaseData brand =
await apiService.queryHomeBrand().catchError((onError) {
4 years ago
refreshController.refreshFailed();
});
if (brand != null && brand.isSuccess) {
4 years ago
brandData.clear();
brandData.addAll((brand.data["brandList"] as List<dynamic>)
.map((e) => Brand.fromJson(e))
.toList());
founder = Founder.fromJson(brand.data["founder"]);
}
3 years ago
final BaseData<PageInfo<Article>> article = await apiService.queryArticle({
4 years ago
"pageNum": 1,
3 years ago
"pageSize": 3,
4 years ago
"searchKey": "",
4 years ago
"state": 1,
4 years ago
"type": 2
}).catchError((onError) {
refreshController.refreshFailed();
});
articles.clear();
if (article != null && article.isSuccess) {
3 years ago
articles.addAll(article.data.list);
4 years ago
}
3 years ago
final BaseData<PageInfo<Goods>> goodsData = await apiService.creditGoods({
4 years ago
"orderDesc": true,
"orderType": 1,
"pageNum": 1,
"pageSize": 10,
"state": 1
3 years ago
}).catchError((onError) {
refreshController.refreshFailed();
4 years ago
});
if (goodsData != null && goodsData.isSuccess) {
gooods.clear();
3 years ago
gooods.addAll(goodsData.data.list);
4 years ago
}
3 years ago
3 years ago
BaseData<PageInfo<GoodsCategory>> dataCategory =
await apiService.goodsCategory({
"current": 1,
"map": {},
"model": {"pageNum": 1, "pageSize": 20, "searchKey": ""},
"order": "descending",
"size": 20,
"sort": "sortOrder"
}).catchError((onError) {
refreshController.loadFailed();
refreshController.refreshFailed();
});
if (dataCategory != null &&
dataCategory.isSuccess &&
dataCategory.data != null &&
dataCategory.data.records != null &&
dataCategory.data.records.length > 0) {
gooodsCategorys.clear();
gooodsCategorys.add(GoodsCategory(name: S.of(context).quanbu));
gooodsCategorys.addAll(dataCategory.data.records);
}
var param = {
"categoryId": categoryId ?? "",
"orderDesc": orderDesc,
"orderType": orderType,
"pageNum": pageNum,
"pageSize": 10,
"state": 1
};
BaseData<PageInfo<Goods>> pageGoods =
await apiService.creditGoods(param).catchError((onError) {
refreshController.loadFailed();
refreshController.refreshFailed();
});
EasyLoading.dismiss();
if (pageGoods != null && pageGoods.isSuccess) {
if (pageNum == 1) {
goods.clear();
}
goods.addAll(pageGoods.data.list);
refreshController.refreshCompleted();
refreshController.loadComplete();
if (pageGoods.data.pageNum == pageGoods.data.pages) {
refreshController.loadNoData();
} else {
pageNum += 1;
}
} else {
refreshController.loadFailed();
refreshController.refreshFailed();
}
3 years ago
final BaseData<PageInfo<BannerData>> baseData =
await apiService.queryBanner({
3 years ago
"model": {"type": "HOME_PAGE"},
}).catchError((onError) {
refreshController.refreshFailed();
});
if (baseData != null && baseData.isSuccess) {
3 years ago
bannerData.clear();
bannerData.addAll(baseData.data.records);
4 years ago
refreshController.refreshCompleted();
3 years ago
if (bannerData.length > 0) controller.move(0, animation: false);
4 years ago
} else {
refreshController.refreshFailed();
}
3 years ago
EasyLoading.dismiss();
4 years ago
}
4 years ago
@override
void dispose() {
super.dispose();
3 years ago
if (refreshController != null) refreshController.dispose();
4 years ago
}
3 years ago
final RefreshController refreshController = RefreshController();
4 years ago
4 years ago
@override
Widget build(BuildContext context) {
4 years ago
super.build(context);
3 years ago
return Column(
children: [
MyAppBar(
title: "首页",
leading: false,
actions: [
Container(
margin: EdgeInsets.only(right: 12.w),
child: GestureDetector(
onTap: () {
// Navigator.of(context).pushNamed('/router/system_msg_page');
},
child: SvgPicture.asset(
"assets/svg/tixing.svg",
width: 24,
height: 24,
),
),
),
Container(
margin: EdgeInsets.only(right: 16.w),
child: GestureDetector(
onTap: () {
// Navigator.of(context).pushNamed('/router/system_msg_page');
},
child: SvgPicture.asset(
"assets/svg/saoyisao.svg",
width: 24,
height: 24,
),
),
),
],
),
Expanded(
child: Container(
child: SmartRefresher(
controller: refreshController,
enablePullDown: true,
enablePullUp: false,
header: MyHeader(),
physics: BouncingScrollPhysics(),
onRefresh: () {
setState(() {});
},
child: SingleChildScrollView(
physics: NeverScrollableScrollPhysics(),
child: FutureBuilder(
future: queryHome(),
builder: (context, snapshot) {
return Column(
children: [
///banner
HomeBanner(bannerData, controller),
///签到
SignView(),
// ///热门文章
// HotArticle(articles),
// ///创始人故事
// FounderStore(founder),
// ///品牌介绍
// BrandView(brandData),
///快捷下单
QuickOrder(),
CouponView(),
///积分商城
HomeIntegralStore(gooods, callback),
FeaturedActivity(),
///积分商品头Tab
PointsGoodsTitle(
gooodsCategorys,
(orderType, orderDesc) {
this.orderType = orderType;
this.orderDesc = orderDesc;
setState(() {});
},
(index) {
categoryId = gooodsCategorys[index].id;
pageNum = 1;
setState(() {});
},
),
///积分商品列表
PointGoods(
goods,
(index) {
_toDetails(index);
},
),
],
);
},
),
),
),
),
4 years ago
),
3 years ago
SizedBox(
height: 76.h,
),
],
);
}
_toDetails(index) async {
Navigator.of(context).pushNamed(
'/router/integral_store_page',
arguments: {"goodsId": goods[index].id},
4 years ago
);
}
4 years ago
@override
bool get wantKeepAlive => true;
4 years ago
}