搜索页结果为空时添加排行榜

master
laiiihz 5 years ago
parent d9aec3beca
commit abd9cc4c25

@ -172,7 +172,6 @@
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 1140;
ProvisioningStyle = Manual;
SystemCapabilities = {
com.apple.Push = {
enabled = 1;
@ -393,8 +392,8 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 145;
DEVELOPMENT_TEAM = HV8WM8C68W;
ENABLE_BITCODE = NO;
@ -415,7 +414,7 @@
MARKETING_VERSION = 1.1.4;
PRODUCT_BUNDLE_IDENTIFIER = com.reecook.ios;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = recook_appstore;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
@ -530,8 +529,8 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 145;
DEVELOPMENT_TEAM = HV8WM8C68W;
ENABLE_BITCODE = NO;
@ -552,7 +551,7 @@
MARKETING_VERSION = 1.1.4;
PRODUCT_BUNDLE_IDENTIFIER = com.reecook.ios;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = recook_appstore;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@ -568,8 +567,8 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 145;
DEVELOPMENT_TEAM = HV8WM8C68W;
ENABLE_BITCODE = NO;
@ -590,7 +589,7 @@
MARKETING_VERSION = 1.1.4;
PRODUCT_BUNDLE_IDENTIFIER = com.reecook.ios;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = recook_appstore;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;

@ -7,30 +7,25 @@
* ====================================================
*/
import 'package:flutter/material.dart';
import 'package:recook/models/goods_simple_list_model.dart';
import 'package:recook/utils/mvp.dart';
import 'package:recook/widgets/mvp_list_view/mvp_list_view_contact.dart';
enum SortType {
comprehensive,
priceAsc,
priceDesc,
salesAsc,
salesDesc
}
enum SortType { comprehensive, priceAsc, priceDesc, salesAsc, salesDesc }
abstract class GoodsListPresenterI
extends MvpListViewPresenterI<GoodsSimple, GoodListViewI, GoodListModelI> {
fetchList(int categoryID, int page, SortType type,{String keyword});
fetchList(int categoryID, int page, SortType type,
{String keyword, VoidCallback onLoadDone});
fetchBrandList(int brandId, int page, SortType type);
fetchSearchList(String keyword, int page);
}
abstract class GoodListModelI extends MvpModel {
fetchList(int categoryID, int page, SortType type,{String keyword});
fetchList(int categoryID, int page, SortType type, {String keyword});
fetchBrandList(int brandId, int page, SortType type);
fetchSearchList(String keyword, int page);
}
abstract class GoodListViewI extends MvpView {
}
abstract class GoodListViewI extends MvpView {}

@ -7,6 +7,7 @@
* ====================================================
*/
import 'package:flutter/material.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:recook/models/goods_simple_list_model.dart';
import 'goods_list_contact.dart';
@ -71,8 +72,9 @@ class GoodsListPresenterImpl extends GoodsListPresenterI {
}
@override
fetchList(int categoryID, int page, SortType type, {String keyword}) {
getModel()
fetchList(int categoryID, int page, SortType type,
{String keyword, VoidCallback onLoadDone}) async {
return await getModel()
.fetchList(categoryID, page, type, keyword: keyword)
.then((ResultData response) {
if (!response.result) {
@ -95,6 +97,7 @@ class GoodsListPresenterImpl extends GoodsListPresenterI {
}
}
}
if (onLoadDone != null) onLoadDone();
});
}
}

@ -11,10 +11,14 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:recook/base/base_store_state.dart';
import 'package:recook/constants/api.dart';
import 'package:recook/constants/constants.dart';
import 'package:recook/constants/styles.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:recook/manager/user_manager.dart';
import 'package:recook/models/goods_hot_sell_list_model.dart';
import 'package:recook/models/goods_simple_list_model.dart';
import 'package:recook/models/promotion_list_model.dart';
import 'package:recook/pages/home/classify/brandgoods_list_page.dart';
import 'package:recook/pages/home/classify/commodity_detail_page.dart';
import 'package:recook/pages/home/classify/mvp/goods_list_presenter_impl.dart';
@ -30,6 +34,7 @@ import 'package:recook/widgets/goods_item.dart';
import 'package:recook/widgets/mvp_list_view/mvp_list_view.dart';
import 'package:recook/widgets/mvp_list_view/mvp_list_view_contact.dart';
import 'package:recook/widgets/no_data_view.dart';
import 'package:recook/widgets/refresh_widget.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:recook/pages/home/classify/mvp/goods_list_contact.dart';
import 'package:recook/constants/app_image_resources.dart';
@ -62,6 +67,28 @@ class _SearchPageState extends BaseStoreState<SearchPage>
SortType _sortType = SortType.comprehensive;
int _filterIndex = 0;
GSRefreshController _refreshController = GSRefreshController();
GoodsHotSellListModel _listModel;
_getGoodsHotSellList() async {
ResultData resultData = await HttpManager.post(HomeApi.hot_sell_list, {});
if (!resultData.result) {
showError(resultData.msg);
return;
}
GoodsHotSellListModel model =
GoodsHotSellListModel.fromJson(resultData.data);
if (model.code != HttpStatus.SUCCESS) {
showError(model.msg);
return;
}
for (Data data in model.data) {
data.index = model.data.indexOf(data);
}
_listModel = model;
if (mounted) setState(() {});
}
@override
void initState() {
getSearchListFromSharedPreferences();
@ -69,7 +96,8 @@ class _SearchPageState extends BaseStoreState<SearchPage>
_filterController = FilterToolBarController();
super.initState();
_presenter = GoodsListPresenterImpl();
_listViewController = MvpListViewController();
_listViewController = MvpListViewController(controller: _refreshController);
_getGoodsHotSellList();
}
@override
@ -255,9 +283,72 @@ class _SearchPageState extends BaseStoreState<SearchPage>
page,
_sortType,
keyword: _searchText,
onLoadDone: () {
Future.delayed(Duration(milliseconds: 100), () {
if (mounted) setState(() {});
});
},
);
},
gridViewBuilder: () => _buildGridView(),
gridViewBuilder: () => _buildNewGridView(),
);
}
_buildNewGridView() {
return CustomScrollView(
slivers: [
SliverGrid(
delegate: SliverChildBuilderDelegate(
(context, index) {
GoodsSimple goods = _listViewController.getData()[index];
return MaterialButton(
padding: EdgeInsets.zero,
onPressed: () {
AppRouter.push(context, RouteName.COMMODITY_PAGE,
arguments: CommodityDetailPage.setArguments(goods.id));
},
child: _displayList
// ? BrandDetailListItem(goods: goods)
// ? NormalGoodsItem(model: goods, buildCtx: context,)
? GoodsItemWidget.normalGoodsItem(
onBrandClick: () {
AppRouter.push(
context, RouteName.BRANDGOODS_LIST_PAGE,
arguments: BrandGoodsListPage.setArguments(
goods.brandId, goods.brandName));
},
buildCtx: context,
model: goods,
)
: BrandDetailGridItem(goods: goods));
},
childCount: _listViewController.getData().length,
),
gridDelegate:
ItemTagWidget.getSliverGridDelegate(_displayList, context),
),
SliverToBoxAdapter(
child: _refreshController.isNoData
? ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
return GoodsItemWidget.hotList(
onBrandClick: () {
AppRouter.push(
context, RouteName.BRANDGOODS_LIST_PAGE,
arguments: BrandGoodsListPage.setArguments(
_listModel.data[index].brandId,
_listModel.data[index].brandName));
},
buildCtx: context,
data: _listModel.data[index],
);
},
itemCount: _listModel?.data?.length ?? 0,
)
: SizedBox()),
],
);
}

@ -228,6 +228,9 @@ class GSRefreshController {
return _controller.isLoading;
}
bool get isNoData =>
(_controller?.footerStatus ?? LoadStatus.canLoading) == LoadStatus.noMore;
void dispose() {
_controller.dispose();
}

Loading…
Cancel
Save