delete useless code

更改商城接口api
pull/1/head
张萌 3 years ago
parent 4cc56b0622
commit 596ed6d4bb

@ -1,110 +0,0 @@
class CategoryModel {
int? id;
String? name;
List<String>? imgUrls;
List<CategoryList>? categoryList;
CategoryModel({this.id, this.name, this.categoryList, this.imgUrls});
CategoryModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
if (json['imgUrls'] != null) {
imgUrls = [];
json['imgUrls'].forEach((v) {
imgUrls!.add(v.toString());
});
}
if (json['categoryList'] != null) {
categoryList = [];
json['categoryList'].forEach((v) {
categoryList!.add(new CategoryList.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
if (this.categoryList != null) {
data['categoryList'] = this.categoryList!.map((v) => v.toJson()).toList();
}
if (this.imgUrls != null) {
data['imgUrls'] = this.imgUrls!.map((v) => v).toList();
}
return data;
}
}
class CategoryList {
int? id;
List<String>? imgUrls;
String? name;
List<CategoryListSecond>? categoryListSecond;
CategoryList({this.id, this.name, this.categoryListSecond});
CategoryList.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
if (json['categoryList'] != null) {
categoryListSecond = [];
json['categoryList'].forEach((v) {
categoryListSecond!.add(new CategoryListSecond.fromJson(v));
});
}
if (json['imgUrls'] != null) {
imgUrls = [];
json['imgUrls'].forEach((v) {
imgUrls!.add(v.toString());
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
if (this.categoryListSecond != null) {
data['categoryList'] =
this.categoryListSecond!.map((v) => v.toJson()).toList();
}
if (this.imgUrls != null) {
data['imgUrls'] = this.imgUrls!.map((v) => v).toList();
}
return data;
}
}
class CategoryListSecond {
int? id;
String? name;
List<String>? imgUrls;
CategoryListSecond({
this.id,
this.name,
});
CategoryListSecond.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
if (json['imgUrls'] != null) {
imgUrls = [];
json['imgUrls'].forEach((v) {
imgUrls!.add(v.toString());
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
if (this.imgUrls != null) {
data['imgUrls'] = this.imgUrls!.map((v) => v).toList();
}
return data;
}
}

@ -1,187 +0,0 @@
import 'package:aku_new_community/ui/market/shop_car/shop_car_func.dart';
class GoodDetailModel {
int? id;
List<GoodsDetailImageVos>? goodsDetailImageVos;
double? sellPrice;
double? discountPrice;
String? skuName;
int? status;
int? shopStatus;
int? sellNum;
int? kind;
String? defaultLocation;
String? defaultAddressDetail;
int? stockStatus;
List<GoodsDetailSpecificationVoList>? goodsDetailSpecificationVoList;
int? isCollection;
String? unit;
double? weight;
factory GoodDetailModel.fail() => GoodDetailModel(
goodsDetailImageVos: [],
sellPrice: 0,
discountPrice: 0,
skuName: '',
sellNum: 0,
kind: 0,
defaultLocation: '',
defaultAddressDetail: '',
stockStatus: 0,
goodsDetailSpecificationVoList: [],
isCollection: 0,
unit: '',
weight: 0);
GoodStatus get goodStatus =>
ShopCarFunc.getGoodsStatus(status ?? 1, shopStatus ?? 1);
GoodDetailModel(
{this.id,
this.goodsDetailImageVos,
this.sellPrice,
this.discountPrice,
this.skuName,
this.status,
this.shopStatus,
this.sellNum,
this.kind,
this.defaultLocation,
this.defaultAddressDetail,
this.stockStatus,
this.goodsDetailSpecificationVoList,
this.isCollection,
this.unit,
this.weight});
GoodDetailModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
if (json['goodsDetailImageVos'] != null) {
goodsDetailImageVos = [];
json['goodsDetailImageVos'].forEach((v) {
goodsDetailImageVos!.add(new GoodsDetailImageVos.fromJson(v));
});
}
sellPrice = json['sellPrice'];
discountPrice = json['discountPrice'];
skuName = json['skuName'];
status = json['status'];
shopStatus = json['shopStatus'];
sellNum = json['sellNum'];
kind = json['kind'];
defaultLocation = json['defaultLocation'];
defaultAddressDetail = json['defaultAddressDetail'];
stockStatus = json['stockStatus'];
if (json['goodsDetailSpecificationVoList'] != null) {
goodsDetailSpecificationVoList = [];
json['goodsDetailSpecificationVoList'].forEach((v) {
goodsDetailSpecificationVoList!
.add(new GoodsDetailSpecificationVoList.fromJson(v));
});
}
isCollection = json['isCollection'];
unit = json['unit'];
weight = json['weight'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
if (this.goodsDetailImageVos != null) {
data['goodsDetailImageVos'] =
this.goodsDetailImageVos!.map((v) => v.toJson()).toList();
}
data['sellPrice'] = this.sellPrice;
data['discountPrice'] = this.discountPrice;
data['skuName'] = this.skuName;
data['status'] = this.status;
data['shopStatus'] = this.shopStatus;
data['sellNum'] = this.sellNum;
data['kind'] = this.kind;
data['defaultLocation'] = this.defaultLocation;
data['defaultAddressDetail'] = this.defaultAddressDetail;
data['stockStatus'] = this.stockStatus;
if (this.goodsDetailSpecificationVoList != null) {
data['goodsDetailSpecificationVoList'] =
this.goodsDetailSpecificationVoList!.map((v) => v.toJson()).toList();
}
data['isCollection'] = this.isCollection;
data['unit'] = this.unit;
data['weight'] = this.weight;
return data;
}
}
class GoodsDetailImageVos {
int? id;
int? jcookGoodsId;
String? url;
int? isPrimer;
int? orderSort;
GoodsDetailImageVos(
{this.id, this.jcookGoodsId, this.url, this.isPrimer, this.orderSort});
GoodsDetailImageVos.fromJson(Map<String, dynamic> json) {
id = json['id'];
jcookGoodsId = json['jcookGoodsId'];
url = json['url'];
isPrimer = json['isPrimer'];
orderSort = json['orderSort'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['jcookGoodsId'] = this.jcookGoodsId;
data['url'] = this.url;
data['isPrimer'] = this.isPrimer;
data['orderSort'] = this.orderSort;
return data;
}
}
class GoodsDetailSpecificationVoList {
String? groupName;
List<Attribute>? attribute;
GoodsDetailSpecificationVoList({this.groupName, this.attribute});
GoodsDetailSpecificationVoList.fromJson(Map<String, dynamic> json) {
groupName = json['groupName'];
if (json['attribute'] != null) {
attribute = [];
json['attribute'].forEach((v) {
attribute!.add(new Attribute.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['groupName'] = this.groupName;
if (this.attribute != null) {
data['attribute'] = this.attribute!.map((v) => v.toJson()).toList();
}
return data;
}
}
class Attribute {
String? name;
String? value;
Attribute({this.name, this.value});
Attribute.fromJson(Map<String, dynamic> json) {
name = json['name'];
value = json['value'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['value'] = this.value;
return data;
}
}

@ -1,34 +0,0 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/models/market/market_category_model.dart';
import 'package:aku_new_community/utils/network/base_model.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
class DisplayCategoryModel {
final MarketCategoryModel model;
final List<MarketCategoryModel> children;
DisplayCategoryModel({
required this.model,
required this.children,
});
static Future<List<MarketCategoryModel>> get top8 async {
List<MarketCategoryModel> models = await fetchCategory(0);
if (models.length >= 8)
return models.getRange(0, 8).toList();
else
return models;
}
///
static Future<List<MarketCategoryModel>> fetchCategory(int parentId) async {
BaseModel model = await NetUtil().get(
API.market.category,
params: {'parentId': parentId},
);
if (model.data == null) return [];
return (model.data as List)
.map((e) => MarketCategoryModel.fromJson(e))
.toList();
}
}

@ -0,0 +1,115 @@
import 'package:aku_new_community/ui/market/shop_car/shop_car_func.dart';
import 'package:json_annotation/json_annotation.dart';
part 'good_detail_model.g.dart';
@JsonSerializable()
class GoodDetailModel {
final int id;
final List<JcookImageVoList> jcookImageVoList;
final num sellPrice;
final num discountPrice;
final String skuName;
final int status;
final int shopStatus;
final int sellNum;
final int kind;
final String defaultLocation;
final String defaultAddressDetail;
final int stockStatus;
final List<JcookSpecificationVoList> jcookSpecificationVoList;
final int isCollection;
final String unit;
final num weight;
factory GoodDetailModel.fromJson(Map<String, dynamic> json) =>
_$GoodDetailModelFromJson(json);
GoodStatus get goodStatus =>
ShopCarFunc.getGoodsStatus(status ?? 1, shopStatus ?? 1);
static GoodDetailModel fail() => GoodDetailModel(
id: 0,
jcookImageVoList: [],
sellPrice: 0,
discountPrice: 0,
skuName: '',
status: 0,
shopStatus: 0,
sellNum: 0,
kind: 0,
defaultLocation: '',
defaultAddressDetail: '',
stockStatus: 0,
jcookSpecificationVoList: [],
isCollection: 0,
unit: '',
weight: 0);
const GoodDetailModel({
required this.id,
required this.jcookImageVoList,
required this.sellPrice,
required this.discountPrice,
required this.skuName,
required this.status,
required this.shopStatus,
required this.sellNum,
required this.kind,
required this.defaultLocation,
required this.defaultAddressDetail,
required this.stockStatus,
required this.jcookSpecificationVoList,
required this.isCollection,
required this.unit,
required this.weight,
});
}
@JsonSerializable()
class JcookImageVoList {
final int id;
final int jcookGoodsId;
final String url;
final int isPrimer;
final int orderSort;
factory JcookImageVoList.fromJson(Map<String, dynamic> json) =>
_$JcookImageVoListFromJson(json);
const JcookImageVoList({
required this.id,
required this.jcookGoodsId,
required this.url,
required this.isPrimer,
required this.orderSort,
});
}
@JsonSerializable()
class JcookSpecificationVoList {
final String groupName;
final List<Attribute> attribute;
factory JcookSpecificationVoList.fromJson(Map<String, dynamic> json) =>
_$JcookSpecificationVoListFromJson(json);
const JcookSpecificationVoList({
required this.groupName,
required this.attribute,
});
}
@JsonSerializable()
class Attribute {
final String name;
final String value;
factory Attribute.fromJson(Map<String, dynamic> json) =>
_$AttributeFromJson(json);
const Attribute({
required this.name,
required this.value,
});
}

@ -0,0 +1,56 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'good_detail_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
GoodDetailModel _$GoodDetailModelFromJson(Map<String, dynamic> json) =>
GoodDetailModel(
id: json['id'] as int,
jcookImageVoList: (json['jcookImageVoList'] as List<dynamic>)
.map((e) => JcookImageVoList.fromJson(e as Map<String, dynamic>))
.toList(),
sellPrice: json['sellPrice'] as num,
discountPrice: json['discountPrice'] as num,
skuName: json['skuName'] as String,
status: json['status'] as int,
shopStatus: json['shopStatus'] as int,
sellNum: json['sellNum'] as int,
kind: json['kind'] as int,
defaultLocation: json['defaultLocation'] as String,
defaultAddressDetail: json['defaultAddressDetail'] as String,
stockStatus: json['stockStatus'] as int,
jcookSpecificationVoList:
(json['jcookSpecificationVoList'] as List<dynamic>)
.map((e) =>
JcookSpecificationVoList.fromJson(e as Map<String, dynamic>))
.toList(),
isCollection: json['isCollection'] as int,
unit: json['unit'] as String,
weight: json['weight'] as num,
);
JcookImageVoList _$JcookImageVoListFromJson(Map<String, dynamic> json) =>
JcookImageVoList(
id: json['id'] as int,
jcookGoodsId: json['jcookGoodsId'] as int,
url: json['url'] as String,
isPrimer: json['isPrimer'] as int,
orderSort: json['orderSort'] as int,
);
JcookSpecificationVoList _$JcookSpecificationVoListFromJson(
Map<String, dynamic> json) =>
JcookSpecificationVoList(
groupName: json['groupName'] as String,
attribute: (json['attribute'] as List<dynamic>)
.map((e) => Attribute.fromJson(e as Map<String, dynamic>))
.toList(),
);
Attribute _$AttributeFromJson(Map<String, dynamic> json) => Attribute(
name: json['name'] as String,
value: json['value'] as String,
);

@ -1,33 +0,0 @@
import 'package:aku_new_community/model/common/img_model.dart';
class GoodsClassification {
int? id;
String? name;
List<ImgModel>? imgUrls;
GoodsClassification({this.id, this.name, this.imgUrls});
GoodsClassification.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
if (json['imgUrls'] != null) {
imgUrls = [];
json['imgUrls'].forEach((v) {
imgUrls!.add(new ImgModel.fromJson(v));
});
} else {
imgUrls = [];
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['imgUrls'] = this.imgUrls;
if (this.imgUrls != null) {
data['imgUrls'] = this.imgUrls!.map((v) => v.toJson()).toList();
}
return data;
}
}

@ -1,68 +0,0 @@
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'goods_detail_model.g.dart';
@JsonSerializable()
class GoodsDetailModel extends Equatable {
final int id;
final String recommend;
final String title;
final double sellingPrice;
final double markingPrice;
final String categoryName;
final int subscribeNum;
final String detail;
final String? arrivalTime;
final List<ImgModel> goodsImgList;
final int supplierId;
final String supplierName;
final String supplierTel;
final String? supplierAddress;
final List<ImgModel> supplierImgList;
final int isSubscribe;
GoodsDetailModel(
this.id,
this.recommend,
this.title,
this.sellingPrice,
this.markingPrice,
this.categoryName,
this.subscribeNum,
this.detail,
this.arrivalTime,
this.goodsImgList,
this.supplierId,
this.supplierName,
this.supplierTel,
this.supplierAddress,
this.supplierImgList,
this.isSubscribe);
@override
List<Object?> get props => throw UnimplementedError();
factory GoodsDetailModel.fail() => GoodsDetailModel(
0,
'',
'',
0.0,
0.0,
'',
0,
'',
'',
[],
0,
'',
'',
'',
[],
0,
);
factory GoodsDetailModel.fromJson(Map<String, dynamic> json) =>
_$GoodsDetailModelFromJson(json);
}

@ -1,31 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'goods_detail_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
GoodsDetailModel _$GoodsDetailModelFromJson(Map<String, dynamic> json) =>
GoodsDetailModel(
json['id'] as int,
json['recommend'] as String,
json['title'] as String,
(json['sellingPrice'] as num).toDouble(),
(json['markingPrice'] as num).toDouble(),
json['categoryName'] as String,
json['subscribeNum'] as int,
json['detail'] as String,
json['arrivalTime'] as String?,
(json['goodsImgList'] as List<dynamic>)
.map((e) => ImgModel.fromJson(e as Map<String, dynamic>))
.toList(),
json['supplierId'] as int,
json['supplierName'] as String,
json['supplierTel'] as String,
json['supplierAddress'] as String?,
(json['supplierImgList'] as List<dynamic>)
.map((e) => ImgModel.fromJson(e as Map<String, dynamic>))
.toList(),
json['isSubscribe'] as int,
);

@ -1,41 +0,0 @@
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'goods_item.g.dart';
@JsonSerializable()
class GoodsItem extends Equatable {
final int id;
final String title;
final String recommend;
final num sellingPrice;
final num markingPrice;
final int subscribeNum;
final List<ImgModel> imgList;
GoodsItem({
required this.id,
required this.title,
required this.recommend,
required this.sellingPrice,
required this.markingPrice,
required this.subscribeNum,
required this.imgList,
});
factory GoodsItem.example() => GoodsItem(
id: 0,
title: '华为mate30',
recommend: '九成新,无磨损',
sellingPrice: 1000,
markingPrice: 2000,
subscribeNum: 0,
imgList: []);
@override
List<Object?> get props => throw UnimplementedError();
factory GoodsItem.fromJson(Map<String, dynamic> json) =>
_$GoodsItemFromJson(json);
}

@ -1,19 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'goods_item.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
GoodsItem _$GoodsItemFromJson(Map<String, dynamic> json) => GoodsItem(
id: json['id'] as int,
title: json['title'] as String,
recommend: json['recommend'] as String,
sellingPrice: json['sellingPrice'] as num,
markingPrice: json['markingPrice'] as num,
subscribeNum: json['subscribeNum'] as int,
imgList: (json['imgList'] as List<dynamic>)
.map((e) => ImgModel.fromJson(e as Map<String, dynamic>))
.toList(),
);

@ -1,24 +1,20 @@
import 'package:json_annotation/json_annotation.dart';
part 'goods_popular_model.g.dart';
@JsonSerializable()
class GoodsPopularModel {
int? id;
String? skuName;
String? mainPhoto;
int? viewsNum;
factory GoodsPopularModel.fromJson(Map<String, dynamic> json) =>
_$GoodsPopularModelFromJson(json);
GoodsPopularModel({this.id, this.skuName, this.mainPhoto, this.viewsNum});
GoodsPopularModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
skuName = json['skuName'];
mainPhoto = json['mainPhoto'];
viewsNum = json['viewsNum'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['skuName'] = this.skuName;
data['mainPhoto'] = this.mainPhoto;
data['viewsNum'] = this.viewsNum;
return data;
}
GoodsPopularModel({
this.id,
this.skuName,
this.mainPhoto,
this.viewsNum,
});
}

@ -0,0 +1,15 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'goods_popular_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
GoodsPopularModel _$GoodsPopularModelFromJson(Map<String, dynamic> json) =>
GoodsPopularModel(
id: json['id'] as int?,
skuName: json['skuName'] as String?,
mainPhoto: json['mainPhoto'] as String?,
viewsNum: json['viewsNum'] as int?,
);

@ -0,0 +1,20 @@
import 'package:json_annotation/json_annotation.dart';
part 'market_all_category_model.g.dart';
@JsonSerializable()
class MarketAllCategoryModel {
final int id;
final String name;
final List<String> imgUrls;
final List<MarketAllCategoryModel> categoryList;
factory MarketAllCategoryModel.fromJson(Map<String, dynamic> json) =>
_$MarketAllCategoryModelFromJson(json);
const MarketAllCategoryModel({
required this.id,
required this.name,
required this.imgUrls,
required this.categoryList,
});
}

@ -0,0 +1,20 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'market_all_category_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
MarketAllCategoryModel _$MarketAllCategoryModelFromJson(
Map<String, dynamic> json) =>
MarketAllCategoryModel(
id: json['id'] as int,
name: json['name'] as String,
imgUrls:
(json['imgUrls'] as List<dynamic>).map((e) => e as String).toList(),
categoryList: (json['categoryList'] as List<dynamic>)
.map(
(e) => MarketAllCategoryModel.fromJson(e as Map<String, dynamic>))
.toList(),
);

@ -1,4 +1,3 @@
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
@ -8,17 +7,17 @@ part 'market_category_model.g.dart';
class MarketCategoryModel extends Equatable {
final int id;
final String name;
final List<ImgModel> imgList;
MarketCategoryModel({
required this.id,
required this.name,
required this.imgList,
});
final List<String> imgUrls;
@override
List<Object?> get props => [id];
factory MarketCategoryModel.fromJson(Map<String, dynamic> json) =>
_$MarketCategoryModelFromJson(json);
const MarketCategoryModel({
required this.id,
required this.name,
required this.imgUrls,
});
}

@ -10,7 +10,6 @@ MarketCategoryModel _$MarketCategoryModelFromJson(Map<String, dynamic> json) =>
MarketCategoryModel(
id: json['id'] as int,
name: json['name'] as String,
imgList: (json['imgList'] as List<dynamic>)
.map((e) => ImgModel.fromJson(e as Map<String, dynamic>))
.toList(),
imgUrls:
(json['imgUrls'] as List<dynamic>).map((e) => e as String).toList(),
);

@ -6,12 +6,11 @@ import 'package:aku_new_community/model/community/community_topic_model.dart';
import 'package:aku_new_community/model/community/hot_news_model.dart';
import 'package:aku_new_community/model/community/my_event_item_model.dart';
import 'package:aku_new_community/model/community/swiper_model.dart';
import 'package:aku_new_community/model/good/category_model.dart';
import 'package:aku_new_community/model/good/market_swiper_model.dart';
import 'package:aku_new_community/models/market/goods_classification.dart';
import 'package:aku_new_community/models/market/goods_popular_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/utils/network/base_list_model.dart';
import 'package:aku_new_community/utils/network/base_model.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
@ -76,42 +75,22 @@ class CommunityFunc {
}
///
static Future<List<GoodsClassification>> getGoodsClassificationList(
static Future<List<MarketCategoryModel>> getGoodsClassificationList(
int parentId) async {
BaseListModel model = await NetUtil().getList(
API.market.findAllCategoryByParentId,
SARSAPI.market.category.category,
params: {'pageNum': 1, 'size': 9, 'parentId': parentId},
);
if (model.tableList!.length == 0) return [];
return model.tableList!
.map((e) => GoodsClassification.fromJson(e))
.map((e) => MarketCategoryModel.fromJson(e))
.toList();
}
///
static Future<List<GoodsHomeModel>> getGoodsHomeModelList(
int PageNum,
int size,
int orderBySalesVolume,
int orderByPrice,
) async {
BaseListModel model = await NetUtil().getList(
API.market.findRecommendGoodsList,
params: {
'pageNum': PageNum,
'size': size,
'orderBySalesVolume': orderBySalesVolume,
'orderByPrice': orderByPrice,
},
);
if (model.tableList!.length == 0) return [];
return model.tableList!.map((e) => GoodsHomeModel.fromJson(e)).toList();
}
///
static Future<List<GoodsPopularModel>> getGoodsPopularModel(int num) async {
BaseModel model = await NetUtil().get(
API.market.findMaxPopularity,
SARSAPI.market.good.popular,
params: {'num': num},
);
if (model.data!.length == 0) return [];
@ -121,15 +100,15 @@ class CommunityFunc {
}
///
static Future<List<CategoryModel>> getCategory() async {
static Future<List<MarketAllCategoryModel>> getCategory() async {
BaseModel model = await NetUtil().get(
API.market.findAllCategoryInfo,
SARSAPI.market.category.categoryInfo,
);
if (model.data!.length == 0)
return [];
else {
return (model.data as List)
.map((e) => CategoryModel.fromJson(e))
.map((e) => MarketAllCategoryModel.fromJson(e))
.toList();
}
}

@ -1,51 +0,0 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/market/display_category_model.dart';
import 'package:aku_new_community/models/market/market_category_model.dart';
import 'package:aku_new_community/ui/market/goods/goods_list_view.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class CategoryCard extends StatelessWidget {
final MarketCategoryModel model;
const CategoryCard({Key? key, required this.model}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialButton(
child: Column(
children: [
Spacer(),
FadeInImage.assetNetwork(
image: API.image(ImgModel.first(model.imgList)),
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
height: 75.w,
width: 75.w,
),
12.hb,
Text(
model.name,
style: TextStyle(
fontSize: 24.sp,
color: Color(0xFF4A4B51),
),
),
Spacer(),
],
),
onPressed: () async {
final cancel = BotToast.showLoading();
List<MarketCategoryModel> models =
await DisplayCategoryModel.fetchCategory(model.id);
cancel();
Get.to(() => GoodsListView(
model: model,
subModels: models,
));
},
);
}
}

@ -1,113 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/models/market/market_category_model.dart';
import 'package:aku_new_community/ui/market/category/category_sub_view.dart';
import 'package:aku_new_community/ui/market/search/search_goods_page.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class CategoryPage extends StatefulWidget {
final List<MarketCategoryModel> models;
CategoryPage({Key? key, required this.models}) : super(key: key);
@override
_CategoryPageState createState() => _CategoryPageState();
}
class _CategoryPageState extends State<CategoryPage>
with TickerProviderStateMixin {
int _index = 0;
late TabController _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(length: widget.models.length, vsync: this);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '分类',
actions: [
IconButton(
icon: Icon(CupertinoIcons.search),
onPressed: () {
Get.to(() => SearchGoodsPage());
},
),
],
bgColor: Colors.white,
appBarBottom: PreferredSize(
child: Divider(height: 1),
preferredSize: Size.fromHeight(1),
),
body: Row(
children: [
SizedBox(
width: 203.w,
child: ListView.builder(
physics: ClampingScrollPhysics(),
itemBuilder: (context, index) {
bool sameIndex = index == _index;
final item = widget.models[index];
return Stack(
children: [
MaterialButton(
height: 100.w,
minWidth: double.infinity,
onPressed: () {
_index = index;
_tabController.animateTo(index);
setState(() {});
},
child: Text(
item.name,
style: TextStyle(
color: sameIndex ? kPrimaryColor : ktextPrimary,
),
),
),
AnimatedPositioned(
left: sameIndex ? 0 : -8.w,
top: sameIndex ? 20.w : 30.w,
bottom: sameIndex ? 20.w : 30.w,
duration: Duration(milliseconds: 300),
curve: Curves.easeInOutCubic,
child: Container(
color: kPrimaryColor,
width: 8.w,
height: 40.w,
),
),
],
);
},
itemCount: widget.models.length,
),
),
VerticalDivider(
color: Color(0xFFE8E8E8),
width: 1,
thickness: 1,
),
TabBarView(
controller: _tabController,
physics: NeverScrollableScrollPhysics(),
children:
widget.models.map((e) => CategorySubView(model: e)).toList(),
).expand(),
],
),
);
}
}

@ -1,55 +0,0 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/market/market_category_model.dart';
import 'package:aku_new_community/ui/market/goods/goods_list_view.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class CategorySubCard extends StatelessWidget {
final List<MarketCategoryModel> subModels;
final MarketCategoryModel selectModel;
final MarketCategoryModel model;
const CategorySubCard({
Key? key,
required this.model,
required this.subModels,
required this.selectModel,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialButton(
child: Column(
children: [
Spacer(),
FadeInImage.assetNetwork(
image: API.image(ImgModel.first(selectModel.imgList)),
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
height: 75.w,
width: 75.w,
),
12.hb,
Text(
selectModel.name,
style: TextStyle(
fontSize: 24.sp,
color: Color(0xFF4A4B51),
),
),
Spacer(),
],
),
onPressed: () async {
await Get.to(
() => GoodsListView(
model: model,
subModels: subModels,
selectSubModel: selectModel,
),
);
},
);
}
}

@ -1,49 +0,0 @@
import 'package:aku_new_community/models/market/display_category_model.dart';
import 'package:aku_new_community/models/market/market_category_model.dart';
import 'package:aku_new_community/ui/market/category/category_sub_card.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
class CategorySubView extends StatefulWidget {
final MarketCategoryModel model;
CategorySubView({Key? key, required this.model}) : super(key: key);
@override
_CategorySubViewState createState() => _CategorySubViewState();
}
class _CategorySubViewState extends State<CategorySubView>
with AutomaticKeepAliveClientMixin {
List<MarketCategoryModel> _models = [];
@override
Widget build(BuildContext context) {
super.build(context);
return EasyRefresh(
header: MaterialHeader(),
firstRefresh: true,
onRefresh: () async {
_models = await DisplayCategoryModel.fetchCategory(widget.model.id);
setState(() {});
},
child: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
),
itemBuilder: (context, index) {
final model = _models[index];
return CategorySubCard(
model: widget.model,
selectModel: model,
subModels: _models,
);
},
itemCount: _models.length,
),
);
}
@override
bool get wantKeepAlive => true;
}

@ -1,5 +1,5 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/model/good/category_model.dart';
import 'package:aku_new_community/models/market/market_all_category_model.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flutter/cupertino.dart';
@ -8,7 +8,7 @@ import 'package:flutter/material.dart';
import 'new_category_sub_view.dart';
class NewCategoryPage extends StatefulWidget {
final List<CategoryModel> models;
final List<MarketAllCategoryModel> models;
final int index;
NewCategoryPage({Key? key, required this.models, required this.index})

@ -1,12 +1,12 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/model/good/category_model.dart';
import 'package:aku_new_community/models/market/market_all_category_model.dart';
import 'package:aku_new_community/ui/market/search/search_goods_page.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class NewCategorySubCard extends StatelessWidget {
final CategoryListSecond subModels;
final MarketAllCategoryModel subModels;
const NewCategorySubCard({
Key? key,

@ -1,11 +1,11 @@
import 'package:aku_new_community/model/good/category_model.dart';
import 'package:aku_new_community/models/market/market_all_category_model.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:flutter/material.dart';
import 'new_category_sub_card.dart';
class NewCategorySubView extends StatefulWidget {
final CategoryModel model;
final MarketAllCategoryModel model;
NewCategorySubView({Key? key, required this.model}) : super(key: key);
@ -26,7 +26,7 @@ class _NewCategorySubViewState extends State<NewCategorySubView>
);
}
_SecondCard(CategoryList item) {
_SecondCard(MarketAllCategoryModel item) {
return Container(
padding: EdgeInsets.only(top: 20.w),
decoration: BoxDecoration(
@ -56,10 +56,10 @@ class _NewCategorySubViewState extends State<NewCategorySubView>
shrinkWrap: true,
itemBuilder: (context, index) {
return NewCategorySubCard(
subModels: item.categoryListSecond![index],
subModels: item.categoryList![index],
);
},
itemCount: item.categoryListSecond!.length,
itemCount: item.categoryList!.length,
),
],
),

@ -1,220 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/market/goods_item.dart';
import 'package:aku_new_community/ui/market/goods/goods_detail_page.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class GoodsCard extends StatelessWidget {
final GoodsItem item;
final bool? border;
const GoodsCard({Key? key, required this.item, this.border})
: super(key: key);
@override
Widget build(BuildContext context) {
return MaterialButton(
color: Colors.white,
elevation: 0,
shape: !(border ?? false)
? null
: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.w),
side: BorderSide(color: Color(0xFFC4C4C4))),
padding: EdgeInsets.zero,
onPressed: () => Get.to(
() => GoodsDetailPage(id: item.id),
preventDuplicates: false,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12.w)),
),
child: Stack(
children: [
FadeInImage.assetNetwork(
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image: ImgModel.first(item.imgList),
fit: BoxFit.fill,
imageErrorBuilder: (context, error, stackTrace) {
return Image.asset(R.ASSETS_IMAGES_PLACEHOLDER_WEBP);
},
),
Positioned(
left: 0,
right: 0,
bottom: 0,
child: Container(
height: 38.w,
color: Colors.black54,
alignment: Alignment.centerLeft,
padding: EdgeInsets.symmetric(horizontal: 12.w),
child: Text(
item.recommend,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Colors.white,
fontSize: 18.sp,
),
),
),
),
],
),
),
Container(
padding: EdgeInsets.only(
left: 16.w,
right: 16.w,
top: 10.w,
),
child: Text(
item.title,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 28.sp, color: ktextPrimary),
),
),
Padding(
padding: EdgeInsets.only(
left: 16.w,
right: 16.w,
top: 10.w,
),
child: Container(
child: _getIcon(1),
)),
10.hb,
Padding(
padding: EdgeInsets.symmetric(
horizontal: 16.w,
),
child: RichText(
text: TextSpan(
children: [
TextSpan(
text: '¥',
style: TextStyle(
color: Colors.red,
fontSize: 28.sp,
),
),
TextSpan(
text: '${item.sellingPrice} ',
style: TextStyle(
color: Colors.red,
fontWeight: FontWeight.bold,
fontSize: 40.sp,
),
),
],
),
),
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: 16.w,
),
child: RichText(
text: TextSpan(
children: [
TextSpan(
text: '原价:¥',
style: TextStyle(
color: ktextSubColor,
fontSize: 20.sp,
),
),
TextSpan(
text: '${item.markingPrice}',
style: TextStyle(
color: ktextSubColor,
fontSize: 20.sp,
decoration: TextDecoration.lineThrough,
),
),
],
),
),
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: 16.w,
),
child: RichText(
text: TextSpan(
children: [
TextSpan(
text: '折扣:',
style: TextStyle(
color: ktextSubColor,
fontSize: 20.sp,
),
),
TextSpan(
text: '9折',
style: TextStyle(
color: ktextSubColor,
fontSize: 20.sp,
),
),
],
),
),
),
],
),
);
}
Widget _getIcon(int type) {
if (type == 1) {
return Container(
width: 86.w,
height: 26.w,
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(4.w),
),
gradient: LinearGradient(
begin: FractionalOffset.centerLeft,
end: FractionalOffset.centerRight,
colors: <Color>[Color(0xFFEC5329), Color(0xFFF58123)],
),
),
child: Text(
'京东自营',
style: TextStyle(fontSize: 18.sp, color: kForeGroundColor),
),
);
} else if (type == 2) {
return Container(
alignment: Alignment.center,
width: 86.w,
height: 30.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(4.w),
),
gradient: LinearGradient(
begin: FractionalOffset.centerLeft,
end: FractionalOffset.centerRight,
colors: <Color>[Color(0xFFF59B1C), Color(0xFFF5AF16)],
),
),
child: Text(
'京东POP',
style: TextStyle(fontSize: 18.sp, color: kForeGroundColor),
),
);
} else
return SizedBox();
}
}

@ -1,399 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/const/resource.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/market/goods_detail_model.dart';
import 'package:aku_new_community/models/market/goods_item.dart';
import 'package:aku_new_community/pages/sign/login/login_page.dart';
import 'package:aku_new_community/provider/user_provider.dart';
import 'package:aku_new_community/ui/market/goods/goods_card.dart';
import 'package:aku_new_community/ui/market/goods/goods_order_detail_page.dart';
import 'package:aku_new_community/ui/market/search/search_goods_page.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/utils/network/base_model.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:aku_new_community/widget/bee_back_button.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/buttons/bottom_button.dart';
import 'package:aku_new_community/widget/others/user_tool.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:provider/provider.dart';
import 'package:velocity_x/velocity_x.dart';
import 'package:waterfall_flow/waterfall_flow.dart';
///
class GoodsDetailPage extends StatefulWidget {
///ID
final int id;
GoodsDetailPage({Key? key, required this.id}) : super(key: key);
@override
_GoodsDetailPageState createState() => _GoodsDetailPageState();
}
class _GoodsDetailPageState extends State<GoodsDetailPage> {
late EasyRefreshController _refreshController;
late GoodsDetailModel _goodsModel;
bool _onload = true;
List<GoodsItem> _topGoods = [];
late PageController _pageController;
int _currentIndex = 0;
TextEditingController _nameController = TextEditingController();
TextEditingController _phoneController = TextEditingController();
@override
void initState() {
super.initState();
final userProvider = Provider.of<UserProvider>(context, listen: false);
_refreshController = EasyRefreshController();
_pageController = PageController();
_nameController.text = userProvider.userInfoModel?.name ??
userProvider.userInfoModel?.nickName ??
'';
_phoneController.text = userProvider.userInfoModel?.tel ?? '';
}
@override
void dispose() {
_refreshController.dispose();
_pageController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
leading: BeeBackButton(),
title: '商品详情',
actions: [
IconButton(
icon: Icon(CupertinoIcons.search),
onPressed: () {
Get.to(() => SearchGoodsPage());
},
),
],
body: EasyRefresh(
firstRefresh: true,
header: MaterialHeader(),
onRefresh: () async {
BaseModel baseModel = await NetUtil().get(
API.market.goodsDetail,
params: {"goodsId": widget.id},
);
if (baseModel.success == true && baseModel.data != null) {
_goodsModel = GoodsDetailModel.fromJson(baseModel.data);
} else {
_goodsModel = GoodsDetailModel.fail();
BotToast.showText(text: baseModel.msg);
}
baseModel = await NetUtil().get(API.market.suppliyerHotTop, params: {
"supplierId": _goodsModel.supplierId,
});
if (baseModel.success == true && baseModel.data != null) {
_topGoods = (baseModel.data as List)
.map((e) => GoodsItem.fromJson(e))
.toList();
}
_onload = false;
setState(() {});
},
child: _onload
? _emptyWidget()
: ListView(
children: [
Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_imageView(_goodsModel.goodsImgList),
Padding(
padding: EdgeInsets.symmetric(horizontal: 32.w),
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
_goodsModel.title.text
.size(40.sp)
.bold
.color(ktextPrimary)
.make()
.expand(),
'¥${_goodsModel.sellingPrice}'
.text
.size(36.sp)
.bold
.color(Colors.red)
.make(),
8.w.widthBox,
'¥${_goodsModel.markingPrice}'
.text
.size(18.sp)
.bold
.textBaseLine(TextBaseline.ideographic)
.color(Colors.black)
.lineThrough
.make(),
],
),
),
24.w.heightBox,
Row(
children: [
32.w.widthBox,
_goodsModel.categoryName.text
.size(24.sp)
.color(ktextSubColor)
.make(),
24.w.widthBox,
'${_goodsModel.subscribeNum}人已订阅'
.text
.size(24.sp)
.color(ktextPrimary)
.make()
],
),
24.w.heightBox,
],
),
),
24.w.heightBox,
_goodsItemDescrible(),
24.w.heightBox,
_supplierWidget(),
24.w.heightBox,
_extraWidget(_topGoods),
],
),
controller: _refreshController,
),
bottomNavi: BottomButton(
onPressed: () {
if (!UserTool.userProvider.isLogin) {
BotToast.showText(text: '请先登录!');
Get.offAll(() => LoginPage());
return;
}
Get.bottomSheet(Material(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(24.w),
),
),
child: Container(
padding: EdgeInsets.all(32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
'预约后商户将通过电话联系您',
style: TextStyle(
fontSize: 28.sp,
),
),
40.hb,
TextField(
controller: _nameController,
decoration: InputDecoration(
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(48),
borderSide: BorderSide.none,
),
fillColor: Color(0xFFEEEEEE),
filled: true,
),
),
32.hb,
TextField(
controller: _phoneController,
decoration: InputDecoration(
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(48),
borderSide: BorderSide.none,
),
fillColor: Color(0xFFEEEEEE),
filled: true,
),
),
80.hb,
MaterialButton(
elevation: 0,
minWidth: double.infinity,
shape: StadiumBorder(),
color: kPrimaryColor,
height: 80.w,
onPressed: () async {
Get.off(() => GoodsOrderDetailPage(
model: _goodsModel,
name: _nameController.text,
phone: _phoneController.text));
},
child: Text('确认购买'),
),
],
),
),
));
},
child: Text('立即购买'),
),
);
}
Widget _imageView(List<ImgModel> imgList) {
return Stack(
children: [
SizedBox(
width: double.infinity,
height: 500.w,
child: PageView.builder(
itemCount: imgList.length,
onPageChanged: (value) {
_pageController.jumpToPage(value);
_currentIndex = value;
setState(() {});
},
controller: _pageController,
itemBuilder: (context, index) {
return SizedBox(
width: double.infinity,
height: 500.w,
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image: API.image(imgList[index].url)),
);
}),
),
Positioned(
bottom: 24.w,
right: 5.w,
child: Container(
alignment: Alignment.center,
width: 69.w,
height: 39.w,
decoration: BoxDecoration(
color: Color(0x80000000),
borderRadius: BorderRadius.circular(40.w)),
child: '${_currentIndex + 1}/${imgList.length}'
.text
.size(24.sp)
.color(Colors.white)
.make(),
),
),
],
);
}
Widget _extraWidget(List<GoodsItem> models) {
return Container(
decoration: BoxDecoration(color: Colors.white),
width: double.infinity,
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
child: Column(
children: [
Row(
children: [
'其他(${models.length}'
.text
.size(24.sp)
.color(ktextPrimary)
.bold
.make(),
],
),
24.w.heightBox,
SizedBox(
height: 1000.w,
child: WaterfallFlow.count(
crossAxisCount: 2,
mainAxisSpacing: 20.w,
crossAxisSpacing: 24.w,
physics: NeverScrollableScrollPhysics(),
children: List.generate(
models.length,
(index) => GoodsCard(
item: models[index],
border: true,
),
),
),
),
],
),
);
}
Widget _supplierWidget() {
return Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
),
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ClipRRect(
borderRadius: BorderRadius.circular(8.w),
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image: API.image(
ImgModel.first(_goodsModel.supplierImgList),
),
width: 160.w,
height: 160.w,
),
),
20.w.widthBox,
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_goodsModel.supplierName.text
.size(28.sp)
.color(ktextPrimary)
.bold
.make(),
54.w.heightBox,
'地址:${_goodsModel.supplierAddress}'
.text
.size(24.sp)
.color(ktextPrimary)
.make()
],
)
],
),
);
}
Widget _goodsItemDescrible() {
return Container(
width: double.infinity,
decoration: BoxDecoration(color: Colors.white),
padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'商品详情'.text.size(32.sp).color(ktextPrimary).bold.make(),
24.w.heightBox,
_goodsModel.detail.text.size(24.sp).color(ktextPrimary).make(),
],
),
);
}
Widget _emptyWidget() {
return Container();
}
}

@ -1,145 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/market/market_category_model.dart';
import 'package:aku_new_community/ui/market/goods/goods_tab_list_view.dart';
import 'package:aku_new_community/ui/market/search/search_goods_page.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class GoodsListView extends StatefulWidget {
final MarketCategoryModel model;
final MarketCategoryModel? selectSubModel;
final List<MarketCategoryModel> subModels;
GoodsListView({
Key? key,
required this.model,
required this.subModels,
this.selectSubModel,
}) : super(key: key);
@override
_GoodsListViewState createState() => _GoodsListViewState();
}
class _GoodsListViewState extends State<GoodsListView>
with TickerProviderStateMixin {
late MarketCategoryModel? _selectModel;
late TabController _tabController;
@override
void initState() {
super.initState();
int initIndex = 0;
//
if (widget.subModels.isNotEmpty) {
_selectModel = widget.subModels.first;
if (widget.selectSubModel != null) {
_selectModel = widget.selectSubModel;
initIndex = widget.subModels.indexOf(widget.selectSubModel!);
}
}
_tabController = TabController(
length: widget.subModels.length,
vsync: this,
initialIndex: initIndex,
);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: widget.model.name,
actions: [
IconButton(
icon: Icon(CupertinoIcons.search),
onPressed: () {
Get.to(() => SearchGoodsPage());
},
)
],
appBarBottom: PreferredSize(
child: SizedBox(
height: 220.w,
child: ListView.builder(
padding: EdgeInsets.symmetric(horizontal: 18.w),
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return GoodsSubTypeButton(
model: widget.subModels[index],
groupValue: _selectModel,
onTap: () {
_selectModel = widget.subModels[index];
_tabController.animateTo(index);
setState(() {});
},
);
},
itemCount: widget.subModels.length,
),
),
preferredSize: Size.fromHeight(220.w),
),
body: TabBarView(
children:
widget.subModels.map((e) => GoodsTabListView(model: e)).toList(),
controller: _tabController,
physics: NeverScrollableScrollPhysics(),
),
);
}
}
class GoodsSubTypeButton extends StatelessWidget {
final MarketCategoryModel model;
final MarketCategoryModel? groupValue;
final VoidCallback onTap;
const GoodsSubTypeButton({
Key? key,
required this.model,
required this.groupValue,
required this.onTap,
}) : super(key: key);
bool get same => model == groupValue;
@override
Widget build(BuildContext context) {
return MaterialButton(
minWidth: 136.w,
padding: EdgeInsets.zero,
onPressed: onTap,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FadeInImage.assetNetwork(
image: API.image(ImgModel.first(model.imgList)),
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
width: 100.w,
height: 100.w,
),
20.hb,
Text(
model.name,
style: TextStyle(
fontSize: 24.sp,
color: same ? kPrimaryColor : ktextPrimary,
),
),
],
),
);
}
}

@ -1,304 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/const/resource.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/extensions/widget_list_ext.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/market/goods_detail_model.dart';
import 'package:aku_new_community/pages/life_pay/pay_finish_page.dart';
import 'package:aku_new_community/pages/life_pay/pay_util.dart';
import 'package:aku_new_community/ui/profile/house/house_owners_page.dart';
import 'package:aku_new_community/utils/network/base_model.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/buttons/bee_numberic_button.dart';
import 'package:aku_new_community/widget/buttons/bottom_button.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
class GoodsOrderDetailPage extends StatefulWidget {
final GoodsDetailModel model;
final String name;
final String phone;
GoodsOrderDetailPage(
{Key? key, required this.model, required this.name, required this.phone})
: super(key: key);
@override
_GoodsOrderDetailPageState createState() => _GoodsOrderDetailPageState();
}
class _GoodsOrderDetailPageState extends State<GoodsOrderDetailPage> {
late EasyRefreshController _refreshController;
bool _onload = true;
///
int _num = 1;
@override
void initState() {
super.initState();
_refreshController = EasyRefreshController();
}
@override
void dispose() {
_refreshController.dispose();
BotToast.closeAllLoading();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '确认订单',
actions: [
TextButton(
onPressed: () {
Get.to(() => HouseOwnersPage(
identify: 4,
));
},
child: '切换房屋'.text.size(28.sp).color(ktextPrimary).make())
],
body: EasyRefresh(
header: MaterialHeader(),
firstRefresh: true,
onRefresh: () async {
_onload = false;
setState(() {});
},
child: _onload
? Container()
: ListView(
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
children: <Widget>[
_addressInfo(),
_goodsInfoWidget(),
].sepWidget(
separate: 24.w.heightBox,
),
),
),
bottomNavi: BottomButton(
onPressed: () async {
final cancel = BotToast.showLoading();
BaseModel baseModel = await NetUtil().post(
API.pay.shoppingAlipay,
params: {
'goodsId': widget.model.id,
'userName': widget.name,
'userTel': widget.phone,
'num': _num,
'payType': 1,
'payPrice': widget.model.sellingPrice,
},
showMessage: false,
);
if ((baseModel.success) && !baseModel.msg.isEmptyOrNull) {
bool result = await PayUtil()
.callAliPay(baseModel.msg, API.pay.shoppingCheck);
if (result) {
Get.off(() => PayFinishPage());
}
} else {
BotToast.showText(text: baseModel.msg);
}
cancel();
},
child: '立即支付'.text.size(32.sp).color(ktextPrimary).bold.make()),
);
}
Widget _addressInfo() {
return Container(
padding: EdgeInsets.all(24.w),
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
widget.model.title.text
.size(32.sp)
.color(ktextPrimary)
.bold
.maxLines(2)
.ellipsis
.make(),
20.w.heightBox,
Row(
children: [
widget.name.text.size(24.sp).color(ktextSubColor).make(),
24.w.widthBox,
widget.phone.text.size(24.sp).color(ktextSubColor).make(),
Spacer(),
'送出时间等待电话联系'.text.size(24.sp).color(ktextPrimary).bold.make(),
],
)
],
),
);
}
Widget _goodsInfoWidget() {
return Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
),
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
'商品信息'.text.size(32.sp).bold.color(ktextPrimary).make(),
Spacer(),
// widget.model.statusString.text
// .size(30.sp)
// .bold
// .color(widget.model.statusColor)
// .make(),
],
),
16.w.heightBox,
BeeDivider.horizontal(),
24.w.heightBox,
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ClipRRect(
borderRadius: BorderRadius.circular(8.w),
clipBehavior: Clip.antiAlias,
child: FadeInImage.assetNetwork(
width: 160.w,
height: 160.w,
fit: BoxFit.cover,
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image:
API.image(ImgModel.first(widget.model.goodsImgList))),
),
24.w.widthBox,
SizedBox(
height: 160.w,
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
widget.model.title.text
.size(28.sp)
.color(ktextPrimary)
.maxLines(2)
.overflow(TextOverflow.ellipsis)
.bold
.maxLines(2)
.ellipsis
.make()
.expand(),
'¥${widget.model.sellingPrice}'
.text
.size(28.sp)
.bold
.color(Color(0xFFE60E0E))
.make(),
],
),
Spacer(),
Row(
children: [
//|${widget.model.levelTwoCategory}
('${widget.model.categoryName}')
.text
.size(24.sp)
.color(ktextSubColor)
.make()
],
),
12.w.heightBox,
Row(
children: [
('${widget.model.recommend}')
.text
.size(24.sp)
.color(ktextSubColor)
.make()
],
),
],
),
).expand()
],
),
40.w.heightBox,
...<Widget>[
Row(
children: [
// (160 + 24).w.widthBox,
'数量'.text.size(24.sp).color(ktextSubColor).make(),
Spacer(),
BeeNumberPickerButton(
initValue: 1,
minValue: 1,
maxValue: 99,
onChange: (value) {
_num = value;
})
],
),
_rowTile('配送方式', '商家配送'),
_rowTile('订单备注', widget.model.arrivalTime ?? ''),
].sepWidget(
separate: 20.w.heightBox,
),
],
),
);
}
// Widget _orderInfo() {
// return Container(
// width: double.infinity,
// padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
// decoration: BoxDecoration(
// color: Colors.white, borderRadius: BorderRadius.circular(8.w)),
// child: Column(
// children: [
// Row(
// children: [
// '订单信息'.text.size(32.sp).bold.color(ktextPrimary).make(),
// ],
// ),
// 24.w.heightBox,
// ...<Widget>[
// _rowTile('配送方式', '商家配送'),
// ].sepWidget(
// separate: 20.w.heightBox,
// )
// ],
// ),
// );
// }
Widget _rowTile(
String title,
String content,
) {
return Row(
children: [
// (160 + 24).w.widthBox,
title.text.size(24.sp).color(ktextSubColor).make(),
Spacer(),
content.text.size(24.sp).color(ktextPrimary).make(),
],
);
}
}

@ -1,50 +0,0 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/models/market/goods_item.dart';
import 'package:aku_new_community/models/market/market_category_model.dart';
import 'package:aku_new_community/pages/things_page/widget/bee_list_view.dart';
import 'package:aku_new_community/ui/market/goods/goods_card.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:waterfall_flow/waterfall_flow.dart';
class GoodsTabListView extends StatefulWidget {
final MarketCategoryModel model;
GoodsTabListView({Key? key, required this.model}) : super(key: key);
@override
_GoodsTabListViewState createState() => _GoodsTabListViewState();
}
class _GoodsTabListViewState extends State<GoodsTabListView>
with AutomaticKeepAliveClientMixin {
EasyRefreshController _refreshController = EasyRefreshController();
@override
Widget build(BuildContext context) {
super.build(context);
return BeeListView<GoodsItem>(
path: API.market.list,
controller: _refreshController,
extraParams: {'categoryId': widget.model.id},
convert: (model) =>
model.tableList?.map((e) => GoodsItem.fromJson(e)).toList() ?? [],
builder: (items) {
return WaterfallFlow.builder(
padding: EdgeInsets.all(32.w),
gridDelegate: SliverWaterfallFlowDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, crossAxisSpacing: 24.w, mainAxisSpacing: 24.w),
itemBuilder: (context, index) {
final GoodsItem item = items[index];
return GoodsCard(item: item);
},
itemCount: items.length,
);
},
);
}
@override
bool get wantKeepAlive => true;
}

@ -6,11 +6,10 @@ import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/constants/sars_api.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/model/good/category_model.dart';
import 'package:aku_new_community/model/good/market_swiper_model.dart';
import 'package:aku_new_community/models/market/goods_classification.dart';
import 'package:aku_new_community/models/market/goods_popular_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';
@ -64,16 +63,14 @@ class _MarketPageState extends State<MarketPage>
double tabBarHeight = 40.w;
late TabController _tabController;
// List<SwiperModel> _swiperModels = [];
List<MarketSwiperModel> _marketSwiperModels = [];
List<CategoryModel> _categoryModels = [];
List<MarketAllCategoryModel> _categoryModels = [];
OrderType _orderType = OrderType.NORMAL;
String priceIcon = R.ASSETS_ICONS_ICON_PRICE_NORMAL_PNG;
List<GoodsClassification> _goodsClassificationList = [];
List<MarketCategoryModel> _goodsClassificationList = [];
List<GoodsHomeModel> _goodsHomeModelList = [];
@ -105,7 +102,7 @@ class _MarketPageState extends State<MarketPage>
Future loadMarketInfo() async {
BaseListModel baseListModel = await NetUtil().getList(
API.market.findRecommendGoodsList,
SARSAPI.market.good.recommend,
params: {
'pageNum': _pageNum,
'size': _size,
@ -126,7 +123,7 @@ class _MarketPageState extends State<MarketPage>
super.initState();
for (int i = 0; i < 10; i++) {
_goodsClassificationList
.add(GoodsClassification(id: 0, name: '', imgUrls: []));
.add(MarketCategoryModel(id: 0, name: '', imgUrls: []));
}
for (int i = 0; i < 6; i++) {
_goodsPopularModelList.add(
@ -336,19 +333,6 @@ class _MarketPageState extends State<MarketPage>
SliverGrid buildSliverGrid() {
return SliverGrid(
// child: WaterfallFlow.builder(
// gridDelegate: SliverWaterfallFlowDelegateWithFixedCrossAxisCount(
// crossAxisCount: 2,
// mainAxisSpacing: 20.w,
// crossAxisSpacing: 20.w,
// ),
// padding: EdgeInsets.all(32.w),
// itemBuilder: (context, index) {
// final item = _hotItems[index];
// return GoodsCard(item: item);
// },
// itemCount: _hotItems.length,
// ),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 20.w,
@ -824,7 +808,7 @@ class _MarketPageState extends State<MarketPage>
);
}
_buildTile(GoodsClassification item, int index) {
_buildTile(MarketCategoryModel item, int index) {
return GestureDetector(
onTap: () {
Get.to(() => NewCategoryPage(
@ -839,7 +823,7 @@ class _MarketPageState extends State<MarketPage>
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
width: 88.w,
height: 88.w,
image: API.image(ImgModel.first(item.imgUrls)),
image: API.image(item.imgUrls.first),
imageErrorBuilder: (context, error, stackTrace) {
return Image.asset(
R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
@ -908,9 +892,6 @@ class _MarketPageState extends State<MarketPage>
width: 88.w,
height: 88.w,
),
// FadeInImage.assetNetwork(
// placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
// image: Api.getImgUrl(kingCoin.url),)
),
Container(
margin: EdgeInsets.only(top: 6.w),

@ -1,301 +0,0 @@
// // import 'package:aku_new_community/base/base_style.dart';
//
// import 'package:flutter/cupertino.dart';
// import 'package:flutter/material.dart';
//
// import 'package:bot_toast/bot_toast.dart';
// import 'package:flutter_easyrefresh/easy_refresh.dart';
// import 'package:flutter_screenutil/flutter_screenutil.dart';
// import 'package:get/get.dart';
// import 'package:waterfall_flow/waterfall_flow.dart';
//
// import 'package:aku_new_community/constants/api.dart';
// import 'package:aku_new_community/models/market/display_category_model.dart';
// import 'package:aku_new_community/models/market/goods_item.dart';
// import 'package:aku_new_community/models/market/market_category_model.dart';
// import 'package:aku_new_community/ui/market/category/category_card.dart';
// import 'package:aku_new_community/ui/market/category/category_page.dart';
// import 'package:aku_new_community/ui/market/goods/goods_card.dart';
// import 'package:aku_new_community/ui/market/order/my_order_page.dart';
// import 'package:aku_new_community/ui/market/search/search_goods_page.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/bee_scaffold.dart';
//
// // import 'package:aku_new_community/ui/market/goods/goods_detail_page.dart';
//
// // import 'package:aku_new_community/widget/tab_bar/bee_tab_bar.dart';
//
// class MarketPage111 extends StatefulWidget {
// MarketPage111({Key? key}) : super(key: key);
//
// @override
// _MarketPageState createState() => _MarketPageState();
// }
//
// class _MarketPageState extends State<MarketPage111>
// with AutomaticKeepAliveClientMixin {
// List<MarketCategoryModel> _marketModels = [];
// List<GoodsItem> _hotItems = [];
// late EasyRefreshController _refreshController;
// int _pageNum = 1;
// int _size = 4;
// int _pageCount = 0;
//
// Future updateMarketInfo() async {
// BaseListModel baseListModel =
// await NetUtil().getList(API.market.hotTop, params: {
// "pageNum": _pageNum,
// "size": _size,
// });
// if (baseListModel.tableList!.isNotEmpty) {
// _hotItems = (baseListModel.tableList as List)
// .map((e) => GoodsItem.fromJson(e))
// .toList();
// }
// _pageCount = baseListModel.pageCount!;
// }
//
// Future loadMarketInfo() async {
// BaseListModel baseListModel =
// await NetUtil().getList(API.market.hotTop, params: {
// "pageNum": _pageNum,
// "size": _size,
// });
// if (baseListModel.tableList!.isNotEmpty) {
// _hotItems.addAll((baseListModel.tableList as List)
// .map((e) => GoodsItem.fromJson(e))
// .toList());
// }
// _pageCount = baseListModel.pageCount!;
// }
//
// @override
// void initState() {
// super.initState();
// _refreshController = EasyRefreshController();
// Future.delayed(Duration(milliseconds: 0), () async {
// _marketModels = await DisplayCategoryModel.top8;
// await updateMarketInfo();
// setState(() {});
// });
// }
//
// @override
// void dispose() {
// _refreshController.dispose();
// super.dispose();
// }
//
// @override
// Widget build(BuildContext context) {
// super.build(context);
// final mediaWidth = MediaQuery.of(context).size.width;
// return BeeScaffold(
// leading: IconButton(
// icon: Icon(CupertinoIcons.search),
// onPressed: () {
// Get.to(() => SearchGoodsPage());
// },
// ),
// title: '商城',
// actions: [
// MaterialButton(
// minWidth: 108.w,
// padding: EdgeInsets.zero,
// onPressed: () async {
// // Get.to(() => SecondHandPage());
// Get.to(() => MyOrderPage());
// },
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// mainAxisSize: MainAxisSize.max,
// children: [
// Image.asset(
// R.ASSETS_ICONS_SECOND_HAND_PNG,
// width: 48.w,
// height: 48.w,
// ),
// 4.hb,
// // '二手'.text.size(20.sp).black.make(),
// '订单'.text.size(20.sp).black.make(),
// ],
// ),
// ),
// MaterialButton(
// minWidth: 108.w,
// padding: EdgeInsets.zero,
// onPressed: () async {
// final cancel = BotToast.showLoading();
// List<MarketCategoryModel> models =
// await DisplayCategoryModel.fetchCategory(0);
// cancel();
// Get.to(() => CategoryPage(models: models));
// },
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// mainAxisSize: MainAxisSize.max,
// children: [
// Image.asset(
// R.ASSETS_ICONS_CATEGORY_PNG,
// width: 48.w,
// height: 48.w,
// ),
// 4.hb,
// '分类'.text.size(20.sp).black.make(),
// ],
// ),
// ),
// ],
// body:
// NestedScrollView(
// headerSliverBuilder: (context, value) {
// var gridItems = Material(
// color: Colors.white,
// clipBehavior: Clip.antiAlias,
// borderRadius: BorderRadius.circular(8.w),
// child: GridView(
// physics: NeverScrollableScrollPhysics(),
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 4,
// childAspectRatio: 1,
// ),
// shrinkWrap: true,
// children:
// _marketModels.map((e) => CategoryCard(model: e)).toList(),
// ),
// );
// return [
// SliverAppBar(
// //AppBar top Widget height
// //bottom height: 48
// // flexibleSpace ( - )/4*2 + + bottom + top
// // *
// //expandedHeight:
// //(mediaWidth - 32.w * 2) / 4 * 2 + 16.w * 2 + 48 + 68.w,
// //
// expandedHeight: (mediaWidth - 32.w * 2) / 4 * 2 + 16.w * 2,
// backgroundColor: Colors.transparent,
// elevation: 0,
// flexibleSpace: FlexibleSpaceBar(
// background: Container(
// color: Color(0xFFF9F9F9),
// padding: EdgeInsets.only(
// top: 16.w,
// left: 32.w,
// right: 32.w,
// bottom: 16.w, //bottom
// ),
// child: Column(
// children: [
// // SizedBox(
// // height: 58.w,
// // child: Row(
// // children: [
// // Text(
// // '热搜:',
// // style: TextStyle(
// // fontSize: 20.sp,
// // ),
// // ),
// // 20.wb,
// // ListView.separated(
// // scrollDirection: Axis.horizontal,
// // separatorBuilder: (_, __) => 20.wb,
// // itemBuilder: (context, index) {
// // final item = _hotItems[index];
// // return MaterialButton(
// // padding:
// // EdgeInsets.symmetric(horizontal: 40.w),
// // minWidth: 0,
// // shape: StadiumBorder(
// // side: BorderSide(
// // color: ktextSubColor,
// // width: 1,
// // ),
// // ),
// // materialTapTargetSize:
// // MaterialTapTargetSize.shrinkWrap,
// // onPressed: () {
// // Get.to(() => GoodsDetailPage(id: item.id));
// // },
// // child: Text(
// // item.title,
// // style: TextStyle(
// // color: ktextSubColor,
// // ),
// // ),
// // );
// // },
// // itemCount: _hotItems.length,
// // ).expand(),
// // ],
// // ),
// // ),
// // 10.hb,
// gridItems.expand(),
// ],
// ),
// ),
// ),
// pinned: true,
// toolbarHeight: 0,
// // bottom: PreferredSize(
// // child: Material(
// // color: Color(0xFFF9F9F9),
// // child: Align(
// // alignment: Alignment.centerLeft,
// // child: BeeTabBar(
// // scrollable: true,
// // controller: _tabController,
// // tabs: ['社区商城', '二手市场'],
// // ),
// // ),
// // ),
// // preferredSize: Size.fromHeight(48),
// // ),
// ),
// ];
// },
// body: EasyRefresh(
// firstRefresh: false,
// enableControlFinishLoad: false,
// header: MaterialHeader(),
// footer: MaterialFooter(),
// controller: _refreshController,
// onRefresh: () async {
// _pageNum = 1;
// await updateMarketInfo();
// setState(() {});
// },
// onLoad: () async {
// _pageNum++;
// await loadMarketInfo();
// if (_pageCount <= _pageNum) {
// _refreshController.finishLoad(noMore: false);
// }
// setState(() {});
// },
// child: WaterfallFlow.builder(
// gridDelegate: SliverWaterfallFlowDelegateWithFixedCrossAxisCount(
// crossAxisCount: 2,
// mainAxisSpacing: 20.w,
// crossAxisSpacing: 20.w,
// ),
// padding: EdgeInsets.all(32.w),
// itemBuilder: (context, index) {
// return SizedBox();
// //final item = _hotItems[index];
// // return GoodsCard(item: item);
// },
// itemCount: _hotItems.length,
// ),
// ),
// ),
// );
// }
//
// @override
// bool get wantKeepAlive => true;
// }

@ -1,219 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/const/resource.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/extensions/widget_list_ext.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/market/order/my_order_list_model.dart';
import 'package:aku_new_community/ui/market/order/my_order_detail_page.dart';
import 'package:aku_new_community/ui/market/order/my_order_evaluation_page.dart';
import 'package:aku_new_community/ui/market/order/my_order_func.dart';
import 'package:aku_new_community/ui/market/order/my_order_refund_page.dart';
import 'package:aku_new_community/ui/market/order/receive_success.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/buttons/card_bottom_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
class MyOrderCard extends StatefulWidget {
final MyOrderListModel model;
final VoidCallback callRefresh;
MyOrderCard({Key? key, required this.model, required this.callRefresh})
: super(key: key);
@override
_MyOrderCardState createState() => _MyOrderCardState();
}
class _MyOrderCardState extends State<MyOrderCard> {
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
Get.to(() => MyOrderDetailPage(
model: widget.model,
));
},
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
),
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
widget.model.goodsName.text
.size(32.sp)
.bold
.color(ktextPrimary)
.make(),
Spacer(),
widget.model.statusString.text
.size(30.sp)
.bold
.color(widget.model.statusColor)
.make(),
],
),
16.w.heightBox,
BeeDivider.horizontal(),
24.w.heightBox,
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ClipRRect(
borderRadius: BorderRadius.circular(8.w),
clipBehavior: Clip.antiAlias,
child: FadeInImage.assetNetwork(
width: 160.w,
height: 160.w,
fit: BoxFit.cover,
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image:
API.image(ImgModel.first(widget.model.goodsImgList))),
),
24.w.widthBox,
SizedBox(
height: 160.w,
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
widget.model.goodsName.text
.size(28.sp)
.color(ktextPrimary)
.maxLines(2)
.overflow(TextOverflow.ellipsis)
.bold
.make(),
Spacer(),
'¥${widget.model.sellingPrice}'
.text
.size(28.sp)
.bold
.color(Color(0xFFE60E0E))
.make(),
],
),
Spacer(),
Row(
children: [
('${widget.model.levelOneCategory}|${widget.model.levelTwoCategory}')
.text
.size(24.sp)
.color(ktextSubColor)
.make()
],
),
],
),
).expand()
],
),
40.w.heightBox,
...[
_rowTile('下单时间', widget.model.arrivalDateString),
_rowTile('到达地点', '人才公寓小区北侧门口'),
_rowTile('发货时间', widget.model.sendDateString),
].sepWidget(separate: 16.w.heightBox),
..._bottomWidget(),
],
),
),
);
}
List<Widget> _bottomWidget() {
List<Widget> _buttons = _getBottomButton(widget.model.status);
return _buttons.isEmpty
? []
: [
40.w.heightBox,
Row(
children: [Spacer(), ..._buttons],
),
];
}
List<Widget> _getBottomButton(int status) {
switch (status) {
case 1:
return [
CardBottomButton.white(
text: '取消预约',
onPressed: () async {
await MyOrderFunc.cancelOrder(widget.model.id);
widget.callRefresh();
}),
].sepWidget(separate: 24.w.widthBox);
case 2:
return <Widget>[
CardBottomButton.yellow(
text: '查看详情',
onPressed: () {
Get.to(MyOrderDetailPage(model: widget.model));
}),
].sepWidget(separate: 24.w.widthBox);
case 3:
return [
CardBottomButton.yellow(
text: '确认收货',
onPressed: () async {
var re = await MyOrderFunc.confirmReceive(widget.model.id);
widget.callRefresh();
if (re) {
Get.to(() => ReceiveSuccess());
}
}),
].sepWidget(separate: 24.w.widthBox);
case 4:
return <Widget>[
CardBottomButton.white(
text: '评价商品',
onPressed: () async {
await Get.to(() => MyOrderEvaluationPage(model: widget.model));
widget.callRefresh();
}),
CardBottomButton.white(
text: '申请退换',
onPressed: () async {
await Get.to(() => MyOrderRefundPage(
model: widget.model,
));
widget.callRefresh();
}),
].sepWidget(separate: 24.w.widthBox);
case 6:
return <Widget>[
CardBottomButton.yellow(text: '查看详情', onPressed: () {}),
];
case 8:
return <Widget>[
CardBottomButton.yellow(text: '查看详情', onPressed: () {}),
];
default:
return [];
}
}
Widget _rowTile(
String title,
String content,
) {
return Row(
children: [
// (160 + 24).w.widthBox,
title.text.size(24.sp).color(ktextSubColor).make(),
Spacer(),
content.text.size(24.sp).color(ktextPrimary).make(),
],
);
}
}

@ -1,413 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/const/resource.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/extensions/widget_list_ext.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/market/goods_item.dart';
import 'package:aku_new_community/models/market/order/my_order_list_model.dart';
import 'package:aku_new_community/models/market/order/order_detail_model.dart';
import 'package:aku_new_community/ui/market/goods/goods_card.dart';
import 'package:aku_new_community/ui/market/order/my_order_func.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart';
import 'package:waterfall_flow/waterfall_flow.dart';
class MyOrderDetailPage extends StatefulWidget {
final MyOrderListModel model;
MyOrderDetailPage({Key? key, required this.model}) : super(key: key);
@override
_MyOrderDetailPageState createState() => _MyOrderDetailPageState();
}
class _MyOrderDetailPageState extends State<MyOrderDetailPage> {
late EasyRefreshController _refreshController;
late List<GoodsItem> _topGoods;
late OrderDetailModel _detailModel;
bool _onload = true;
@override
void initState() {
super.initState();
_refreshController = EasyRefreshController();
}
@override
void dispose() {
_refreshController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '订单详情',
body: EasyRefresh(
firstRefresh: true,
header: MaterialHeader(),
onRefresh: () async {
_detailModel = await MyOrderFunc.getOrderDetail(widget.model.id);
_topGoods = await MyOrderFunc.getHotTops(_detailModel.supplierId!);
_onload = false;
setState(() {});
},
child: _onload
? Container()
: ListView(
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
children: <Widget>[
_statusInfo(),
..._refunReason(widget.model.backReason ?? '',
widget.model.backDateString),
..._evaluationContent(widget.model.evaluationReason ?? '',
widget.model.evaluateDateString),
_goodsInfoWidget(),
_orderInfo(),
_onload ? SizedBox() : _extraWidget(_topGoods),
].sepWidget(
separate: 24.w.heightBox,
),
),
),
);
}
Widget _statusInfo() {
return Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(8.w)),
padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Container(
width: 32.w,
height: 32.w,
decoration: BoxDecoration(
color: Color(0xFFFB4702).withOpacity(0.2),
borderRadius: BorderRadius.circular(16.w),
),
child: Icon(
_icondata,
size: 32.w,
color: Color(0xFFFB4702),
),
),
20.w.widthBox,
widget.model.statusString.text
.size(32.sp)
.bold
.color(ktextPrimary)
.make(),
],
),
20.w.heightBox,
_detailModel.statusTime.text
.size(28.sp)
.bold
.color(ktextPrimary.withOpacity(0.8))
.make()
],
),
);
}
_refunReason(String text, String date) {
return widget.model.backReason == null
? []
: [
Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w)),
padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
'退换理由'.text.size(32.sp).bold.color(ktextPrimary).make(),
],
),
20.w.heightBox,
text.text.size(28.sp).color(ktextSubColor).make(),
20.w.heightBox,
date.text
.size(24.sp)
.bold
.color(ktextPrimary.withOpacity(0.8))
.make()
],
),
)
];
}
_evaluationContent(String text, String date) {
return widget.model.evaluationReason == null
? []
: [
Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w)),
padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
'评价内容'.text.size(32.sp).bold.color(ktextPrimary).make(),
],
),
20.w.heightBox,
RatingBar.builder(
initialRating: double.parse(_detailModel.score!),
minRating: 0,
direction: Axis.horizontal,
allowHalfRating: true,
itemCount: 5,
// itemPadding: EdgeInsets.symmetric(horizontal: 16.w),
itemBuilder: (context, _) => Icon(
Icons.star_border_rounded,
color: kPrimaryColor,
),
itemSize: 64.w,
onRatingUpdate: (rating) {},
glow: false,
),
20.w.heightBox,
text.text.size(28.sp).color(ktextSubColor).make(),
20.w.heightBox,
date.text
.size(24.sp)
.bold
.color(ktextPrimary.withOpacity(0.8))
.make()
],
),
)
];
}
IconData get _icondata {
switch (widget.model.status) {
case 1:
case 2:
return CupertinoIcons.stopwatch;
case 3:
case 4:
case 6:
return CupertinoIcons.checkmark_alt;
case 8:
return CupertinoIcons.stopwatch;
case 9:
return CupertinoIcons.checkmark_alt;
case 10:
return CupertinoIcons.multiply;
default:
return CupertinoIcons.multiply_circle;
}
}
Widget _orderInfo() {
return Container(
width: double.infinity,
padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(8.w)),
child: Column(
children: [
Row(
children: [
'订单信息'.text.size(32.sp).bold.color(ktextPrimary).make(),
],
),
24.w.heightBox,
...<Widget>[
_rowTile('订单编号', widget.model.code),
_rowTile('创建时间', widget.model.createDateString),
...widget.model.sendDate == null
? []
: [_rowTile('发货时间', widget.model.sendDateString)],
...widget.model.arrivalDate == null
? []
: [_rowTile('到货时间', widget.model.arrivalDateString)],
...widget.model.receivingDate == null
? []
: [_rowTile('收货时间', widget.model.receiveDateString)],
..._detailModel.sendDetail == null
? []
: [_rowTile('发货详情', _detailModel.sendDetail!)],
..._detailModel.arrivalTime == null
? []
: [_rowTile('到货说明', _detailModel.arrivalTime!)],
].sepWidget(
separate: 20.w.heightBox,
)
],
),
);
}
Widget _rowTile(
String title,
String content,
) {
return Row(
children: [
// (160 + 24).w.widthBox,
title.text.size(24.sp).color(ktextSubColor).make(),
Spacer(),
content.text.size(24.sp).color(ktextPrimary).make(),
],
);
}
Widget _goodsInfoWidget() {
return Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(8.w)),
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
widget.model.goodsName.text
.size(32.sp)
.bold
.color(ktextPrimary)
.make(),
Spacer(),
// widget.model.statusString.text
// .size(30.sp)
// .bold
// .color(widget.model.statusColor)
// .make(),
],
),
16.w.heightBox,
BeeDivider.horizontal(),
24.w.heightBox,
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ClipRRect(
borderRadius: BorderRadius.circular(8.w),
clipBehavior: Clip.antiAlias,
child: FadeInImage.assetNetwork(
width: 160.w,
height: 160.w,
fit: BoxFit.cover,
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image:
API.image(ImgModel.first(widget.model.goodsImgList))),
),
24.w.widthBox,
SizedBox(
height: 160.w,
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
widget.model.goodsName.text
.size(28.sp)
.color(ktextPrimary)
.maxLines(2)
.overflow(TextOverflow.ellipsis)
.bold
.make(),
Spacer(),
'¥${widget.model.sellingPrice}'
.text
.size(28.sp)
.bold
.color(Color(0xFFE60E0E))
.make(),
],
),
Spacer(),
Row(
children: [
('${widget.model.levelOneCategory}|${widget.model.levelTwoCategory}')
.text
.size(24.sp)
.color(ktextSubColor)
.make()
],
),
// 12.w.heightBox,
// Row(
// children: [
// ('${widget.model.levelTwoCategory}')
// .text
// .size(24.sp)
// .color(ktextSubColor)
// .make()
// ],
// ),
],
),
).expand()
],
),
],
),
);
}
Widget _extraWidget(List<GoodsItem> models) {
return Container(
decoration: BoxDecoration(color: Colors.white),
width: double.infinity,
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
child: Column(
children: [
Row(
children: [
'其他热门(${models.length}'
.text
.size(24.sp)
.color(ktextPrimary)
.bold
.make(),
],
),
24.w.heightBox,
SizedBox(
height: 1000.w,
child: WaterfallFlow.count(
crossAxisCount: 2,
mainAxisSpacing: 20.w,
crossAxisSpacing: 24.w,
physics: NeverScrollableScrollPhysics(),
children: List.generate(
models.length,
(index) => GoodsCard(
item: models[index],
border: true,
),
),
),
),
],
),
);
}
}

@ -1,190 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/const/resource.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/market/order/my_order_list_model.dart';
import 'package:aku_new_community/ui/market/order/my_order_func.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/buttons/bottom_button.dart';
import 'package:aku_new_community/widget/others/bee_text_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart';
class MyOrderEvaluationPage extends StatefulWidget {
final MyOrderListModel model;
MyOrderEvaluationPage({Key? key, required this.model}) : super(key: key);
@override
_MyOrderEvaluationPageState createState() => _MyOrderEvaluationPageState();
}
class _MyOrderEvaluationPageState extends State<MyOrderEvaluationPage> {
late TextEditingController _editingController;
int _rating = 10;
@override
void initState() {
super.initState();
_editingController = TextEditingController();
}
@override
void dispose() {
_editingController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '商品评价',
body: ListView(
padding: EdgeInsets.all(32.w),
children: [
_goodsInfoWidget(),
24.w.heightBox,
_resonWidget(),
],
),
bottomNavi: BottomButton(
onPressed: () async {
await MyOrderFunc.goodsEvalution(
widget.model.id, _rating, _editingController.text);
},
child: '确认提交'.text.size(32.sp).color(ktextPrimary).bold.make()),
);
}
Widget _goodsInfoWidget() {
return Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
),
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
'商品信息'.text.size(32.sp).bold.color(ktextPrimary).make(),
Spacer(),
// widget.model.statusString.text
// .size(30.sp)
// .bold
// .color(widget.model.statusColor)
// .make(),
],
),
16.w.heightBox,
BeeDivider.horizontal(),
24.w.heightBox,
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ClipRRect(
borderRadius: BorderRadius.circular(8.w),
clipBehavior: Clip.antiAlias,
child: FadeInImage.assetNetwork(
width: 160.w,
height: 160.w,
fit: BoxFit.cover,
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image:
API.image(ImgModel.first(widget.model.goodsImgList))),
),
24.w.widthBox,
SizedBox(
height: 160.w,
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
widget.model.goodsName.text
.size(28.sp)
.color(ktextPrimary)
.maxLines(2)
.overflow(TextOverflow.ellipsis)
.bold
.make(),
Spacer(),
'¥${widget.model.sellingPrice}'
.text
.size(28.sp)
.bold
.color(Color(0xFFE60E0E))
.make(),
],
),
Spacer(),
Row(
children: [
('${widget.model.levelOneCategory}|${widget.model.levelTwoCategory}')
.text
.size(24.sp)
.color(ktextSubColor)
.make()
],
),
// 12.w.heightBox,
// Row(
// children: [
// ('${widget.model.levelTwoCategory}')
// .text
// .size(24.sp)
// .color(ktextSubColor)
// .make()
// ],
// ),
],
),
).expand()
],
),
],
),
);
}
Widget _resonWidget() {
return Container(
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 24.w),
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'商品评价'.text.size(32.sp).bold.color(ktextPrimary).make(),
32.w.heightBox,
RatingBar.builder(
initialRating: _rating / 2,
minRating: 0,
direction: Axis.horizontal,
allowHalfRating: true,
itemCount: 5,
// itemPadding: EdgeInsets.symmetric(horizontal: 16.w),
itemBuilder: (context, _) => Icon(
Icons.star_border_rounded,
color: kPrimaryColor,
),
itemSize: 64.w,
onRatingUpdate: (rating) {
_rating = rating.floor();
},
glow: false,
),
32.w.heightBox,
BeeTextField(controller: _editingController, hintText: '请输入评价内容')
],
),
);
}
}

@ -1,70 +0,0 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/models/market/goods_item.dart';
import 'package:aku_new_community/models/market/order/order_detail_model.dart';
import 'package:aku_new_community/utils/network/base_model.dart';
import 'package:aku_new_community/utils/network/net_util.dart';
class MyOrderFunc {
///
static Future<bool> confirmReceive(int goodsAppointmentId) async {
var result = await NetUtil().get(API.market.confirmReceive,
params: {"goodsAppointmentId": goodsAppointmentId}, showMessage: true);
return result.success;
}
///退
static Future refundOrder(
int goodsAppointmentId, String reson, int type) async {
BaseModel baseModel = await NetUtil().get(API.market.refundOrder,
params: {
"goodsAppointmentId": goodsAppointmentId,
"backReason": reson,
"backType": type
},
showMessage: true);
return baseModel;
}
///
static Future cancelOrder(int goodsAppointmentId) async {
BaseModel baseModel = await NetUtil().get(API.market.cancleOrder,
params: {"goodsAppointmentId": goodsAppointmentId}, showMessage: true);
return baseModel;
}
///
static Future goodsEvalution(
int goodsAppointmentId, int rating, String evaluationReason) async {
BaseModel baseModel = await NetUtil().get(API.market.goodsEvaluation,
params: {
"goodsAppointmentId": goodsAppointmentId,
"score": rating,
"evaluationReason": evaluationReason
},
showMessage: true);
return baseModel;
}
///
static Future<List<GoodsItem>> getHotTops(int supplierId) async {
BaseModel baseModel =
await NetUtil().get(API.market.suppliyerHotTop, params: {
"supplierId": supplierId,
});
if (baseModel.success == true && baseModel.data != null) {
return (baseModel.data as List)
.map((e) => GoodsItem.fromJson(e))
.toList();
} else
return [];
}
///
static Future getOrderDetail(int goodsAppointmentId) async {
BaseModel baseModel = await NetUtil().get(API.market.orderDetail,
params: {"goodsAppointmentId": goodsAppointmentId});
if (baseModel.success && baseModel.data != null) {
return OrderDetailModel.fromJson(baseModel.data);
}
}
}

@ -1,77 +0,0 @@
import 'package:aku_new_community/ui/market/order/my_order_view.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/tab_bar/bee_tab_bar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
class MyOrderPage extends StatefulWidget {
MyOrderPage({Key? key}) : super(key: key);
@override
_MyOrderPageState createState() => _MyOrderPageState();
}
class _MyOrderPageState extends State<MyOrderPage>
with TickerProviderStateMixin {
late TabController _tabController;
List<String> _tabs = [
'待发货',
'已发货',
'已到货',
'已收货',
'已评价',
'退换货申请',
];
@override
void initState() {
_tabController = TabController(length: _tabs.length, vsync: this);
super.initState();
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
int _transIndes(int index) {
switch (index) {
case 0:
return 1;
case 1:
return 2;
case 2:
return 3;
case 3:
return 4;
case 4:
return 6;
case 5:
return 8;
default:
return 0;
}
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '我的订单',
appBarBottom: PreferredSize(
preferredSize: Size.fromHeight(88.w),
child: BeeTabBar(
scrollable: true, controller: _tabController, tabs: _tabs),
),
body: TabBarView(
controller: _tabController,
children: List.generate(
_tabs.length,
(index) => MyOrderView(
index: _transIndes(index),
),
),
),
);
}
}

@ -1,201 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/const/resource.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/market/order/my_order_list_model.dart';
import 'package:aku_new_community/ui/market/order/my_order_func.dart';
import 'package:aku_new_community/utils/network/base_model.dart';
import 'package:aku_new_community/widget/bee_divider.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/buttons/aku_single_check_button.dart';
import 'package:aku_new_community/widget/buttons/bottom_button.dart';
import 'package:aku_new_community/widget/others/bee_text_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
class MyOrderRefundPage extends StatefulWidget {
final MyOrderListModel model;
MyOrderRefundPage({Key? key, required this.model}) : super(key: key);
@override
_MyOrderRefundPageState createState() => _MyOrderRefundPageState();
}
class _MyOrderRefundPageState extends State<MyOrderRefundPage> {
int _type = 1; //退1退2
late TextEditingController _editingController;
@override
void initState() {
super.initState();
_editingController = TextEditingController();
}
@override
void dispose() {
_editingController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '商品退换',
body: ListView(
padding: EdgeInsets.all(32.w),
children: [
_goodsInfoWidget(),
24.w.heightBox,
_resonWidget(),
],
),
bottomNavi: BottomButton(
onPressed: () async {
BaseModel baseModel = await MyOrderFunc.refundOrder(
widget.model.id, _editingController.text, _type);
if (baseModel.success) {
Get.back();
}
},
child: '确认提交'.text.size(32.sp).color(ktextPrimary).bold.make()),
);
}
Widget _goodsInfoWidget() {
return Container(
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
),
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
'商品信息'.text.size(32.sp).bold.color(ktextPrimary).make(),
Spacer(),
// widget.model.statusString.text
// .size(30.sp)
// .bold
// .color(widget.model.statusColor)
// .make(),
],
),
16.w.heightBox,
BeeDivider.horizontal(),
24.w.heightBox,
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ClipRRect(
borderRadius: BorderRadius.circular(8.w),
clipBehavior: Clip.antiAlias,
child: FadeInImage.assetNetwork(
width: 160.w,
height: 160.w,
fit: BoxFit.cover,
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image:
API.image(ImgModel.first(widget.model.goodsImgList))),
),
24.w.widthBox,
SizedBox(
height: 160.w,
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
widget.model.goodsName.text
.size(28.sp)
.color(ktextPrimary)
.maxLines(2)
.overflow(TextOverflow.ellipsis)
.bold
.make(),
Spacer(),
'¥${widget.model.sellingPrice}'
.text
.size(28.sp)
.bold
.color(Color(0xFFE60E0E))
.make(),
],
),
Spacer(),
Row(
children: [
('${widget.model.levelOneCategory}|${widget.model.levelTwoCategory}')
.text
.size(24.sp)
.color(ktextSubColor)
.make()
],
),
// 12.w.heightBox,
// Row(
// children: [
// ('${widget.model.levelTwoCategory}')
// .text
// .size(24.sp)
// .color(ktextSubColor)
// .make()
// ],
// ),
],
),
).expand()
],
),
],
),
);
}
Widget _resonWidget() {
return Container(
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 24.w),
width: double.infinity,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'退换原因'.text.size(32.sp).bold.color(ktextPrimary).make(),
32.w.heightBox,
Row(
children: [
AkuSingleCheckButton(
text: '退款',
value: 1,
gropValue: _type,
onPressed: () {
_type = 1;
setState(() {});
},
),
80.w.widthBox,
AkuSingleCheckButton(
text: '换货',
value: 2,
gropValue: _type,
onPressed: () {
_type = 2;
setState(() {});
},
),
],
),
32.w.heightBox,
BeeTextField(controller: _editingController, hintText: '请详细描述问题及原因')
],
),
);
}
}

@ -1,62 +0,0 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/models/market/order/my_order_list_model.dart';
import 'package:aku_new_community/pages/things_page/widget/bee_list_view.dart';
import 'package:aku_new_community/ui/market/order/my_order_card.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart';
class MyOrderView extends StatefulWidget {
final int index;
MyOrderView({Key? key, required this.index}) : super(key: key);
@override
_MyOrderViewState createState() => _MyOrderViewState();
}
class _MyOrderViewState extends State<MyOrderView> {
late EasyRefreshController _refreshController;
@override
void initState() {
super.initState();
_refreshController = EasyRefreshController();
}
@override
void dispose() {
_refreshController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeListView(
path: API.market.myOrderList,
controller: _refreshController,
extraParams: {"orderStart": widget.index},
convert: (models) {
return models.tableList!
.map((e) => MyOrderListModel.fromJson(e))
.toList();
},
builder: (items) {
return ListView.separated(
padding: EdgeInsets.symmetric(vertical: 24.w, horizontal: 32.w),
itemBuilder: (context, index) {
return MyOrderCard(
model: items[index],
callRefresh: () {
_refreshController.callRefresh();
},
);
},
separatorBuilder: (_, __) {
return 24.w.heightBox;
},
itemCount: items.length);
});
}
}

@ -7,7 +7,7 @@
* ====================================================
*/
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/model/good/good_detail_model.dart';
import 'package:aku_new_community/models/market/good_detail_model.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -34,8 +34,8 @@ class _GoodDetailBottomSheetState extends State<GoodDetailBottomSheet>
void initState() {
super.initState();
_scrollController = ScrollController();
if (widget.goodDetail.goodsDetailSpecificationVoList != null) {
widget.goodDetail.goodsDetailSpecificationVoList!.forEach((element) {
if (widget.goodDetail.jcookSpecificationVoList != null) {
widget.goodDetail.jcookSpecificationVoList!.forEach((element) {
if (element.attribute != null) {
attributes.addAll(element.attribute!);
}
@ -70,7 +70,7 @@ class _GoodDetailBottomSheetState extends State<GoodDetailBottomSheet>
children: <Widget>[
_header(),
10.hb,
widget.goodDetail.goodsDetailSpecificationVoList != null
widget.goodDetail.jcookSpecificationVoList != null
? _list()
: SizedBox()
],

@ -2,8 +2,8 @@ import 'dart:async';
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/model/good/good_detail_model.dart';
import 'package:aku_new_community/model/user/adress_model.dart';
import 'package:aku_new_community/models/market/good_detail_model.dart';
import 'package:aku_new_community/pages/personal/address/address_list_page.dart';
import 'package:aku_new_community/provider/app_provider.dart';
import 'package:aku_new_community/ui/market/collection/collection_func.dart';
@ -153,7 +153,7 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
Widget _buildBody(BuildContext context) {
return Column(
children: [
_imageView(_goodDetail!.goodsDetailImageVos ?? []),
_imageView(_goodDetail!.jcookImageVoList ?? []),
widget.integralGood ? _integralExchange() : 20.hb,
widget.integralGood ? _integralGoodInfo() : _goodInfo(),
20.hb,
@ -353,8 +353,8 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
Text(
(_goodDetail!.discountPrice ?? 0) >
(_goodDetail!.sellPrice ?? 0)
? _getDiscount(_goodDetail!.sellPrice ?? -1,
_goodDetail!.discountPrice ?? -1)
? _getDiscount(_goodDetail!.sellPrice.toDouble() ?? -1,
_goodDetail!.discountPrice.toDouble() ?? -1)
: '暂无折扣',
style: TextStyle(fontSize: 24.sp, color: Color(0xFFBBBBBB)),
),
@ -710,7 +710,7 @@ class _GoodDetailPageState extends State<GoodDetailPage> {
);
}
Widget _imageView(List<GoodsDetailImageVos> imgList) {
Widget _imageView(List<JcookImageVoList> imgList) {
return Stack(
children: [
SizedBox(

@ -1,221 +0,0 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/model/common/img_model.dart';
import 'package:aku_new_community/models/market/goods_item.dart';
import 'package:aku_new_community/ui/market/goods/goods_detail_page.dart';
import 'package:aku_new_community/utils/headers.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class GoodsCard extends StatelessWidget {
final GoodsItem item;
final bool? border;
const GoodsCard({Key? key, required this.item, this.border})
: super(key: key);
@override
Widget build(BuildContext context) {
return MaterialButton(
color: Colors.white,
elevation: 0,
shape: !(border ?? false)
? null
: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.w),
side: BorderSide(color: Color(0xFFC4C4C4))),
padding: EdgeInsets.zero,
onPressed: () => Get.to(
() => GoodsDetailPage(id: item.id),
preventDuplicates: false,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12.w)),
),
child: Stack(
children: [
FadeInImage.assetNetwork(
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image: API.image(ImgModel.first(item.imgList)),
fit: BoxFit.fill,
imageErrorBuilder: (context, error, stackTrace) {
return Image.asset(R.ASSETS_IMAGES_PLACEHOLDER_WEBP);
},
),
Positioned(
left: 0,
right: 0,
bottom: 0,
child: Container(
height: 38.w,
color: Colors.black54,
alignment: Alignment.centerLeft,
padding: EdgeInsets.symmetric(horizontal: 12.w),
child: Text(
item.recommend,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Colors.white,
fontSize: 18.sp,
),
),
),
),
],
),
),
Container(
padding: EdgeInsets.only(
left: 16.w,
right: 16.w,
top: 10.w,
),
child: Text(
item.title,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 28.sp, color: ktextPrimary),
),
),
Padding(
padding: EdgeInsets.only(
left: 16.w,
right: 16.w,
top: 10.w,
),
child: Container(
child: _getIcon(1),
)),
10.hb,
Padding(
padding: EdgeInsets.symmetric(
horizontal: 16.w,
),
child: RichText(
text: TextSpan(
children: [
TextSpan(
text: '¥',
style: TextStyle(
color: Colors.red,
fontSize: 28.sp,
),
),
TextSpan(
text: '${item.sellingPrice} ',
style: TextStyle(
color: Colors.red,
fontWeight: FontWeight.bold,
fontSize: 40.sp,
),
),
],
),
),
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: 16.w,
),
child: RichText(
text: TextSpan(
children: [
TextSpan(
text: '原价:¥',
style: TextStyle(
color: ktextSubColor,
fontSize: 20.sp,
),
),
TextSpan(
text: '${item.markingPrice}',
style: TextStyle(
color: ktextSubColor,
fontSize: 20.sp,
decoration: TextDecoration.lineThrough,
),
),
],
),
),
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: 16.w,
),
child: RichText(
text: TextSpan(
children: [
TextSpan(
text: '折扣:',
style: TextStyle(
color: ktextSubColor,
fontSize: 20.sp,
),
),
TextSpan(
text: '9折',
style: TextStyle(
color: ktextSubColor,
fontSize: 20.sp,
),
),
],
),
),
),
],
),
);
}
Widget _getIcon(int type) {
if (type == 1) {
return Container(
width: 86.w,
height: 26.w,
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(4.w),
),
gradient: LinearGradient(
begin: FractionalOffset.centerLeft,
end: FractionalOffset.centerRight,
colors: <Color>[Color(0xFFEC5329), Color(0xFFF58123)],
),
),
child: Text(
'京东自营',
style: TextStyle(fontSize: 18.sp, color: kForeGroundColor),
),
);
} else if (type == 2) {
return Container(
alignment: Alignment.center,
width: 86.w,
height: 30.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(4.w),
),
gradient: LinearGradient(
begin: FractionalOffset.centerLeft,
end: FractionalOffset.centerRight,
colors: <Color>[Color(0xFFF59B1C), Color(0xFFF5AF16)],
),
),
child: Text(
'京东POP',
style: TextStyle(fontSize: 18.sp, color: kForeGroundColor),
),
);
} else
return SizedBox();
}
}

@ -1,5 +1,5 @@
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/model/good/good_detail_model.dart';
import 'package:aku_new_community/models/market/good_detail_model.dart';
import 'package:aku_new_community/models/market/order/order_detail_model.dart';
import 'package:aku_new_community/models/search/search_goods_model.dart';
import 'package:aku_new_community/utils/network/base_list_model.dart';

@ -1,9 +1,9 @@
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/constants/api.dart';
import 'package:aku_new_community/gen/assets.gen.dart';
import 'package:aku_new_community/model/good/good_detail_model.dart';
import 'package:aku_new_community/model/order/create_order_model.dart';
import 'package:aku_new_community/model/user/adress_model.dart';
import 'package:aku_new_community/models/market/good_detail_model.dart';
import 'package:aku_new_community/pages/life_pay/pay_util.dart';
import 'package:aku_new_community/pages/personal/address/address_list_page.dart';
import 'package:aku_new_community/provider/app_provider.dart';
@ -523,7 +523,7 @@ class _SubmitOrderNormalPageState extends State<SubmitOrderNormalPage> {
),
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image: model.goodsDetailImageVos![0].url ?? '',
image: model.jcookImageVoList![0].url ?? '',
height: 188.w,
width: 188.w,
),

@ -1,106 +0,0 @@
import 'dart:io';
import 'package:aku_new_community/base/base_style.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:aku_new_community/widget/buttons/bottom_button.dart';
import 'package:aku_new_community/widget/picker/grid_image_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:velocity_x/velocity_x.dart';
class AddSecondGoodsPage extends StatefulWidget {
AddSecondGoodsPage({Key? key}) : super(key: key);
@override
_AddSecondGoodsPageState createState() => _AddSecondGoodsPageState();
}
class _AddSecondGoodsPageState extends State<AddSecondGoodsPage> {
late TextEditingController _titleController;
late TextEditingController _contentController;
List<File> _files = [];
@override
void initState() {
super.initState();
_titleController = TextEditingController();
_contentController = TextEditingController();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '添加商品',
// actions: [
// Padding(
// padding: EdgeInsets.all(32.w),
// child: '提交'.text.size(28.sp).color(ktextPrimary).make(),
// ),
// ],
body: ListView(
padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w),
children: [
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.w)),
width: double.infinity,
padding: EdgeInsets.symmetric(vertical: 26.w, horizontal: 32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: TextField(
controller: _titleController,
maxLines: 1,
decoration: InputDecoration(
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: Color(0xFFEEEEEE),
width: 2.w,
),
),
contentPadding: EdgeInsets.only(bottom: 10.w),
isDense: true,
hintText: '请输入标题',
hintStyle: TextStyle(
color: ktextSubColor,
fontSize: 36.sp,
),
),
),
),
],
),
20.w.heightBox,
TextField(
controller: _contentController,
decoration: InputDecoration(
border: InputBorder.none,
contentPadding: EdgeInsets.zero,
isDense: true,
hintText: '请输入描述信息,至少五个字',
hintStyle: TextStyle(
color: ktextSubColor,
fontSize: 28.sp,
),
),
minLines: 5,
maxLines: 10,
),
GridImagePicker(onChange: (files) {
_files = files;
}),
],
),
),
]),
bottomNavi: BottomButton(
onPressed: () {},
child: '立即提交'.text.size(32.sp).color(ktextPrimary).bold.make(),
),
);
}
}

@ -1,42 +0,0 @@
import 'package:aku_new_community/models/market/goods_item.dart';
import 'package:aku_new_community/ui/market/goods/goods_card.dart';
import 'package:aku_new_community/ui/market/second_hand/add_second_hand_goods_page.dart';
import 'package:aku_new_community/widget/bee_scaffold.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:waterfall_flow/waterfall_flow.dart';
class SecondHandPage extends StatefulWidget {
SecondHandPage({Key? key}) : super(key: key);
@override
_SecondHandPageState createState() => _SecondHandPageState();
}
class _SecondHandPageState extends State<SecondHandPage> {
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '二手市场',
actions: [
IconButton(
icon: Icon(
CupertinoIcons.add_circled,
),
onPressed: () {
Get.to(() => AddSecondGoodsPage());
},
),
],
body: WaterfallFlow.count(
crossAxisCount: 2,
mainAxisSpacing: 20.w,
crossAxisSpacing: 20.w,
padding: EdgeInsets.all(32.w),
children: [GoodsCard(item: GoodsItem.example())],
),
);
}
}
Loading…
Cancel
Save