@@ -620,7 +620,7 @@ | |||
"languageVersion": "2.8" | |||
} | |||
], | |||
"generated": "2020-10-22T02:18:13.447793Z", | |||
"generated": "2020-10-23T06:24:35.938865Z", | |||
"generator": "pub", | |||
"generatorVersion": "2.8.2" | |||
} |
@@ -19,9 +19,10 @@ class OrderContentBloc extends BlocBase { | |||
_ordersController = null; | |||
} | |||
void loadData(OrderFilterModel filter) { | |||
void loadData(String state, OrderFilterModel filter) { | |||
Map<String, dynamic> params = filter.toJson(); | |||
params.removeWhere((key, value) => value == null || value == ''); | |||
params['state'] = state; | |||
NetUtil.request('/api/v1/order', method: NetMethod.POST, params: params, | |||
onCache: (data) { | |||
_loadData(data); | |||
@@ -33,15 +34,15 @@ class OrderContentBloc extends BlocBase { | |||
void _loadData(dynamic data) { | |||
List list = data ?? []; | |||
OrderModel model = OrderModel(); | |||
model.itemId = '6918577752399759376'; | |||
model.imgUrl = | |||
'https://t7.baidu.com/it/u=3616242789,1098670747&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg?sec=1603444938&t=04aeb23595ac79d419be19ab92bea668'; | |||
model.title = '乐町百褶半身裙秋冬女2019新款复古麻花半身裙甜美百褶半身裙'; | |||
model.price = '108'; | |||
model.commission = '0'; | |||
model.commissionRate = '9.2'; | |||
_orders.add(model); | |||
// OrderModel model = OrderModel(); | |||
// model.itemId = '6918577752399759376'; | |||
// model.imgUrl = | |||
// 'https://t7.baidu.com/it/u=3616242789,1098670747&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg?sec=1603444938&t=04aeb23595ac79d419be19ab92bea668'; | |||
// model.title = '乐町百褶半身裙秋冬女2019新款复古麻花半身裙甜美百褶半身裙'; | |||
// model.price = '108'; | |||
// model.commission = '0'; | |||
// model.commissionRate = '9.2'; | |||
// _orders.add(model); | |||
_orders.addAll(list.map((item) { | |||
return OrderModel.fromJson(Map<String, dynamic>.from(item)); | |||
@@ -0,0 +1,50 @@ | |||
import 'dart:async'; | |||
import 'dart:convert' as convert; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_page_style_model.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
class OrderPageBloc extends BlocBase { | |||
OrderPageStyleModel _style; | |||
StreamController<OrderPageStyleModel> _styleController = | |||
StreamController<OrderPageStyleModel>(); | |||
Stream<OrderPageStyleModel> get outData => _styleController.stream; | |||
@override | |||
void dispose() { | |||
_styleController.close(); | |||
_styleController = null; | |||
} | |||
void loadData(String skipIdentifier) async { | |||
NetUtil.request('/api/v1/mod/${skipIdentifier.toString()}', | |||
method: NetMethod.GET, onCache: (data) { | |||
_loadData(data); | |||
}, onSuccess: (data) { | |||
_loadData(data); | |||
}); | |||
} | |||
void _loadData(dynamic data) { | |||
try { | |||
Map<String, dynamic> json = Map<String, dynamic>.from(data); | |||
if (json == null || json.length == 0) { | |||
return; | |||
} | |||
List mods = json['mod_list']; | |||
if (mods.first != null) { | |||
json = Map<String, dynamic>.from(mods.first); | |||
String d = json['data']; | |||
Map<String, dynamic> da = | |||
Map<String, dynamic>.from(convert.jsonDecode(d)); | |||
_style = OrderPageStyleModel.fromJson(da); | |||
_styleController.add(_style); | |||
} | |||
} catch (err) { | |||
Logger.error(err); | |||
} | |||
} | |||
} |
@@ -1,6 +1,5 @@ | |||
// 订单筛选条件 | |||
class OrderFilterModel { | |||
String state; | |||
String keyword; | |||
String startTime; | |||
String endTime; | |||
@@ -10,8 +9,7 @@ class OrderFilterModel { | |||
String pageSize; | |||
OrderFilterModel( | |||
{this.state, | |||
this.keyword, | |||
{this.keyword, | |||
this.startTime, | |||
this.endTime, | |||
this.type, | |||
@@ -20,7 +18,6 @@ class OrderFilterModel { | |||
this.pageSize}); | |||
OrderFilterModel.fromJson(Map<String, dynamic> json) { | |||
state = json['state']; | |||
keyword = json['keyword']; | |||
startTime = json['start_time']; | |||
endTime = json['end_time']; | |||
@@ -32,7 +29,6 @@ class OrderFilterModel { | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['state'] = this.state; | |||
data['keyword'] = this.keyword; | |||
data['start_time'] = this.startTime; | |||
data['end_time'] = this.endTime; | |||
@@ -1,36 +1,100 @@ | |||
class OrderModel { | |||
int uid; | |||
String nickname; | |||
bool hidOrder; | |||
String ordId; | |||
String providerOid; | |||
String itemId; | |||
String title; | |||
String price; | |||
String commission; | |||
String commissionRate; | |||
String imgUrl; | |||
int itemNum; | |||
String itemTitle; | |||
String itemPrice; | |||
String provider; | |||
String paidPrice; | |||
int orderType; | |||
String userCommission; | |||
String userCommissionRate; | |||
String reason; | |||
int state; | |||
String createAt; | |||
String updateAt; | |||
String confirmAt; | |||
String settleAt; | |||
String thumbnail; | |||
Map<String, dynamic> data; // 保存原始数据 | |||
OrderModel( | |||
{this.itemId, | |||
this.title, | |||
this.price, | |||
this.commission, | |||
this.commissionRate, | |||
this.imgUrl}); | |||
OrderModel({ | |||
this.uid, | |||
this.nickname, | |||
this.hidOrder, | |||
this.ordId, | |||
this.providerOid, | |||
this.itemId, | |||
this.itemNum, | |||
this.itemTitle, | |||
this.itemPrice, | |||
this.provider, | |||
this.paidPrice, | |||
this.orderType, | |||
this.userCommission, | |||
this.userCommissionRate, | |||
this.reason, | |||
this.state, | |||
this.createAt, | |||
this.updateAt, | |||
this.confirmAt, | |||
this.settleAt, | |||
this.thumbnail, | |||
this.data, | |||
}); | |||
OrderModel.fromJson(Map<String, dynamic> json) { | |||
uid = json['uid']; | |||
nickname = json['nickname']; | |||
hidOrder = json['hid_order']; | |||
ordId = json['ord_id']; | |||
providerOid = json['provider_oid']; | |||
itemId = json['item_id']; | |||
title = json['title']; | |||
price = json['price']; | |||
commission = json['commission']; | |||
commissionRate = json['commission_rate']; | |||
imgUrl = json['img_url']; | |||
itemNum = json['item_num']; | |||
itemTitle = json['item_title']; | |||
itemPrice = json['item_price']; | |||
provider = json['provider']; | |||
paidPrice = json['paid_price']; | |||
orderType = json['order_type']; | |||
userCommission = json['user_commission']; | |||
userCommissionRate = json['user_commission_rate']; | |||
reason = json['reason']; | |||
state = json['state']; | |||
createAt = json['create_at']; | |||
updateAt = json['update_at']; | |||
confirmAt = json['confirm_at']; | |||
settleAt = json['settle_at']; | |||
thumbnail = json['thumbnail']; | |||
data = json; | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['uid'] = this.uid; | |||
data['nickname'] = this.nickname; | |||
data['hid_order'] = this.hidOrder; | |||
data['ord_id'] = this.ordId; | |||
data['provider_oid'] = this.providerOid; | |||
data['item_id'] = this.itemId; | |||
data['title'] = this.title; | |||
data['price'] = this.price; | |||
data['commission'] = this.commission; | |||
data['commission_rate'] = this.commissionRate; | |||
data['img_url'] = this.imgUrl; | |||
data['item_num'] = this.itemNum; | |||
data['item_title'] = this.itemTitle; | |||
data['item_price'] = this.itemPrice; | |||
data['provider'] = this.provider; | |||
data['paid_price'] = this.paidPrice; | |||
data['order_type'] = this.orderType; | |||
data['user_commission'] = this.userCommission; | |||
data['user_commission_rate'] = this.userCommissionRate; | |||
data['reason'] = this.reason; | |||
data['state'] = this.state; | |||
data['create_at'] = this.createAt; | |||
data['update_at'] = this.updateAt; | |||
data['confirm_at'] = this.confirmAt; | |||
data['settle_at'] = this.settleAt; | |||
data['thumbnail'] = this.thumbnail; | |||
return data; | |||
} | |||
} |
@@ -0,0 +1,157 @@ | |||
class OrderPageItemStyleModel { | |||
String textCopy; | |||
String textOrderNo; | |||
String textOrderTime; | |||
String textFinishTime; | |||
String colorProviderFont; | |||
String colorProviderBg; | |||
String colorOrderTypeFont; | |||
String colorOrderStateFont; | |||
String colorTitle; | |||
String colorFont; | |||
String colorCopyBg; | |||
String colorTipsBg; | |||
String colorAmountFont; | |||
String colorIncomeFont; | |||
String skipIdentifier; | |||
List<OrderStateModel> orderState; | |||
List<OrderTypeModel> orderType; | |||
OrderPageItemStyleModel( | |||
{this.textCopy, | |||
this.textOrderNo, | |||
this.textOrderTime, | |||
this.textFinishTime, | |||
this.colorProviderFont, | |||
this.colorProviderBg, | |||
this.colorOrderTypeFont, | |||
this.colorOrderStateFont, | |||
this.colorTitle, | |||
this.colorFont, | |||
this.colorCopyBg, | |||
this.colorTipsBg, | |||
this.colorAmountFont, | |||
this.colorIncomeFont, | |||
this.skipIdentifier, | |||
this.orderState, | |||
this.orderType}); | |||
OrderPageItemStyleModel.fromJson(Map<String, dynamic> json) { | |||
textCopy = json['text_copy']; | |||
textOrderNo = json['text_order_no']; | |||
textOrderTime = json['text_order_time']; | |||
textFinishTime = json['text_finish_time']; | |||
colorProviderFont = json['color_provider_font']; | |||
colorProviderBg = json['color_provider_bg']; | |||
colorOrderTypeFont = json['color_order_type_font']; | |||
colorOrderStateFont = json['color_order_state_font']; | |||
colorTitle = json['color_title']; | |||
colorFont = json['color_font']; | |||
colorCopyBg = json['color_copy_bg']; | |||
colorTipsBg = json['color_tips_bg']; | |||
colorAmountFont = json['color_amount_font']; | |||
colorIncomeFont = json['color_income_font']; | |||
skipIdentifier = json['skip_identifier']; | |||
if (json['order_state'] != null) { | |||
orderState = new List<OrderStateModel>(); | |||
json['order_state'].forEach((v) { | |||
orderState.add(new OrderStateModel.fromJson(v)); | |||
}); | |||
} | |||
if (json['order_type'] != null) { | |||
orderType = new List<OrderTypeModel>(); | |||
json['order_type'].forEach((v) { | |||
orderType.add(new OrderTypeModel.fromJson(v)); | |||
}); | |||
} | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['text_copy'] = this.textCopy; | |||
data['text_order_no'] = this.textOrderNo; | |||
data['text_order_time'] = this.textOrderTime; | |||
data['text_finish_time'] = this.textFinishTime; | |||
data['color_provider_font'] = this.colorProviderFont; | |||
data['color_provider_bg'] = this.colorProviderBg; | |||
data['color_order_type_font'] = this.colorOrderTypeFont; | |||
data['color_order_state_font'] = this.colorOrderStateFont; | |||
data['color_title'] = this.colorTitle; | |||
data['color_font'] = this.colorFont; | |||
data['color_copy_bg'] = this.colorCopyBg; | |||
data['color_tips_bg'] = this.colorTipsBg; | |||
data['color_amount_font'] = this.colorAmountFont; | |||
data['color_income_font'] = this.colorIncomeFont; | |||
data['skip_identifier'] = this.skipIdentifier; | |||
if (this.orderState != null) { | |||
data['order_state'] = this.orderState.map((v) => v.toJson()).toList(); | |||
} | |||
if (this.orderType != null) { | |||
data['order_type'] = this.orderType.map((v) => v.toJson()).toList(); | |||
} | |||
return data; | |||
} | |||
} | |||
class OrderStateModel { | |||
String name; | |||
String type; | |||
String tips; | |||
String tipsReplaceKey; | |||
String tipsReplaceColor; | |||
String amountText; | |||
String incomeText; | |||
OrderStateModel( | |||
{this.name, | |||
this.type, | |||
this.tips, | |||
this.tipsReplaceKey, | |||
this.tipsReplaceColor, | |||
this.amountText, | |||
this.incomeText}); | |||
OrderStateModel.fromJson(Map<String, dynamic> json) { | |||
name = json['name']; | |||
type = json['type']; | |||
tips = json['tips']; | |||
tipsReplaceKey = json['tips_replace_key']; | |||
tipsReplaceColor = json['tips_replace_color']; | |||
amountText = json['amount_text']; | |||
incomeText = json['income_text']; | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['name'] = this.name; | |||
data['type'] = this.type; | |||
data['tips'] = this.tips; | |||
data['tips_replace_key'] = this.tipsReplaceKey; | |||
data['tips_replace_color'] = this.tipsReplaceColor; | |||
data['amount_text'] = this.amountText; | |||
data['income_text'] = this.incomeText; | |||
return data; | |||
} | |||
} | |||
class OrderTypeModel { | |||
String name; | |||
String type; | |||
String replaceKey; | |||
OrderTypeModel({this.name, this.type, this.replaceKey}); | |||
OrderTypeModel.fromJson(Map<String, dynamic> json) { | |||
name = json['name']; | |||
type = json['type']; | |||
replaceKey = json['replace_key']; | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['name'] = this.name; | |||
data['type'] = this.type; | |||
data['replace_key'] = this.replaceKey; | |||
return data; | |||
} | |||
} |
@@ -0,0 +1,176 @@ | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_page_item_style_model.dart'; | |||
class OrderPageStyleModel { | |||
String appBarName; | |||
String appBarNameColor; | |||
String appBarBgImg; | |||
String appBarBgColor; | |||
String appBgColor; | |||
String appActivateColor; | |||
String searchBarLeftIcon; | |||
String searchBarRightIcon; | |||
String searchBarPlaceholder; | |||
String searchBarHideTextColor; | |||
String searchBarBgColor; | |||
String searchBarBtnText; | |||
String searchBarBtnTextColor; | |||
String searchBarBtnBgColor; | |||
String searchBtnReset; | |||
String searchBtnOk; | |||
String noticeSecurityIcon; | |||
String noticeSecurityTitle; | |||
String noticeSecuritySkipTitle; | |||
String noticeSecuritySkipColor; | |||
String noticeSecuritySkipIdentifier; | |||
OrderPageFilterStyleModel filter; | |||
OrderPageItemStyleModel list; | |||
OrderPageStyleModel( | |||
{this.appBarName, | |||
this.appBarNameColor, | |||
this.appBarBgImg, | |||
this.appBarBgColor, | |||
this.appBgColor, | |||
this.appActivateColor, | |||
this.searchBarLeftIcon, | |||
this.searchBarRightIcon, | |||
this.searchBarPlaceholder, | |||
this.searchBarHideTextColor, | |||
this.searchBarBgColor, | |||
this.searchBarBtnText, | |||
this.searchBarBtnTextColor, | |||
this.searchBarBtnBgColor, | |||
this.searchBtnReset, | |||
this.searchBtnOk, | |||
this.noticeSecurityIcon, | |||
this.noticeSecurityTitle, | |||
this.noticeSecuritySkipTitle, | |||
this.noticeSecuritySkipColor, | |||
this.noticeSecuritySkipIdentifier, | |||
this.filter, | |||
this.list}); | |||
OrderPageStyleModel.fromJson(Map<String, dynamic> json) { | |||
appBarName = json['app_bar_name']; | |||
appBarNameColor = json['app_bar_name_color']; | |||
appBarBgImg = json['app_bar_bg_img']; | |||
appBarBgColor = json['app_bar_bg_color']; | |||
appBgColor = json['app_bg_color']; | |||
appActivateColor = json['app_activate_color']; | |||
searchBarLeftIcon = json['search_bar_left_icon']; | |||
searchBarRightIcon = json['search_bar_right_icon']; | |||
searchBarPlaceholder = json['search_bar_placeholder']; | |||
searchBarHideTextColor = json['search_bar_hide_text_color']; | |||
searchBarBgColor = json['search_bar_bg_color']; | |||
searchBarBtnText = json['search_bar_btn_text']; | |||
searchBarBtnTextColor = json['search_bar_btn_text_color']; | |||
searchBarBtnBgColor = json['search_bar_btn_bg_color']; | |||
searchBtnReset = json['search_btn_reset']; | |||
searchBtnOk = json['search_btn_ok']; | |||
noticeSecurityIcon = json['notice_security_icon']; | |||
noticeSecurityTitle = json['notice_security_title']; | |||
noticeSecuritySkipTitle = json['notice_security_skip_title']; | |||
noticeSecuritySkipColor = json['notice_security_skip_color']; | |||
noticeSecuritySkipIdentifier = json['notice_security_skip_identifier']; | |||
filter = json['filter'] != null | |||
? new OrderPageFilterStyleModel.fromJson(json['filter']) | |||
: null; | |||
list = json['list'] != null | |||
? OrderPageItemStyleModel.fromJson(json['list']) | |||
: null; | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['app_bar_name'] = this.appBarName; | |||
data['app_bar_name_color'] = this.appBarNameColor; | |||
data['app_bar_bg_img'] = this.appBarBgImg; | |||
data['app_bar_bg_color'] = this.appBarBgColor; | |||
data['app_bg_color'] = this.appBgColor; | |||
data['app_activate_color'] = this.appActivateColor; | |||
data['search_bar_left_icon'] = this.searchBarLeftIcon; | |||
data['search_bar_right_icon'] = this.searchBarRightIcon; | |||
data['search_bar_placeholder'] = this.searchBarPlaceholder; | |||
data['search_bar_hide_text_color'] = this.searchBarHideTextColor; | |||
data['search_bar_bg_color'] = this.searchBarBgColor; | |||
data['search_bar_btn_text'] = this.searchBarBtnText; | |||
data['search_bar_btn_text_color'] = this.searchBarBtnTextColor; | |||
data['search_bar_btn_bg_color'] = this.searchBarBtnBgColor; | |||
data['search_btn_reset'] = this.searchBtnReset; | |||
data['search_btn_ok'] = this.searchBtnOk; | |||
data['notice_security_icon'] = this.noticeSecurityIcon; | |||
data['notice_security_title'] = this.noticeSecurityTitle; | |||
data['notice_security_skip_title'] = this.noticeSecuritySkipTitle; | |||
data['notice_security_skip_color'] = this.noticeSecuritySkipColor; | |||
data['notice_security_skip_identifier'] = this.noticeSecuritySkipIdentifier; | |||
if (this.filter != null) { | |||
data['filter'] = this.filter.toJson(); | |||
} | |||
if (this.list != null) { | |||
data['list'] = this.list.toJson(); | |||
} | |||
return data; | |||
} | |||
} | |||
class OrderPageFilterStyleModel { | |||
String icon; | |||
List<OrderTypeModel> orderState; | |||
String providerTitle; | |||
List<OrderTypeModel> providerType; | |||
String orderTitle; | |||
List<OrderTypeModel> orderType; | |||
String orderTimeTitle; | |||
OrderPageFilterStyleModel( | |||
{this.icon, | |||
this.orderState, | |||
this.providerTitle, | |||
this.providerType, | |||
this.orderTitle, | |||
this.orderType, | |||
this.orderTimeTitle}); | |||
OrderPageFilterStyleModel.fromJson(Map<String, dynamic> json) { | |||
icon = json['icon']; | |||
if (json['order_state'] != null) { | |||
orderState = new List<OrderTypeModel>(); | |||
json['order_state'].forEach((v) { | |||
orderState.add(new OrderTypeModel.fromJson(v)); | |||
}); | |||
} | |||
providerTitle = json['provider_title']; | |||
if (json['provider_type'] != null) { | |||
providerType = new List<OrderTypeModel>(); | |||
json['provider_type'].forEach((v) { | |||
providerType.add(new OrderTypeModel.fromJson(v)); | |||
}); | |||
} | |||
orderTitle = json['order_title']; | |||
if (json['order_type'] != null) { | |||
orderType = new List<OrderTypeModel>(); | |||
json['order_type'].forEach((v) { | |||
orderType.add(new OrderTypeModel.fromJson(v)); | |||
}); | |||
} | |||
orderTimeTitle = json['order_time_title']; | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['icon'] = this.icon; | |||
if (this.orderState != null) { | |||
data['order_state'] = this.orderState.map((v) => v.toJson()).toList(); | |||
} | |||
data['provider_title'] = this.providerTitle; | |||
if (this.providerType != null) { | |||
data['provider_type'] = this.providerType.map((v) => v.toJson()).toList(); | |||
} | |||
data['order_title'] = this.orderTitle; | |||
if (this.orderType != null) { | |||
data['order_type'] = this.orderType.map((v) => v.toJson()).toList(); | |||
} | |||
data['order_time_title'] = this.orderTimeTitle; | |||
return data; | |||
} | |||
} |
@@ -2,14 +2,18 @@ import 'package:flutter/material.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/bloc/order_content_bloc.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_filter_model.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_model.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_page_style_model.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/views/order_item_widget.dart'; | |||
import 'package:zhiying_base_widget/widgets/empty/empty_widget.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
class OrderContentPage extends StatefulWidget { | |||
final String state; // 订单状态 | |||
final OrderPageStyleModel style; | |||
final OrderFilterModel filter; | |||
const OrderContentPage({Key key, this.filter}) : super(key: key); | |||
const OrderContentPage(this.state, {Key key, this.filter, this.style}) | |||
: super(key: key); | |||
@override | |||
_OrderContentPageState createState() => _OrderContentPageState(); | |||
@@ -20,15 +24,18 @@ class _OrderContentPageState extends State<OrderContentPage> { | |||
Widget build(BuildContext context) { | |||
return BlocProvider<OrderContentBloc>( | |||
bloc: OrderContentBloc(), | |||
child: OrderContentContainer(widget.filter), | |||
child: OrderContentContainer(widget.state, widget.filter, widget.style), | |||
); | |||
} | |||
} | |||
class OrderContentContainer extends StatefulWidget { | |||
final String state; // 订单状态 | |||
final OrderFilterModel filter; | |||
final OrderPageStyleModel style; | |||
const OrderContentContainer(this.filter, {Key key}) : super(key: key); | |||
const OrderContentContainer(this.state, this.filter, this.style, {Key key}) | |||
: super(key: key); | |||
@override | |||
_OrderContentContainerState createState() => _OrderContentContainerState(); | |||
@@ -40,7 +47,7 @@ class _OrderContentContainerState extends State<OrderContentContainer> { | |||
@override | |||
void initState() { | |||
_bloc = BlocProvider.of(context); | |||
_bloc.loadData(widget.filter); | |||
_bloc.loadData(widget.state, widget.filter); | |||
super.initState(); | |||
} | |||
@@ -65,7 +72,10 @@ class _OrderContentContainerState extends State<OrderContentContainer> { | |||
return ListView.builder( | |||
itemCount: orders.length, | |||
itemBuilder: (context, index) { | |||
return OrderItemWidget(orders[index]); | |||
return OrderItemWidget( | |||
orders[index], | |||
widget.style, | |||
); | |||
}); | |||
}); | |||
} | |||
@@ -1,11 +1,15 @@ | |||
import 'package:flutter/cupertino.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/bloc/order_page_bloc.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_filter_model.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_page_item_style_model.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_page_style_model.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/order_content_page.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/order_search_page.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/views/order_filter.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/views/order_serch_widget.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/views/order_tabbar_widget.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
// 订单页面 | |||
class OrdersPage extends StatefulWidget { | |||
@@ -27,8 +31,10 @@ class _OrdersPageState extends State<OrdersPage> { | |||
backgroundColor: Color(0xfff9f9f9), | |||
appBar: _createNav(), | |||
body: SafeArea( | |||
child: _OrdersContainer(), | |||
), | |||
child: BlocProvider<OrderPageBloc>( | |||
bloc: OrderPageBloc(), | |||
child: _OrdersContainer(widget.data), | |||
)), | |||
); | |||
} | |||
@@ -70,6 +76,10 @@ class _OrdersPageState extends State<OrdersPage> { | |||
} | |||
class _OrdersContainer extends StatefulWidget { | |||
final Map<String, dynamic> data; | |||
const _OrdersContainer(this.data, {Key key}) : super(key: key); | |||
@override | |||
_OrdersContainerState createState() => _OrdersContainerState(); | |||
} | |||
@@ -78,90 +88,92 @@ class _OrdersContainerState extends State<_OrdersContainer> | |||
with TickerProviderStateMixin { | |||
TabController _tabController; | |||
GlobalKey _tabKey = GlobalKey(); | |||
OrderPageBloc _bloc; | |||
final OrderFilterModel _filter = OrderFilterModel(); | |||
bool _isFilterShow = false; | |||
List<String> _titles = [ | |||
'全部', | |||
'已付款', | |||
'已结算', | |||
'已失效', | |||
'全部', | |||
'已付款', | |||
]; | |||
List<String> _titles = []; | |||
List<Widget> _contents = []; | |||
@override | |||
void initState() { | |||
_tabController = TabController(length: 6, vsync: this); | |||
_contents = [ | |||
OrderContentPage( | |||
filter: _filter, | |||
), | |||
OrderContentPage( | |||
filter: _filter, | |||
), | |||
OrderContentPage( | |||
filter: _filter, | |||
), | |||
OrderContentPage( | |||
filter: _filter, | |||
), | |||
OrderContentPage( | |||
filter: _filter, | |||
), | |||
OrderContentPage( | |||
filter: _filter, | |||
), | |||
]; | |||
_bloc = BlocProvider.of<OrderPageBloc>(context); | |||
if (widget.data.containsKey('skip_identifier')) { | |||
_bloc.loadData(widget.data['skip_identifier']); | |||
} | |||
super.initState(); | |||
} | |||
@override | |||
Widget build(BuildContext context) { | |||
return Column( | |||
children: <Widget>[ | |||
GestureDetector( | |||
child: OrderSearchWidget(), | |||
onTap: () { | |||
Navigator.of(context) | |||
.push(CupertinoPageRoute(builder: (BuildContext context) { | |||
return OrderSearchPage(); | |||
})); | |||
}, | |||
), | |||
OrderTabbarWidget( | |||
_tabController, | |||
_titles, | |||
key: _tabKey, | |||
onMoreClick: () { | |||
setState(() { | |||
_isFilterShow = !_isFilterShow; | |||
}); | |||
}, | |||
), | |||
Expanded( | |||
child: Stack( | |||
return StreamBuilder<OrderPageStyleModel>( | |||
stream: _bloc.outData, | |||
builder: (BuildContext context, AsyncSnapshot snapshot) { | |||
OrderPageStyleModel model = snapshot.data; | |||
if (model == null) { | |||
return Container(); | |||
} | |||
List<OrderTypeModel> type = model.filter.orderState; | |||
_tabController = | |||
TabController(length: type?.length ?? 0, vsync: this); | |||
_titles = List.generate(type?.length, (index) => type[index].name); | |||
_contents = List.generate( | |||
type?.length ?? 0, | |||
(index) => OrderContentPage( | |||
type[index].type, | |||
style: model, | |||
filter: _filter, | |||
), | |||
); | |||
return Column( | |||
children: <Widget>[ | |||
TabBarView( | |||
children: _contents, | |||
controller: _tabController, | |||
GestureDetector( | |||
child: OrderSearchWidget(model), | |||
onTap: () { | |||
Navigator.of(context) | |||
.push(CupertinoPageRoute(builder: (BuildContext context) { | |||
return OrderSearchPage(); | |||
})); | |||
}, | |||
), | |||
Visibility( | |||
visible: _isFilterShow, | |||
child: OrderFilterWidget( | |||
onDismiss: () { | |||
setState(() { | |||
_isFilterShow = false; | |||
}); | |||
}, | |||
OrderTabbarWidget( | |||
model, | |||
_tabController, | |||
_titles, | |||
key: _tabKey, | |||
onMoreClick: () { | |||
setState(() { | |||
_isFilterShow = !_isFilterShow; | |||
}); | |||
}, | |||
), | |||
Expanded( | |||
child: Stack( | |||
children: <Widget>[ | |||
TabBarView( | |||
children: _contents, | |||
controller: _tabController, | |||
), | |||
Visibility( | |||
visible: _isFilterShow, | |||
child: OrderFilterWidget( | |||
model, | |||
_filter, | |||
onDismiss: () { | |||
setState(() { | |||
_isFilterShow = false; | |||
}); | |||
}, | |||
), | |||
) | |||
], | |||
), | |||
) | |||
], | |||
), | |||
) | |||
], | |||
); | |||
); | |||
}); | |||
} | |||
} |
@@ -1,16 +1,56 @@ | |||
import 'package:flutter/material.dart'; | |||
import 'package:intl/intl.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_filter_model.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_page_item_style_model.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_page_style_model.dart'; | |||
import 'package:zhiying_base_widget/widgets/others/action_date_alert/action_date_alert.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
class OrderFilterWidget extends StatefulWidget { | |||
final OrderPageStyleModel style; | |||
final OrderFilterModel filterModel; | |||
final VoidCallback onDismiss; | |||
const OrderFilterWidget({Key key, this.onDismiss}) : super(key: key); | |||
const OrderFilterWidget(this.style, this.filterModel, | |||
{Key key, this.onDismiss}) | |||
: super(key: key); | |||
@override | |||
_OrderFilterWidgetState createState() => _OrderFilterWidgetState(); | |||
} | |||
class _OrderFilterWidgetState extends State<OrderFilterWidget> { | |||
int _currentProvider = 0; //订单来源 | |||
int _currentType = 0; // 订单类型 | |||
int _startTime = 0; // 起始时间 | |||
int _endTime = 0; // 结束时间 | |||
@override | |||
void initState() { | |||
if (widget?.filterModel?.provider != null && | |||
widget.filterModel.provider != '') { | |||
List<OrderTypeModel> list = widget?.style?.filter?.providerType; | |||
for (int index = 0; index < list.length; index++) { | |||
if (list[index].type == widget.filterModel.provider) { | |||
_currentProvider = index; | |||
break; | |||
} | |||
} | |||
} | |||
if (widget?.filterModel?.type != null && widget.filterModel.type != '') { | |||
List<OrderTypeModel> list = widget?.style?.filter?.orderType; | |||
for (int index = 0; index < list.length; index++) { | |||
if (list[index].type == widget.filterModel.type) { | |||
_currentType = index; | |||
break; | |||
} | |||
} | |||
} | |||
super.initState(); | |||
} | |||
@override | |||
Widget build(BuildContext context) { | |||
return GestureDetector( | |||
@@ -24,11 +64,11 @@ class _OrderFilterWidgetState extends State<OrderFilterWidget> { | |||
child: Column( | |||
mainAxisAlignment: MainAxisAlignment.start, | |||
children: <Widget>[ | |||
_creteTitle('订单来源'), | |||
_createTags(), | |||
_creteTitle('订单类型'), | |||
_createTags(), | |||
_creteTitle('订单时间'), | |||
_creteTitle(widget?.style?.filter?.providerTitle ?? ''), | |||
_createSources(), | |||
_creteTitle(widget?.style?.filter?.orderTitle ?? ''), | |||
_createType(), | |||
_creteTitle(widget?.style?.filter?.orderTimeTitle ?? ''), | |||
_creteTime(), | |||
Container( | |||
width: double.infinity, | |||
@@ -58,7 +98,7 @@ class _OrderFilterWidgetState extends State<OrderFilterWidget> { | |||
); | |||
} | |||
Widget _createTags() { | |||
Widget _createSources() { | |||
return Container( | |||
width: double.infinity, | |||
padding: | |||
@@ -68,22 +108,65 @@ class _OrderFilterWidgetState extends State<OrderFilterWidget> { | |||
crossAxisAlignment: WrapCrossAlignment.start, | |||
spacing: 20, | |||
runSpacing: 10, | |||
children: List.generate(10, (index) { | |||
return Container( | |||
padding: EdgeInsets.only(left: 12, right: 12, top: 6, bottom: 6), | |||
decoration: BoxDecoration( | |||
color: Color(0xfff1f1f1), | |||
borderRadius: BorderRadius.circular(5)), | |||
child: Text( | |||
'全部', | |||
style: TextStyle(fontSize: 12, color: Color(0xff999999)), | |||
), | |||
children: List.generate( | |||
widget?.style?.filter?.providerType?.length ?? 0, (index) { | |||
return GestureDetector( | |||
onTap: () { | |||
setState(() { | |||
_currentProvider = index; | |||
}); | |||
}, | |||
child: _createTag( | |||
widget.style.filter.providerType[index].name ?? '', | |||
index == _currentProvider), | |||
); | |||
}).toList(), | |||
), | |||
); | |||
} | |||
Widget _createType() { | |||
return Container( | |||
width: double.infinity, | |||
padding: | |||
const EdgeInsets.only(left: 12.5, right: 12.5, bottom: 5, top: 5), | |||
color: Colors.white, | |||
child: Wrap( | |||
crossAxisAlignment: WrapCrossAlignment.start, | |||
spacing: 20, | |||
runSpacing: 10, | |||
children: List.generate(widget?.style?.filter?.orderType?.length ?? 0, | |||
(index) { | |||
return GestureDetector( | |||
onTap: () { | |||
setState(() { | |||
_currentType = index; | |||
}); | |||
}, | |||
child: _createTag(widget.style.filter.orderType[index].name ?? '', | |||
_currentType == index), | |||
); | |||
}).toList(), | |||
), | |||
); | |||
} | |||
Widget _createTag(String title, bool isSelected) { | |||
return Container( | |||
padding: EdgeInsets.only(left: 12, right: 12, top: 6, bottom: 6), | |||
decoration: BoxDecoration( | |||
color: isSelected | |||
? HexColor.fromHex(widget?.style?.appActivateColor ?? '#ff4242') | |||
: Color(0xfff1f1f1), | |||
borderRadius: BorderRadius.circular(5)), | |||
child: Text( | |||
title ?? '', | |||
style: TextStyle( | |||
fontSize: 12, color: isSelected ? Colors.white : Color(0xff999999)), | |||
), | |||
); | |||
} | |||
Widget _createButtons() { | |||
return Container( | |||
height: 54, | |||
@@ -131,6 +214,18 @@ class _OrderFilterWidgetState extends State<OrderFilterWidget> { | |||
} | |||
Widget _creteTime() { | |||
var formatter = new DateFormat('yyyy-MM-dd'); | |||
String starTime = | |||
formatter.format(DateTime.fromMillisecondsSinceEpoch(_startTime)); | |||
if (_startTime == 0) { | |||
starTime = '不限'; | |||
} | |||
String endTime = formatter.format(DateTime(_endTime)); | |||
if (_endTime == 0) { | |||
endTime = '不限'; | |||
} | |||
return Container( | |||
color: Colors.white, | |||
padding: EdgeInsets.only(left: 12, right: 12, top: 4, bottom: 20), | |||
@@ -146,7 +241,7 @@ class _OrderFilterWidgetState extends State<OrderFilterWidget> { | |||
borderRadius: BorderRadius.circular(5)), | |||
child: Center( | |||
child: Text( | |||
'2020-06', | |||
starTime, | |||
style: TextStyle( | |||
fontSize: 12, | |||
color: Color(0xff999999), | |||
@@ -155,7 +250,7 @@ class _OrderFilterWidgetState extends State<OrderFilterWidget> { | |||
), | |||
), | |||
onTap: () { | |||
_selectDate(); | |||
_selectStartDate(); | |||
}, | |||
), | |||
Text( | |||
@@ -175,7 +270,7 @@ class _OrderFilterWidgetState extends State<OrderFilterWidget> { | |||
borderRadius: BorderRadius.circular(5)), | |||
child: Center( | |||
child: Text( | |||
'2020-06', | |||
endTime, | |||
style: TextStyle( | |||
fontSize: 12, | |||
color: Color(0xff999999), | |||
@@ -184,7 +279,7 @@ class _OrderFilterWidgetState extends State<OrderFilterWidget> { | |||
), | |||
), | |||
onTap: () { | |||
_selectDate(); | |||
_selectEndDate(); | |||
}, | |||
), | |||
], | |||
@@ -192,7 +287,7 @@ class _OrderFilterWidgetState extends State<OrderFilterWidget> { | |||
); | |||
} | |||
void _selectDate() async { | |||
void _selectStartDate() async { | |||
DateTime dateTime = await showModalBottomSheet( | |||
context: context, | |||
builder: (context) { | |||
@@ -203,8 +298,24 @@ class _OrderFilterWidgetState extends State<OrderFilterWidget> { | |||
isScrollControlled: false, | |||
backgroundColor: Colors.transparent); | |||
if (dateTime != null) { | |||
String timeStamp = | |||
(dateTime.millisecondsSinceEpoch / 1000).ceil().toString(); | |||
_startTime = dateTime.millisecondsSinceEpoch; | |||
} | |||
setState(() {}); | |||
} | |||
void _selectEndDate() async { | |||
DateTime dateTime = await showModalBottomSheet( | |||
context: context, | |||
builder: (context) { | |||
return ActionDateAlert( | |||
title: '选择结束日期', | |||
); | |||
}, | |||
isScrollControlled: false, | |||
backgroundColor: Colors.transparent); | |||
if (dateTime != null) { | |||
_endTime = dateTime.millisecondsSinceEpoch; | |||
} | |||
setState(() {}); | |||
} | |||
} |
@@ -1,11 +1,16 @@ | |||
import 'package:flutter/material.dart'; | |||
import 'package:flutter/services.dart'; | |||
import 'package:fluttertoast/fluttertoast.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_model.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_page_item_style_model.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_page_style_model.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
class OrderItemWidget extends StatelessWidget { | |||
final OrderModel model; | |||
final OrderPageStyleModel style; | |||
const OrderItemWidget(this.model, {Key key}) : super(key: key); | |||
const OrderItemWidget(this.model, this.style, {Key key}) : super(key: key); | |||
@override | |||
Widget build(BuildContext context) { | |||
@@ -19,19 +24,39 @@ class OrderItemWidget extends StatelessWidget { | |||
children: <Widget>[ | |||
_createHeader(), | |||
_createCenter(), | |||
_createTips(), | |||
], | |||
), | |||
); | |||
} | |||
Widget _createHeader() { | |||
List<OrderTypeModel> types = style.list.orderType; | |||
OrderTypeModel orderType = types.firstWhere((element) { | |||
return element.type == model.orderType.toString(); | |||
}); | |||
// orderType = types.last; | |||
String type = ''; | |||
type = orderType.name ?? ''; | |||
String replaceKey = orderType.replaceKey ?? ''; | |||
if (replaceKey.length > 4) { | |||
String key = replaceKey.substring(2, replaceKey.length - 2); | |||
Logger.debug(key); | |||
if (model.data.containsKey(key)) { | |||
type = orderType.name.replaceAll(replaceKey, model.data[key]); | |||
} | |||
} | |||
List<OrderStateModel> states = style.list.orderState; | |||
OrderStateModel state = | |||
states.firstWhere((element) => element.type == model.state.toString()); | |||
return Padding( | |||
padding: const EdgeInsets.only(bottom: 8), | |||
child: Row( | |||
children: <Widget>[ | |||
Expanded( | |||
child: Text( | |||
'粉丝订单:Mickey', | |||
type ?? '', | |||
maxLines: 1, | |||
style: TextStyle( | |||
fontSize: 12, | |||
@@ -41,7 +66,7 @@ class OrderItemWidget extends StatelessWidget { | |||
), | |||
), | |||
Text( | |||
'待结算', | |||
state.name ?? '', | |||
maxLines: 1, | |||
style: TextStyle( | |||
fontSize: 12, | |||
@@ -65,7 +90,7 @@ class OrderItemWidget extends StatelessWidget { | |||
child: ClipRRect( | |||
borderRadius: BorderRadius.circular(8), | |||
child: CachedNetworkImage( | |||
imageUrl: model.imgUrl ?? '', | |||
imageUrl: model.thumbnail ?? '', | |||
fit: BoxFit.cover, | |||
), | |||
), | |||
@@ -75,9 +100,42 @@ class OrderItemWidget extends StatelessWidget { | |||
crossAxisAlignment: CrossAxisAlignment.start, | |||
children: <Widget>[ | |||
_createTitle(), | |||
_creteText('订单编号:15487945211587'), | |||
_creteText('下单时间:2020-06-18 17:11:15'), | |||
_creteText('完成时间:2020-06-18 17:11:15'), | |||
Row( | |||
children: <Widget>[ | |||
_creteText( | |||
'${style?.list?.textOrderNo ?? ''}${model?.ordId ?? ''}'), | |||
GestureDetector( | |||
onTap: () { | |||
if (model?.ordId != null && model.ordId.length > 0) { | |||
Fluttertoast.showToast(msg: '复制成功'); | |||
Clipboard.setData(ClipboardData(text: model.ordId)); | |||
} | |||
}, | |||
child: Container( | |||
margin: EdgeInsets.only(left: 10), | |||
padding: EdgeInsets.only( | |||
left: 10, | |||
right: 10, | |||
), | |||
decoration: BoxDecoration( | |||
color: Color(0xfff5f5f5), | |||
borderRadius: BorderRadius.circular(2.5), | |||
border: Border.all( | |||
color: Color(0xffd6d6d6), | |||
width: 0.5, | |||
)), | |||
child: Text( | |||
style.list.textCopy, | |||
style: TextStyle(fontSize: 9, color: Color(0xff999999)), | |||
), | |||
), | |||
) | |||
], | |||
), | |||
_creteText( | |||
'${style?.list?.textOrderTime ?? ''}${model?.createAt ?? ''}'), | |||
_creteText( | |||
'${style?.list?.textFinishTime ?? ''}${model?.confirmAt ?? ''}'), | |||
], | |||
), | |||
) | |||
@@ -87,25 +145,36 @@ class OrderItemWidget extends StatelessWidget { | |||
Widget _createTitle() { | |||
List<InlineSpan> list = List(); | |||
list.add(WidgetSpan( | |||
child: Container( | |||
padding: EdgeInsets.only(left: 2, right: 2, top: 3, bottom: 3), | |||
margin: EdgeInsets.only(right: 4), | |||
child: Text( | |||
'淘宝', | |||
style: TextStyle( | |||
fontSize: 9, | |||
height: 1, | |||
color: Colors.white, | |||
String shop = ''; | |||
if (model?.provider != null && model.provider != '') { | |||
shop = style.filter.providerType | |||
.firstWhere((element) => element.type == model.provider) | |||
?.name ?? | |||
''; | |||
} | |||
if (shop != '') { | |||
list.add(WidgetSpan( | |||
child: Container( | |||
padding: EdgeInsets.only(left: 2, right: 2, top: 3, bottom: 3), | |||
margin: EdgeInsets.only(right: 4), | |||
child: Text( | |||
shop, | |||
style: TextStyle( | |||
fontSize: 9, | |||
height: 1, | |||
color: | |||
HexColor.fromHex(style.list.colorProviderFont ?? '#ffffff'), | |||
), | |||
), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex(style.list.colorProviderBg ?? '#ffffff'), | |||
borderRadius: BorderRadius.circular(2.5)), | |||
), | |||
decoration: BoxDecoration( | |||
color: Colors.redAccent, borderRadius: BorderRadius.circular(2.5)), | |||
), | |||
)); | |||
)); | |||
} | |||
list.add( | |||
TextSpan( | |||
text: model.title, | |||
text: model?.itemTitle ?? '', | |||
style: TextStyle( | |||
fontSize: 15, | |||
color: Color(0xff333333), | |||
@@ -120,14 +189,37 @@ class OrderItemWidget extends StatelessWidget { | |||
} | |||
Widget _creteText(String text) { | |||
return Padding( | |||
padding: EdgeInsets.only(top: 4), | |||
return text == null || text == '' | |||
? Container() | |||
: Padding( | |||
padding: EdgeInsets.only(top: 2, bottom: 2), | |||
child: Text( | |||
text, | |||
style: TextStyle( | |||
fontSize: 10, | |||
color: Color(0xff999999), | |||
), | |||
), | |||
); | |||
} | |||
Widget _createTips() { | |||
List<OrderStateModel> states = style.list.orderState; | |||
OrderStateModel state = | |||
states.firstWhere((element) => element.type == model.state.toString()); | |||
if (state == null || state.tips == null || state.tips == '') { | |||
return Container(); | |||
} | |||
return Container( | |||
margin: EdgeInsets.only(top: 8), | |||
padding: EdgeInsets.only(left: 8, right: 8, top: 2, bottom: 2), | |||
width: double.infinity, | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex(style.list.colorTipsBg ?? '#f5f5f5'), | |||
borderRadius: BorderRadius.circular(4)), | |||
child: Text( | |||
text, | |||
style: TextStyle( | |||
fontSize: 10, | |||
color: Color(0xff999999), | |||
), | |||
state?.tips ?? '', | |||
style: TextStyle(color: Color(0xff666666), fontSize: 10), | |||
), | |||
); | |||
} | |||
@@ -1,7 +1,14 @@ | |||
import 'package:flutter/cupertino.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_page_style_model.dart'; | |||
import 'package:zhiying_comm/util/extension/color.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
class OrderSearchWidget extends StatelessWidget { | |||
final OrderPageStyleModel model; | |||
const OrderSearchWidget(this.model, {Key key}) : super(key: key); | |||
@override | |||
Widget build(BuildContext context) { | |||
return Container( | |||
@@ -12,13 +19,25 @@ class OrderSearchWidget extends StatelessWidget { | |||
child: Container( | |||
padding: EdgeInsets.only(left: 12, right: 12), | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(16), color: Color(0xfff9f9f9)), | |||
child: Center( | |||
child: Text( | |||
'搜索商品标题/粉丝姓名/订单号', | |||
textAlign: TextAlign.center, | |||
style: TextStyle(color: Color(0xff999999), fontSize: 14), | |||
), | |||
borderRadius: BorderRadius.circular(16), | |||
color: HexColor.fromHex(model?.searchBarBgColor ?? '#f7f7f7')), | |||
child: Row( | |||
mainAxisAlignment: MainAxisAlignment.center, | |||
children: <Widget>[ | |||
Container( | |||
width: 16, | |||
height: 16, | |||
margin: EdgeInsets.only(right: 4), | |||
child: CachedNetworkImage( | |||
imageUrl: model?.searchBarLeftIcon ?? '', | |||
), | |||
), | |||
Text( | |||
model?.searchBarPlaceholder ?? '', | |||
textAlign: TextAlign.center, | |||
style: TextStyle(color: Color(0xff999999), fontSize: 14), | |||
), | |||
], | |||
), | |||
), | |||
); | |||
@@ -1,12 +1,17 @@ | |||
import 'package:flutter/material.dart'; | |||
import 'package:zhiying_base_widget/pages/orders_page/models/order_page_style_model.dart'; | |||
import 'package:zhiying_base_widget/widgets/search/widget/my_tab.dart'; | |||
import 'package:zhiying_comm/util/extension/color.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
class OrderTabbarWidget extends StatelessWidget { | |||
final OrderPageStyleModel model; | |||
final TabController controller; | |||
final List<String> titles; | |||
final VoidCallback onMoreClick; | |||
const OrderTabbarWidget( | |||
this.model, | |||
this.controller, | |||
this.titles, { | |||
Key key, | |||
@@ -27,8 +32,10 @@ class OrderTabbarWidget extends StatelessWidget { | |||
isScrollable: true, | |||
indicatorSize: TabBarIndicatorSize.label, | |||
// tabs: widgets, | |||
indicatorColor: Color(0xffff4242), | |||
labelColor: Color(0xffff4242), | |||
indicatorColor: | |||
HexColor.fromHex(model?.appActivateColor ?? '#ff4242'), | |||
labelColor: | |||
HexColor.fromHex(model?.appActivateColor ?? '#ff4242'), | |||
unselectedLabelColor: Color(0xff999999), | |||
tabs: titles.map((item) { | |||
return MyTab( | |||
@@ -39,12 +46,14 @@ class OrderTabbarWidget extends StatelessWidget { | |||
), | |||
), | |||
GestureDetector( | |||
behavior: HitTestBehavior.opaque, | |||
child: Container( | |||
width: 40, | |||
height: 40, | |||
child: Icon( | |||
Icons.filter_4, | |||
size: 14, | |||
padding: EdgeInsets.all(10), | |||
child: CachedNetworkImage( | |||
imageUrl: model?.filter?.icon ?? '', | |||
fit: BoxFit.contain, | |||
), | |||
), | |||
onTap: () { | |||
@@ -57,23 +66,3 @@ class OrderTabbarWidget extends StatelessWidget { | |||
)); | |||
} | |||
} | |||
class OrderTabbarItemWidget extends StatelessWidget { | |||
final String title; | |||
final bool isSelected; | |||
const OrderTabbarItemWidget({Key key, this.title, this.isSelected = false}) | |||
: super(key: key); | |||
@override | |||
Widget build(BuildContext context) { | |||
return Container( | |||
height: 26, | |||
child: Text( | |||
title, | |||
style: TextStyle( | |||
color: isSelected ? Color(0xFFFF4242) : Color(0xff999999)), | |||
), | |||
); | |||
} | |||
} |