@@ -16,6 +16,7 @@ import 'package:zhiying_comm/util/custom_sliver_persistent_header_delegate.dart' | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
import 'package:flutter_alibc/flutter_alibc.dart'; | |||
///钱包明细 | |||
class BilDetailPage extends StatefulWidget { | |||
final Map<String, dynamic> data; | |||
@@ -61,206 +62,45 @@ class _BilDetailPageContainerState extends State<BilDetailPageContainer> { | |||
@override | |||
void initState() { | |||
_bloc = BlocProvider.of<BilDetailPageBloc>(context); | |||
_bloc.loadData(widget.data[Constants.SkipIdentifierName]); | |||
showDate = DateFormat('yyyy-MM').format(DateTime.now()); | |||
super.initState(); | |||
} | |||
@override | |||
Widget build(BuildContext context) { | |||
return StreamBuilder( | |||
stream: _bloc.outData, | |||
builder: (context, sny) { | |||
if (sny.data == null) { | |||
return Container(); | |||
} | |||
var model = sny.data; | |||
return Scaffold( | |||
appBar: AppBar( | |||
centerTitle: true, | |||
title: Text("明细"), | |||
), | |||
body: Container( | |||
child: ListView( | |||
shrinkWrap: true, | |||
children: <Widget>[_buildType(), _buildBottomItem()], | |||
), | |||
), | |||
child: Column( | |||
children: _buildItem(model), | |||
)), | |||
); | |||
}, | |||
); | |||
} | |||
_buildType() { | |||
return Row( | |||
children: <Widget>[ | |||
SizedBox(width: 12.5), | |||
InkWell( | |||
onTap: () { | |||
///显示日期选择弹窗 | |||
_selectDate(); | |||
}, | |||
child: Padding( | |||
padding: const EdgeInsets.only(top: 8, bottom: 8), | |||
child: Text(showDate ?? ""), | |||
), | |||
), | |||
Icon(Icons.arrow_drop_down), | |||
Expanded( | |||
child: Container( | |||
height: 50, | |||
child: ListView.builder( | |||
scrollDirection: Axis.horizontal, | |||
shrinkWrap: true, | |||
itemCount: 3, | |||
itemBuilder: (context, index) { | |||
return InkWell(child: Container( | |||
margin: | |||
EdgeInsets.only(top: 10, left: 8, right: 8, bottom: 10), | |||
decoration: BoxDecoration( | |||
color: Colors.grey[200], | |||
borderRadius: BorderRadius.circular(50)), | |||
child: Padding( | |||
padding: const EdgeInsets.only(left: 16, right: 16), | |||
child: Center( | |||
child: Text( | |||
"推广", | |||
style: TextStyle(color: Colors.grey), | |||
)), | |||
), | |||
),onTap: () async { | |||
print("ok"); | |||
await FlutterAlibc.loginTaoBao(); | |||
},); | |||
}), | |||
)) | |||
], | |||
); | |||
} | |||
void _selectDate() async { | |||
showDialog(context: context, builder: (context) => SelectDateYMDialog()); | |||
} | |||
_buildBottomItem() { | |||
return ListView.builder( | |||
shrinkWrap: true, itemCount: 10, itemBuilder: _buildItem); | |||
} | |||
Widget _buildItem(BuildContext context, int index) { | |||
return Container( | |||
margin: EdgeInsets.only(left: 12.5, right: 12.5, bottom: 4, top: 4), | |||
padding: | |||
EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
child: Column( | |||
children: <Widget>[ | |||
Row( | |||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||
children: <Widget>[ | |||
Row( | |||
children: <Widget>[ | |||
Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: Colors.red[100], | |||
border: Border.all(color: Colors.red)), | |||
child: Padding( | |||
padding: const EdgeInsets.only( | |||
left: 4, right: 4, top: 2, bottom: 2), | |||
child: Center( | |||
child: Text( | |||
"自购", | |||
style: TextStyle(color: Colors.red, fontSize: 20.sp), | |||
), | |||
), | |||
), | |||
), | |||
Container( | |||
width: 443.w, | |||
margin: EdgeInsets.only(left: 15.w), | |||
child: Text( | |||
"Segway Ninebot mini Pro智能代的卅饭店发生的范德萨地方撒发生", | |||
maxLines: 1, | |||
overflow: TextOverflow.ellipsis, | |||
style: TextStyle(fontSize: 28.sp), | |||
)) | |||
], | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
"+", | |||
style: TextStyle(color: Colors.red), | |||
), | |||
Text( | |||
"¥8.00", | |||
style: TextStyle(color: Colors.red, fontSize: 30.sp), | |||
) | |||
], | |||
) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
"订单编号:", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
Text( | |||
"1233333333", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 28.w, | |||
), | |||
Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex("#FFF5F5F5"), | |||
border: Border.all(color: HexColor.fromHex("#FFD6D6D6"))), | |||
child: Padding( | |||
padding: | |||
EdgeInsets.only(left: 16, right: 16, top: 1, bottom: 1), | |||
child: Text( | |||
"复制", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
), | |||
) | |||
], | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
"订单编号:", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
Text( | |||
"1233333333", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
], | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
"订单编号:", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
Text( | |||
"1233333333", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), fontSize: 22.sp), | |||
), | |||
], | |||
) | |||
], | |||
), | |||
); | |||
///构建子模块 | |||
_buildItem(List<Map<String, dynamic>> model) { | |||
List<Widget> list = List(); | |||
for (var item in model) { | |||
WidgetModel widgetModel = | |||
WidgetModel.fromJson(Map<String, dynamic>.from(item)); | |||
if (widgetModel.modName == 'my_wallet_detail') { | |||
list.add(Expanded( | |||
child: WidgetFactory.create(widgetModel.modName, | |||
isSliver: false, model: item)[0])); | |||
continue; | |||
} | |||
list.addAll(WidgetFactory.create(widgetModel.modName, | |||
isSliver: false, model: item)); | |||
} | |||
return list; | |||
} | |||
} |
@@ -1,5 +1,6 @@ | |||
import 'dart:async'; | |||
import 'package:zhiying_base_widget/widgets/wallet_bil_detail/model/wallet_style_model.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
@@ -11,7 +12,7 @@ class BilDetailPageBloc extends BlocBase { | |||
Stream<List<Map<String, dynamic>>> get outData => _tabController.stream; | |||
BilDetailStyleModel bilDetailStyleModel; | |||
@override | |||
void dispose() { | |||
@@ -21,7 +22,7 @@ class BilDetailPageBloc extends BlocBase { | |||
loadData(String skipIdentifier) { | |||
NetUtil.request('/api/v1/mod/${skipIdentifier}', method: NetMethod.GET, | |||
NetUtil.request('/api/v1/mod/pub.flutter.my_wallet_detail', method: NetMethod.GET, | |||
onCache: (data) { | |||
_loadData(data); | |||
}, onSuccess: (data) { | |||
@@ -72,6 +72,7 @@ class _HomePageState extends State<HomePage> { | |||
String selectedIcon = ImageUtil.getUrl(model.chooseIcon ?? model.icon); | |||
String textColor = model.fontColor; | |||
String chooseColor = model.chooseColor ?? textColor; | |||
items.add(BottomNavigationBarItem( | |||
icon: Container( | |||
width: 24, | |||
@@ -1,6 +1,6 @@ | |||
import 'package:sharesdk_plugin/sharesdk_interface.dart'; | |||
import 'package:sharesdk_plugin/sharesdk_register.dart'; | |||
import 'package:zhiying_base_widget/pages/bil_detail_page/bil_detail_page.dart'; | |||
import 'package:zhiying_base_widget/pages/feedback_page/feedback_page.dart'; | |||
import 'package:zhiying_base_widget/pages/goods_details_page/goods_details_page.dart'; | |||
import 'package:zhiying_base_widget/pages/home_page/home_page.dart'; | |||
@@ -49,6 +49,7 @@ import 'package:zhiying_base_widget/widgets/wallet/wallet_bil/wallet_bil.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet/wallet_data/wallet_data.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet/wallet_detail/wallet_detail.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet/wallet_income/wallet_income.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet_bil_detail/wallet_bil_detail.dart'; | |||
import 'package:zhiying_comm/util/defalut_widget_creater.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
@@ -155,12 +156,18 @@ class BaseWidgetRegister { | |||
/// 消息中心 | |||
PageFactory.regist( | |||
'pub.flutter.message_center', (model) => MessageNoticePage(model)); | |||
PageFactory.regist( | |||
'pub.flutter.message_notice', (model) => MessageNoticePage(model)); | |||
/// TODO 首页的消息中心标识和我的页面不一致,需要改 | |||
PageFactory.regist( | |||
'pub.flutter.message', (model) => MessageNoticePage(model)); | |||
/// 我的收藏 | |||
PageFactory.regist('pub.flutter.my_fav', (model) => FavoritesPage()); | |||
///钱包明细 | |||
PageFactory.regist('pub.flutter.my_bil', (model) => BilDetailPage(model)); | |||
} | |||
// 注册控件 | |||
@@ -327,6 +334,11 @@ class BaseWidgetRegister { | |||
'wallet_income', DefaultWidgetCreater((model) => WalletIncome())); | |||
//======================= 账单明细 | |||
WidgetFactory.regist( | |||
'my_wallet_detail', | |||
DefaultWidgetCreater((model) => WalletBilDetail( | |||
data: model, | |||
))); | |||
//======================== 热榜 | |||
WidgetFactory.regist('hot_rank_appbar', | |||
@@ -7,7 +7,6 @@ import 'package:provider/provider.dart'; | |||
import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_bg_notifier.dart'; | |||
import 'package:zhiying_base_widget/pages/message_notice_page/message_notice_page.dart'; | |||
import 'package:zhiying_base_widget/pages/team_details_page/team_details_page.dart'; | |||
import 'package:zhiying_base_widget/pages/vip_center_page/vip_center_page.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
import 'bloc/bloc.dart'; | |||
@@ -3,6 +3,7 @@ import 'dart:convert'; | |||
import 'package:cached_network_image/cached_network_image.dart'; | |||
import 'package:flutter/cupertino.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:zhiying_base_widget/pages/bil_detail_page/bil_detail_page.dart'; | |||
import 'package:zhiying_base_widget/pages/wallet_page/wallet_detail_page.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet/wallet_bil/model/wallet_bli_model.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet/wallet_income/wallet_income_sk.dart'; | |||
@@ -24,12 +25,8 @@ class WalletBil extends StatelessWidget { | |||
? WalletIncomeSkeleton() | |||
: GestureDetector( | |||
onTap: () { | |||
Navigator.push( | |||
context, | |||
CupertinoPageRoute( | |||
builder: (context) => WalletDetailPage(), | |||
), | |||
); | |||
RouterUtil.route( | |||
SkipModel.fromJson(json.decode(data['data'])), data, context); | |||
}, | |||
child: Container( | |||
decoration: BoxDecoration( | |||
@@ -0,0 +1,287 @@ | |||
class BilDetailStyleModel { | |||
String appBarName; | |||
String appBarNameColor; | |||
String appBarBgImg; | |||
String appBarBgColor; | |||
String tabLineColor; | |||
String tabNoSeletedColor; | |||
String tabSeletedColor; | |||
List<TabList> tabList; | |||
String timeSelectColor; | |||
String btnNoSelectedColor; | |||
String btnSelectedColor; | |||
List<InputTabViewBtns> inputTabViewBtns; | |||
List<InputTabViewBtns> outTabViewBtns; | |||
InputItemStyle inputItemStyle; | |||
OutputItemStyle outputItemStyle; | |||
BilDetailStyleModel( | |||
{this.appBarName, | |||
this.appBarNameColor, | |||
this.appBarBgImg, | |||
this.appBarBgColor, | |||
this.tabLineColor, | |||
this.tabNoSeletedColor, | |||
this.tabSeletedColor, | |||
this.tabList, | |||
this.timeSelectColor, | |||
this.btnNoSelectedColor, | |||
this.btnSelectedColor, | |||
this.inputTabViewBtns, | |||
this.outTabViewBtns, | |||
this.inputItemStyle, | |||
this.outputItemStyle}); | |||
BilDetailStyleModel.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']; | |||
tabLineColor = json['tab_line_color']; | |||
tabNoSeletedColor = json['tab_no_seleted_color']; | |||
tabSeletedColor = json['tab_seleted_color']; | |||
if (json['tab_list'] != null) { | |||
tabList = new List<TabList>(); | |||
json['tab_list'].forEach((v) { | |||
tabList.add(new TabList.fromJson(v)); | |||
}); | |||
} | |||
timeSelectColor = json['time_select_color']; | |||
btnNoSelectedColor = json['btn_no_selected_color']; | |||
btnSelectedColor = json['btn_selected_color']; | |||
if (json['input_tab_view_btns'] != null) { | |||
inputTabViewBtns = new List<InputTabViewBtns>(); | |||
json['input_tab_view_btns'].forEach((v) { | |||
inputTabViewBtns.add(new InputTabViewBtns.fromJson(v)); | |||
}); | |||
} | |||
if (json['out_tab_view_btns'] != null) { | |||
outTabViewBtns = new List<InputTabViewBtns>(); | |||
json['out_tab_view_btns'].forEach((v) { | |||
outTabViewBtns.add(new InputTabViewBtns.fromJson(v)); | |||
}); | |||
} | |||
inputItemStyle = json['input_item_style'] != null | |||
? new InputItemStyle.fromJson(json['input_item_style']) | |||
: null; | |||
outputItemStyle = json['output_item_style'] != null | |||
? new OutputItemStyle.fromJson(json['output_item_style']) | |||
: 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['tab_line_color'] = this.tabLineColor; | |||
data['tab_no_seleted_color'] = this.tabNoSeletedColor; | |||
data['tab_seleted_color'] = this.tabSeletedColor; | |||
if (this.tabList != null) { | |||
data['tab_list'] = this.tabList.map((v) => v.toJson()).toList(); | |||
} | |||
data['time_select_color'] = this.timeSelectColor; | |||
data['btn_no_selected_color'] = this.btnNoSelectedColor; | |||
data['btn_selected_color'] = this.btnSelectedColor; | |||
if (this.inputTabViewBtns != null) { | |||
data['input_tab_view_btns'] = | |||
this.inputTabViewBtns.map((v) => v.toJson()).toList(); | |||
} | |||
if (this.outTabViewBtns != null) { | |||
data['out_tab_view_btns'] = | |||
this.outTabViewBtns.map((v) => v.toJson()).toList(); | |||
} | |||
if (this.inputItemStyle != null) { | |||
data['input_item_style'] = this.inputItemStyle.toJson(); | |||
} | |||
if (this.outputItemStyle != null) { | |||
data['output_item_style'] = this.outputItemStyle.toJson(); | |||
} | |||
return data; | |||
} | |||
} | |||
class TabList { | |||
String type; | |||
String name; | |||
TabList({this.type, this.name}); | |||
TabList.fromJson(Map<String, dynamic> json) { | |||
type = json['type']; | |||
name = json['name']; | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['type'] = this.type; | |||
data['name'] = this.name; | |||
return data; | |||
} | |||
} | |||
class InputItemStyle { | |||
String typeNameColor; | |||
String titleColor; | |||
String amountColor; | |||
String contentColor; | |||
String copyBtnText; | |||
String copyBtnTextColor; | |||
String copyBtnBgColor; | |||
String orderIdText; | |||
String orderTypeText; | |||
String amountText; | |||
String timeText; | |||
String settleTimeText; | |||
List<String> keys; | |||
InputItemStyle( | |||
{this.typeNameColor, | |||
this.titleColor, | |||
this.amountColor, | |||
this.contentColor, | |||
this.copyBtnText, | |||
this.copyBtnTextColor, | |||
this.copyBtnBgColor, | |||
this.orderIdText, | |||
this.orderTypeText, | |||
this.amountText, | |||
this.timeText, | |||
this.settleTimeText, | |||
this.keys}); | |||
InputItemStyle.fromJson(Map<String, dynamic> json) { | |||
typeNameColor = json['type_name_color']; | |||
titleColor = json['title_color']; | |||
amountColor = json['amount_color']; | |||
contentColor = json['content_color']; | |||
copyBtnText = json['copy_btn_text']; | |||
copyBtnTextColor = json['copy_btn_text_color']; | |||
copyBtnBgColor = json['copy_btn_bg_color']; | |||
orderIdText = json['order_id_text']; | |||
orderTypeText = json['order_type_text']; | |||
amountText = json['amount_text']; | |||
timeText = json['time_text']; | |||
settleTimeText = json['settle_time_text']; | |||
keys = json['keys'].cast<String>(); | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['type_name_color'] = this.typeNameColor; | |||
data['title_color'] = this.titleColor; | |||
data['amount_color'] = this.amountColor; | |||
data['content_color'] = this.contentColor; | |||
data['copy_btn_text'] = this.copyBtnText; | |||
data['copy_btn_text_color'] = this.copyBtnTextColor; | |||
data['copy_btn_bg_color'] = this.copyBtnBgColor; | |||
data['order_id_text'] = this.orderIdText; | |||
data['order_type_text'] = this.orderTypeText; | |||
data['amount_text'] = this.amountText; | |||
data['time_text'] = this.timeText; | |||
data['settle_time_text'] = this.settleTimeText; | |||
data['keys'] = this.keys; | |||
return data; | |||
} | |||
} | |||
class OutputItemStyle { | |||
String typeNameColor; | |||
String titleColor; | |||
String amountColor; | |||
String contentColor; | |||
String copyBtnTextColor; | |||
String copyBtnText; | |||
String copyBtnBgColor; | |||
String orderIdText; | |||
String withdrawAccountText; | |||
String withdrawAmountText; | |||
String withdrawTimeText; | |||
String withdrawOrderStatusText; | |||
String consumeOrderTypeText; | |||
String consumeAmountText; | |||
String consumeTimeText; | |||
List<String> withdrawKeys; | |||
List<String> consumeKeys; | |||
OutputItemStyle( | |||
{this.typeNameColor, | |||
this.titleColor, | |||
this.amountColor, | |||
this.contentColor, | |||
this.copyBtnTextColor, | |||
this.copyBtnBgColor, | |||
this.orderIdText, | |||
this.withdrawAccountText, | |||
this.withdrawAmountText, | |||
this.withdrawTimeText, | |||
this.withdrawOrderStatusText, | |||
this.consumeOrderTypeText, | |||
this.consumeAmountText, | |||
this.consumeTimeText, | |||
this.withdrawKeys, | |||
this.consumeKeys}); | |||
OutputItemStyle.fromJson(Map<String, dynamic> json) { | |||
typeNameColor = json['type_name_color']; | |||
titleColor = json['title_color']; | |||
amountColor = json['amount_color']; | |||
contentColor = json['content_color']; | |||
copyBtnTextColor = json['copy_btn_text_color']; | |||
copyBtnText=json['copy_btn_text']; | |||
copyBtnBgColor = json['copy_btn_bg_color']; | |||
orderIdText = json['order_id_text']; | |||
withdrawAccountText = json['withdraw_account_text']; | |||
withdrawAmountText = json['withdraw_amount_text']; | |||
withdrawTimeText = json['withdraw_time_text']; | |||
withdrawOrderStatusText = json['withdraw_order_status_text']; | |||
consumeOrderTypeText = json['consume_order_type_text']; | |||
consumeAmountText = json['consume_amount_text']; | |||
consumeTimeText = json['consume_time_text']; | |||
withdrawKeys = json['withdraw_keys'].cast<String>(); | |||
consumeKeys = json['consume_keys'].cast<String>(); | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['type_name_color'] = this.typeNameColor; | |||
data['title_color'] = this.titleColor; | |||
data['amount_color'] = this.amountColor; | |||
data['content_color'] = this.contentColor; | |||
data['copy_btn_text_color'] = this.copyBtnTextColor; | |||
data['copy_btn_bg_color'] = this.copyBtnBgColor; | |||
data['order_id_text'] = this.orderIdText; | |||
data['withdraw_account_text'] = this.withdrawAccountText; | |||
data['withdraw_amount_text'] = this.withdrawAmountText; | |||
data['withdraw_time_text'] = this.withdrawTimeText; | |||
data['withdraw_order_status_text'] = this.withdrawOrderStatusText; | |||
data['consume_order_type_text'] = this.consumeOrderTypeText; | |||
data['consume_amount_text'] = this.consumeAmountText; | |||
data['consume_time_text'] = this.consumeTimeText; | |||
data['withdraw_keys'] = this.withdrawKeys; | |||
data['consume_keys'] = this.consumeKeys; | |||
return data; | |||
} | |||
} | |||
class InputTabViewBtns { | |||
String type; | |||
String name; | |||
InputTabViewBtns( | |||
{this.type,this.name}); | |||
InputTabViewBtns.fromJson(Map<String, dynamic> json) { | |||
type=json['type']; | |||
name=json['name']; | |||
} | |||
Map<String, dynamic> toJson() { | |||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||
data['name']=name; | |||
data['type']=type; | |||
return data; | |||
} | |||
} |
@@ -0,0 +1,918 @@ | |||
import 'dart:convert'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:flutter/services.dart'; | |||
import 'package:intl/intl.dart'; | |||
import 'package:pull_to_refresh/pull_to_refresh.dart'; | |||
import 'package:zhiying_base_widget/dialog/select_date_ym_dialog/select_date_ym_dialog.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet/wallet_detail/wallet_detail_bloc.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet_bil_detail/wallet_bil_detail_widget_bloc.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
import 'package:zhiying_comm/util/extension/color.dart'; | |||
import 'package:flutter_screenutil/flutter_screenutil.dart'; | |||
import 'model/wallet_style_model.dart'; | |||
import 'package:fluttertoast/fluttertoast.dart'; | |||
////钱包明细页面 | |||
class WalletBilDetail extends StatefulWidget { | |||
final Map<String, dynamic> data; | |||
const WalletBilDetail({Key key, this.data}) : super(key: key); | |||
@override | |||
_WalletBilDetailState createState() => _WalletBilDetailState(); | |||
} | |||
class _WalletBilDetailState extends State<WalletBilDetail> | |||
with TickerProviderStateMixin, AutomaticKeepAliveClientMixin { | |||
WalletBilDetailWidgetBloc _bloc; | |||
TabController _tabController; | |||
@override | |||
void initState() { | |||
_bloc = WalletBilDetailWidgetBloc(); | |||
_bloc.initStyleData(json.decode(widget.data['data'])); | |||
_tabController = | |||
TabController(length: _bloc.styleData.tabList.length, vsync: this); | |||
_bloc.loadInputData(_bloc.inPutCurrentPage, _bloc.inputShowDate); | |||
_bloc.loadOutputData(_bloc.outPutCurrentPage, _bloc.outputShowDate); | |||
super.initState(); | |||
} | |||
@override | |||
Widget build(BuildContext context) { | |||
return BlocProvider( | |||
bloc: _bloc, | |||
child: Container( | |||
child: Column( | |||
children: <Widget>[ | |||
AppBar( | |||
brightness: Brightness.light, | |||
backgroundColor: | |||
HexColor.fromHex(_bloc.styleData.appBarBgColor), | |||
centerTitle: true, | |||
leading: IconButton( | |||
icon: Icon( | |||
Icons.arrow_back_ios, | |||
size: 18, | |||
color: HexColor.fromHex(_bloc.styleData.appBarNameColor), | |||
), | |||
onPressed: () { | |||
Navigator.pop(context); | |||
}), | |||
title: Text( | |||
_bloc.styleData.appBarName ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex(_bloc.styleData.appBarNameColor)), | |||
), | |||
), | |||
Container( | |||
color: Colors.white, | |||
child: TabBar( | |||
controller: _tabController, | |||
tabs: _buildTabBarItem(), | |||
indicatorWeight: 3, | |||
labelStyle: TextStyle(fontSize: 30.sp), | |||
labelColor: HexColor.fromHex(_bloc.styleData.tabSeletedColor), | |||
unselectedLabelColor: | |||
HexColor.fromHex(_bloc.styleData.tabNoSeletedColor), | |||
indicatorColor: | |||
HexColor.fromHex(_bloc.styleData.tabLineColor), | |||
indicatorSize: TabBarIndicatorSize.label, | |||
), | |||
), | |||
Expanded( | |||
child: TabBarView( | |||
controller: _tabController, | |||
children: _buildTabViewPage())) | |||
], | |||
), | |||
)); | |||
} | |||
///创建tabbar按键 | |||
_buildTabBarItem() { | |||
List<Widget> listWidget = List(); | |||
for (var item in _bloc.styleData.tabList) { | |||
listWidget.add(Tab( | |||
text: item.name ?? "", | |||
)); | |||
} | |||
return listWidget; | |||
} | |||
_buildType(List<InputTabViewBtns> tabViewBtns, TabList tabList) { | |||
var selectType; | |||
if (tabList.type == 'input') { | |||
selectType = _bloc.inputSelectType; | |||
} else { | |||
selectType = _bloc.outputSelectType; | |||
; | |||
} | |||
return Row( | |||
children: <Widget>[ | |||
SizedBox(width: 12.5), | |||
InkWell( | |||
onTap: () { | |||
///显示日期选择弹窗 | |||
_selectDate(tabList); | |||
}, | |||
child: Padding( | |||
padding: const EdgeInsets.only(top: 8, bottom: 8), | |||
child: Text( | |||
tabList.type == "input" | |||
? _bloc.inputShowDate | |||
: _bloc.outputShowDate, | |||
style: TextStyle( | |||
fontSize: 28.sp, | |||
color: | |||
HexColor.fromHex(_bloc.styleData.timeSelectColor)))), | |||
), | |||
Icon( | |||
Icons.arrow_drop_down, | |||
color: HexColor.fromHex(_bloc.styleData.timeSelectColor), | |||
), | |||
Expanded( | |||
child: Container( | |||
height: 50, | |||
child: ListView.builder( | |||
scrollDirection: Axis.horizontal, | |||
shrinkWrap: true, | |||
itemCount: tabViewBtns.length, | |||
itemBuilder: (context, index) { | |||
return InkWell( | |||
onTap: () async { | |||
if (tabList.type == 'input') { | |||
_bloc.inputSelectType = tabViewBtns[index].type; | |||
_bloc.inPutCurrentPage=1; | |||
_bloc.loadInputData( | |||
_bloc.inPutCurrentPage, _bloc.inputShowDate, | |||
type: _bloc.inputSelectType); | |||
} else { | |||
_bloc.outputSelectType = tabViewBtns[index].type; | |||
_bloc.outPutCurrentPage=1; | |||
_bloc.loadOutputData( | |||
_bloc.outPutCurrentPage, _bloc.outputShowDate, | |||
type: _bloc.outputSelectType); | |||
} | |||
_bloc.refresh(); | |||
}, | |||
child: Container( | |||
margin: EdgeInsets.only( | |||
top: 10, left: 8, right: 8, bottom: 10), | |||
decoration: BoxDecoration( | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
selectType == tabViewBtns[index].type | |||
? _bloc.styleData.btnSelectedColor | |||
: _bloc.styleData.btnNoSelectedColor), | |||
), | |||
borderRadius: BorderRadius.circular(50)), | |||
child: Padding( | |||
padding: EdgeInsets.only(left: 16, right: 16), | |||
child: Center( | |||
child: Text( | |||
tabViewBtns[index].name ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
selectType == tabViewBtns[index].type | |||
? _bloc.styleData.btnSelectedColor | |||
: _bloc.styleData.btnNoSelectedColor)), | |||
)), | |||
), | |||
)); | |||
}), | |||
)) | |||
], | |||
); | |||
} | |||
_selectDate(TabList tabList) async { | |||
var result = await showDialog( | |||
context: context, builder: (context) => SelectDateYMDialog()); | |||
if (result != null) { | |||
var dataTime = DateFormat('yyyy-MM').format( | |||
DateTime(int.parse(result['year']), int.parse(result['month']))); | |||
if (tabList.type == "input") { | |||
_bloc.inputShowDate = dataTime; | |||
_bloc.loadInputData(_bloc.inPutCurrentPage, _bloc.inputShowDate); | |||
} else { | |||
_bloc.outputShowDate = dataTime; | |||
_bloc.loadOutputData(_bloc.outPutCurrentPage, _bloc.outputShowDate); | |||
} | |||
_bloc.refresh(); | |||
} | |||
} | |||
_buildBottomItem(TabList tabList) { | |||
return ListView.builder( | |||
shrinkWrap: true, | |||
itemCount: tabList.type == 'input' | |||
? _bloc.inputDataVM.length | |||
: _bloc.outputDataVM.length, | |||
itemBuilder: (context, index) { | |||
return _buildItem(context, index, tabList); | |||
}); | |||
} | |||
Widget _buildItem(BuildContext context, int index, TabList tabList) { | |||
if (tabList.type == 'input') { | |||
InputItemStyle inputItemStyle = _bloc.styleData.inputItemStyle; | |||
var modelItem = _bloc.inputDataVM[index]; | |||
return Container( | |||
margin: EdgeInsets.only(left: 12.5, right: 12.5, bottom: 4, top: 4), | |||
padding: | |||
EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex("#FFFFFF"), | |||
borderRadius: BorderRadius.circular(8)), | |||
child: Column( | |||
children: <Widget>[ | |||
Row( | |||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||
children: <Widget>[ | |||
Row( | |||
children: <Widget>[ | |||
Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex("#FFFFF3F3"), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
inputItemStyle.typeNameColor))), | |||
child: Padding( | |||
padding: const EdgeInsets.only( | |||
left: 4, right: 4, top: 2, bottom: 2), | |||
child: Center( | |||
child: Text( | |||
modelItem['type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
inputItemStyle.typeNameColor), | |||
fontSize: 20.sp), | |||
), | |||
), | |||
), | |||
), | |||
Container( | |||
width: 353.w, | |||
margin: EdgeInsets.only(left: 15.w), | |||
child: Text( | |||
modelItem['title'] ?? "", | |||
maxLines: 1, | |||
overflow: TextOverflow.ellipsis, | |||
style: TextStyle(fontSize: 28.sp), | |||
)) | |||
], | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
"+ ", | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.amountColor)), | |||
), | |||
Text( | |||
"¥ " + modelItem['amount'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.amountColor), | |||
fontSize: 30.sp), | |||
) | |||
], | |||
) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
///订单编号 | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.orderIdText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_id'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 28.w, | |||
), | |||
GestureDetector( | |||
onTap: () { | |||
Clipboard.setData( | |||
ClipboardData(text: modelItem['order_id'])); | |||
Fluttertoast.showToast(msg: "已复制"); | |||
}, | |||
child: Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex(inputItemStyle.copyBtnBgColor), | |||
border: Border.all( | |||
color: | |||
HexColor.fromHex(inputItemStyle.contentColor))), | |||
child: Padding( | |||
padding: EdgeInsets.only( | |||
left: 16, right: 16, top: 1, bottom: 1), | |||
child: Text( | |||
inputItemStyle.copyBtnText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
), | |||
), | |||
) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.orderTypeText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.amountText + " ¥" + modelItem['amount'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.timeText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['time'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.settleTimeText + | |||
" " + | |||
modelItem['settle_time'] ?? | |||
"", | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
], | |||
), | |||
], | |||
), | |||
); | |||
} else if (tabList.type == 'output') { | |||
OutputItemStyle outputItemStyle = _bloc.styleData.outputItemStyle; | |||
var modelItem = _bloc.outputDataVM[index]; | |||
if (modelItem['type'] == '消费') { | |||
///消费返回的Item | |||
return Container( | |||
margin: EdgeInsets.only(left: 12.5, right: 12.5, bottom: 4, top: 4), | |||
padding: | |||
EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex("#FFFFFF"), | |||
borderRadius: BorderRadius.circular(8)), | |||
child: Column( | |||
children: <Widget>[ | |||
Row( | |||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||
children: <Widget>[ | |||
Row( | |||
children: <Widget>[ | |||
Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex("#FFFFF3F3"), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
outputItemStyle.typeNameColor))), | |||
child: Padding( | |||
padding: const EdgeInsets.only( | |||
left: 4, right: 4, top: 2, bottom: 2), | |||
child: Center( | |||
child: Text( | |||
modelItem['type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
outputItemStyle.typeNameColor), | |||
fontSize: 20.sp), | |||
), | |||
), | |||
), | |||
), | |||
Container( | |||
width: 353.w, | |||
margin: EdgeInsets.only(left: 15.w), | |||
child: Text( | |||
modelItem['title'] ?? "", | |||
maxLines: 1, | |||
overflow: TextOverflow.ellipsis, | |||
style: TextStyle(fontSize: 28.sp), | |||
)) | |||
], | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
"- ", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.amountColor)), | |||
), | |||
Text( | |||
"¥ " + modelItem['amount'], | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.amountColor), | |||
fontSize: 30.sp), | |||
) | |||
], | |||
) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
///订单编号 | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.orderIdText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_id'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 28.w, | |||
), | |||
GestureDetector( | |||
onTap: () { | |||
Clipboard.setData( | |||
ClipboardData(text: modelItem['order_id'])); | |||
Fluttertoast.showToast(msg: "已复制"); | |||
}, | |||
child: Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex(outputItemStyle.copyBtnBgColor), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
outputItemStyle.contentColor))), | |||
child: Padding( | |||
padding: EdgeInsets.only( | |||
left: 16, right: 16, top: 1, bottom: 1), | |||
child: Text( | |||
outputItemStyle.copyBtnText ?? "", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
), | |||
), | |||
) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.consumeOrderTypeText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.consumeAmountText + | |||
" ¥" + | |||
modelItem['amount'], | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.consumeTimeText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['time'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
// Expanded( | |||
// child: Row( | |||
// children: <Widget>[ | |||
// Text( | |||
// inputItemStyle.consumeTimeText + | |||
// " " + | |||
// modelItem['settle_time'] ?? | |||
// "", | |||
// style: TextStyle( | |||
// color: HexColor.fromHex(inputItemStyle.contentColor), | |||
// fontSize: 22.sp), | |||
// ), | |||
// ], | |||
// )) | |||
], | |||
), | |||
], | |||
), | |||
); | |||
} else if (modelItem['type'] == '提现') { | |||
return Container( | |||
margin: EdgeInsets.only(left: 12.5, right: 12.5, bottom: 4, top: 4), | |||
padding: | |||
EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex("#FFFFFF"), | |||
borderRadius: BorderRadius.circular(8)), | |||
child: Column( | |||
children: <Widget>[ | |||
Row( | |||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||
children: <Widget>[ | |||
Row( | |||
children: <Widget>[ | |||
Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex("#FFFFF3F3"), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
outputItemStyle.typeNameColor))), | |||
child: Padding( | |||
padding: const EdgeInsets.only( | |||
left: 4, right: 4, top: 2, bottom: 2), | |||
child: Center( | |||
child: Text( | |||
modelItem['type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
outputItemStyle.typeNameColor), | |||
fontSize: 20.sp), | |||
), | |||
), | |||
), | |||
), | |||
Container( | |||
width: 353.w, | |||
margin: EdgeInsets.only(left: 15.w), | |||
child: Text( | |||
modelItem['title'] ?? "", | |||
maxLines: 1, | |||
overflow: TextOverflow.ellipsis, | |||
style: TextStyle(fontSize: 28.sp), | |||
)) | |||
], | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
"- ", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.amountColor)), | |||
), | |||
Text( | |||
"¥ " + modelItem['amount'], | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.amountColor), | |||
fontSize: 30.sp), | |||
) | |||
], | |||
) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
///订单编号 | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.orderIdText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_id'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 28.w, | |||
), | |||
GestureDetector( | |||
onTap: () { | |||
Clipboard.setData( | |||
ClipboardData(text: modelItem['order_id'])); | |||
Fluttertoast.showToast(msg: "已复制"); | |||
}, | |||
child: Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex(outputItemStyle.copyBtnBgColor), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
outputItemStyle.contentColor))), | |||
child: Padding( | |||
padding: EdgeInsets.only( | |||
left: 16, right: 16, top: 1, bottom: 1), | |||
child: Text( | |||
outputItemStyle.copyBtnText ?? "", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
), | |||
), | |||
) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.withdrawAccountText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['account'] ?? "", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.withdrawAmountText + | |||
" ¥" + | |||
modelItem['amount'], | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.withdrawTimeText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['time'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
outputItemStyle.withdrawOrderStatusText + | |||
" " + | |||
modelItem['order_status'] ?? | |||
"", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(outputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
], | |||
), | |||
], | |||
), | |||
); | |||
} | |||
} | |||
} | |||
_buildTabViewPage() { | |||
List<Widget> listWidget = List(); | |||
for (var item in _bloc.styleData.tabList) { | |||
List<InputTabViewBtns> tabViewBtns; | |||
if (item.type == 'input') { | |||
tabViewBtns = _bloc.styleData.inputTabViewBtns; | |||
listWidget.add(StreamBuilder( | |||
stream: _bloc.inputOutData, | |||
builder: (context, asny) { | |||
// dataVM = asny.data; | |||
return Container( | |||
child: Column( | |||
children: <Widget>[ | |||
_buildType(tabViewBtns, item), | |||
Expanded( | |||
child: SmartRefresher( | |||
controller: _bloc.inputRefreshController, | |||
enablePullDown: true, | |||
enablePullUp: true, | |||
onLoading: () { | |||
_bloc.inputLoad(); | |||
}, | |||
onRefresh: () { | |||
_bloc.inputRefresh(); | |||
}, | |||
child: _bloc.inputDataVM == null | |||
? Container() | |||
: _buildBottomItem(item)), | |||
) | |||
], | |||
), | |||
); | |||
})); | |||
} else { | |||
tabViewBtns = _bloc.styleData.outTabViewBtns; | |||
listWidget.add(StreamBuilder( | |||
stream: _bloc.outputOutData, | |||
builder: (context, asny) { | |||
// dataVM = asny.data; | |||
return Container( | |||
child: Column( | |||
children: <Widget>[ | |||
_buildType(tabViewBtns, item), | |||
Expanded( | |||
child: SmartRefresher( | |||
controller: _bloc.outputRefreshController, | |||
enablePullDown: true, | |||
enablePullUp: true, | |||
onLoading: () { | |||
_bloc.outputLoad(); | |||
}, | |||
onRefresh: () { | |||
_bloc.outputRefresh(); | |||
}, | |||
child: _bloc.outputDataVM == null | |||
? Container() | |||
: _buildBottomItem(item)), | |||
) | |||
], | |||
), | |||
); | |||
})); | |||
} | |||
} | |||
return listWidget; | |||
} | |||
@override | |||
// TODO: implement wantKeepAlive | |||
bool get wantKeepAlive => true; | |||
} |
@@ -0,0 +1,163 @@ | |||
import 'dart:async'; | |||
import 'package:intl/intl.dart'; | |||
import 'package:pull_to_refresh/pull_to_refresh.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
import 'model/wallet_style_model.dart'; | |||
class WalletBilDetailWidgetBloc extends BlocBase { | |||
StreamController<List<Map<String, dynamic>>> inputDataController = | |||
StreamController.broadcast(); | |||
Stream get inputOutData => inputDataController.stream; | |||
StreamController<List<Map<String, dynamic>>> outputDataController = | |||
StreamController.broadcast(); | |||
Stream get outputOutData => outputDataController.stream; | |||
List<Map<String, dynamic>> inputDataVM; | |||
List<Map<String, dynamic>> outputDataVM; | |||
///样式model | |||
BilDetailStyleModel styleData; | |||
///支出当前页数 | |||
int outPutCurrentPage = 1; | |||
///收入当前页数 | |||
int inPutCurrentPage = 1; | |||
///收入显示时间 | |||
String inputShowDate; | |||
///支出显示时间 | |||
String outputShowDate; | |||
//收入显示类型 | |||
String inputSelectType = 'all'; | |||
///支出显示类型 | |||
String outputSelectType = 'all'; | |||
///收入下啦刷新 | |||
RefreshController inputRefreshController = RefreshController(); | |||
///支出页面下拉刷新 | |||
RefreshController outputRefreshController = RefreshController(); | |||
@override | |||
void dispose() { | |||
inputDataController.close(); | |||
outputDataController.close(); | |||
inputRefreshController.dispose(); | |||
outputRefreshController.dispose(); | |||
} | |||
initStyleData(Map<String, dynamic> data) { | |||
try { | |||
inputShowDate = DateFormat("yyyy-MM").format(DateTime.now()); | |||
outputShowDate = DateFormat("yyyy-MM").format(DateTime.now()); | |||
styleData = BilDetailStyleModel.fromJson(data); | |||
} catch (e, s) { | |||
print(e); | |||
print(s); | |||
} | |||
} | |||
///加载收入数据 | |||
loadInputData(int page, String date, {String type}) async { | |||
type = inputSelectType; | |||
String paramsStr = "?page=" + page.toString() + "&time=" + date; | |||
if (type != null && type != "all") { | |||
paramsStr += "&type=" + type; | |||
} | |||
NetUtil.request("/api/v1/user/wallet_detail/input" + paramsStr, | |||
method: NetMethod.GET, onSuccess: (data) { | |||
inputRefreshController.refreshCompleted(); | |||
inputRefreshController.loadComplete(); | |||
var listmap = List.from(data).map((e) { | |||
return e as Map<String, dynamic>; | |||
}).toList(); | |||
if (inputDataVM == null) { | |||
inputDataVM = List<Map<String, dynamic>>(); | |||
} | |||
if (listmap == null || listmap.length == 0) { | |||
inputRefreshController.loadNoData(); | |||
} | |||
if (inPutCurrentPage == 1) { | |||
inputDataVM.clear(); | |||
inputDataVM.addAll(listmap); | |||
} else { | |||
inputDataVM.addAll(listmap); | |||
} | |||
refresh(); | |||
}); | |||
} | |||
///加载支出数据 | |||
loadOutputData(int page, String date, {String type}) async { | |||
type = outputSelectType; | |||
String paramsStr = "?page=" + page.toString() + "&time=" + date; | |||
if (type != null && type != "all") { | |||
paramsStr += "&type=" + type; | |||
} | |||
NetUtil.request("/api/v1/user/wallet_detail/output" + paramsStr, | |||
method: NetMethod.GET, onSuccess: (data) { | |||
outputRefreshController.refreshCompleted(); | |||
outputRefreshController.loadComplete(); | |||
var listMap = List.from(data).map((e) { | |||
return e as Map<String, dynamic>; | |||
}).toList(); | |||
if (listMap == null || listMap.length == 0) { | |||
outputRefreshController.loadNoData(); | |||
} | |||
if (outputDataVM == null) { | |||
outputDataVM = List(); | |||
} | |||
if (outPutCurrentPage == 1) { | |||
outputDataVM.clear(); | |||
outputDataVM.addAll(listMap); | |||
} else { | |||
outputDataVM.addAll(listMap); | |||
} | |||
refresh(); | |||
}, onError: (e) { | |||
outputRefreshController.refreshCompleted(); | |||
outputRefreshController.loadComplete(); | |||
}); | |||
} | |||
inputRefresh() { | |||
inPutCurrentPage = 1; | |||
loadInputData(inPutCurrentPage, inputShowDate); | |||
} | |||
inputLoad() { | |||
inPutCurrentPage++; | |||
loadInputData(inPutCurrentPage, inputShowDate); | |||
} | |||
outputRefresh() { | |||
outPutCurrentPage = 1; | |||
loadOutputData(outPutCurrentPage, outputShowDate); | |||
} | |||
outputLoad() { | |||
outPutCurrentPage++; | |||
loadOutputData(outPutCurrentPage, outputShowDate); | |||
} | |||
///全刷新 | |||
refresh() { | |||
inputDataController.add(inputDataVM); | |||
outputDataController.add(outputDataVM); | |||
} | |||
} |
@@ -0,0 +1,606 @@ | |||
import 'package:flutter/material.dart'; | |||
import 'package:intl/intl.dart'; | |||
import 'package:pull_to_refresh/pull_to_refresh.dart'; | |||
import 'package:zhiying_base_widget/dialog/select_date_ym_dialog/select_date_ym_dialog.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet/wallet_detail/wallet_detail_bloc.dart'; | |||
import 'package:zhiying_base_widget/widgets/wallet_bil_detail/wallet_bil_detail_widget_bloc.dart'; | |||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||
import 'model/wallet_style_model.dart'; | |||
class WalletListWidget extends StatefulWidget { | |||
final TabList tabList; | |||
final List<InputTabViewBtns> tabViewBtns; | |||
const WalletListWidget({Key key,this.tabViewBtns, this.tabList}) : super(key: key); | |||
@override | |||
_WalletListWidgetState createState() => _WalletListWidgetState(); | |||
} | |||
class _WalletListWidgetState extends State<WalletListWidget> with AutomaticKeepAliveClientMixin { | |||
WalletBilDetailWidgetBloc _bloc; | |||
List<InputTabViewBtns> tabViewBtns; | |||
TabList item; | |||
@override | |||
void initState() { | |||
item=widget.tabList; | |||
tabViewBtns=widget.tabViewBtns; | |||
super.initState(); | |||
} | |||
@override | |||
Widget build(BuildContext context) { | |||
_bloc = BlocProvider.of(context); | |||
if(item.type=='input'){ | |||
return StreamBuilder( | |||
stream: _bloc.inputOutData, | |||
builder: (context, asny) { | |||
// dataVM = asny.data; | |||
return Container( | |||
child: Column( | |||
children: <Widget>[ | |||
_buildType(tabViewBtns, item), | |||
Expanded( | |||
child: SmartRefresher( | |||
controller: _bloc.inputRefreshController, | |||
enablePullDown: true, | |||
enablePullUp: true, | |||
onLoading: _bloc.outputLoad(), | |||
onRefresh: _bloc.outputRefresh(), | |||
child: _bloc.inputDataVM == null | |||
? Container() | |||
: _buildBottomItem(item)), | |||
) | |||
], | |||
), | |||
); | |||
}); | |||
}else{ | |||
return StreamBuilder( | |||
stream: _bloc.outputOutData, | |||
builder: (context, asny) { | |||
// dataVM = asny.data; | |||
return Container( | |||
child: Column( | |||
children: <Widget>[ | |||
_buildType(tabViewBtns, item), | |||
Expanded( | |||
child: SmartRefresher( | |||
controller: _bloc.outputRefreshController, | |||
enablePullDown: true, | |||
enablePullUp: true, | |||
onLoading: _bloc.outputLoad(), | |||
onRefresh: _bloc.outputRefresh(), | |||
child: _bloc.outputDataVM == null | |||
? Container() | |||
: _buildBottomItem(item)), | |||
) | |||
], | |||
), | |||
); | |||
}); | |||
} | |||
} | |||
_buildType(List<InputTabViewBtns> tabViewBtns, TabList tabList) { | |||
var selectType; | |||
if (tabList.type == 'input') { | |||
selectType = _bloc.inputSelectType; | |||
} else { | |||
selectType = _bloc.outputSelectType; | |||
; | |||
} | |||
return Row( | |||
children: <Widget>[ | |||
SizedBox(width: 12.5), | |||
InkWell( | |||
onTap: () { | |||
///显示日期选择弹窗 | |||
_selectDate(tabList); | |||
}, | |||
child: Padding( | |||
padding: const EdgeInsets.only(top: 8, bottom: 8), | |||
child: Text( | |||
tabList.type == "input" | |||
? _bloc.inputShowDate | |||
: _bloc.outputShowDate, | |||
style: TextStyle( | |||
fontSize: 28.sp, | |||
color: | |||
HexColor.fromHex(_bloc.styleData.timeSelectColor)))), | |||
), | |||
Icon( | |||
Icons.arrow_drop_down, | |||
color: HexColor.fromHex(_bloc.styleData.timeSelectColor), | |||
), | |||
Expanded( | |||
child: Container( | |||
height: 50, | |||
child: ListView.builder( | |||
scrollDirection: Axis.horizontal, | |||
shrinkWrap: true, | |||
itemCount: tabViewBtns.length, | |||
itemBuilder: (context, index) { | |||
return InkWell( | |||
onTap: () async { | |||
if (tabList.type == 'input') { | |||
_bloc.inputSelectType = tabViewBtns[index].type; | |||
_bloc.loadInputData( | |||
_bloc.inPutCurrentPage, _bloc.inputShowDate, | |||
type: _bloc.inputSelectType); | |||
} else { | |||
_bloc.outputSelectType = tabViewBtns[index].type; | |||
_bloc.loadOutputData( | |||
_bloc.outPutCurrentPage, _bloc.outputShowDate, | |||
type: _bloc.outputSelectType); | |||
} | |||
_bloc.refresh(); | |||
}, | |||
child: Container( | |||
margin: EdgeInsets.only( | |||
top: 10, left: 8, right: 8, bottom: 10), | |||
decoration: BoxDecoration( | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
selectType == tabViewBtns[index].type | |||
? _bloc.styleData.btnSelectedColor | |||
: _bloc.styleData.btnNoSelectedColor), | |||
), | |||
borderRadius: BorderRadius.circular(50)), | |||
child: Padding( | |||
padding: EdgeInsets.only(left: 16, right: 16), | |||
child: Center( | |||
child: Text( | |||
tabViewBtns[index].name ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
selectType == tabViewBtns[index].type | |||
? _bloc.styleData.btnSelectedColor | |||
: _bloc.styleData.btnNoSelectedColor)), | |||
)), | |||
), | |||
)); | |||
}), | |||
)) | |||
], | |||
); | |||
} | |||
_selectDate(TabList tabList) async { | |||
var result = await showDialog( | |||
context: context, builder: (context) => SelectDateYMDialog()); | |||
if (result != null) { | |||
var dataTime = DateFormat('yyyy-MM').format( | |||
DateTime(int.parse(result['year']), int.parse(result['month']))); | |||
if (tabList.type == "input") { | |||
_bloc.inputShowDate = dataTime; | |||
_bloc.loadInputData(_bloc.inPutCurrentPage, _bloc.inputShowDate); | |||
} else { | |||
_bloc.outputShowDate = dataTime; | |||
_bloc.loadInputData(_bloc.outPutCurrentPage, _bloc.outputShowDate); | |||
} | |||
_bloc.refresh(); | |||
} | |||
} | |||
_buildBottomItem(TabList tabList) { | |||
return ListView.builder( | |||
shrinkWrap: true, | |||
itemCount: tabList.type == 'input' | |||
? _bloc.inputDataVM?.length??0 | |||
: _bloc.outputDataVM?.length??0, | |||
itemBuilder: (context, index) { | |||
return _buildItem(context, index, tabList); | |||
}); | |||
} | |||
Widget _buildItem(BuildContext context, int index, TabList tabList) { | |||
if (tabList.type == 'input') { | |||
InputItemStyle inputItemStyle = _bloc.styleData.inputItemStyle; | |||
var modelItem = _bloc.inputDataVM[index]; | |||
return Container( | |||
margin: EdgeInsets.only(left: 12.5, right: 12.5, bottom: 4, top: 4), | |||
padding: | |||
EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex("#FFFFFF"), | |||
borderRadius: BorderRadius.circular(8)), | |||
child: Column( | |||
children: <Widget>[ | |||
Row( | |||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||
children: <Widget>[ | |||
Row( | |||
children: <Widget>[ | |||
Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex("#FFFFF3F3"), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
inputItemStyle.typeNameColor))), | |||
child: Padding( | |||
padding: const EdgeInsets.only( | |||
left: 4, right: 4, top: 2, bottom: 2), | |||
child: Center( | |||
child: Text( | |||
modelItem['type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
inputItemStyle.typeNameColor), | |||
fontSize: 20.sp), | |||
), | |||
), | |||
), | |||
), | |||
Container( | |||
width: 353.w, | |||
margin: EdgeInsets.only(left: 15.w), | |||
child: Text( | |||
modelItem['title'] ?? "", | |||
maxLines: 1, | |||
overflow: TextOverflow.ellipsis, | |||
style: TextStyle(fontSize: 28.sp), | |||
)) | |||
], | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
"+ ", | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.amountColor)), | |||
), | |||
Text( | |||
"¥ " + modelItem['amount'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.amountColor), | |||
fontSize: 30.sp), | |||
) | |||
], | |||
) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
///订单编号 | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.orderIdText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_id'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 28.w, | |||
), | |||
Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex(inputItemStyle.copyBtnBgColor), | |||
border: Border.all( | |||
color: | |||
HexColor.fromHex(inputItemStyle.contentColor))), | |||
child: Padding( | |||
padding: | |||
EdgeInsets.only(left: 16, right: 16, top: 1, bottom: 1), | |||
child: Text( | |||
inputItemStyle.copyBtnText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
), | |||
) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.orderTypeText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.amountText + " ¥" + modelItem['amount'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.timeText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['time'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.settleTimeText + | |||
" " + | |||
modelItem['settle_time'] ?? | |||
"", | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
], | |||
), | |||
], | |||
), | |||
); | |||
} else if (tabList.type == 'output') { | |||
OutputItemStyle inputItemStyle = _bloc.styleData.outputItemStyle; | |||
var modelItem = _bloc.outputDataVM[index]; | |||
if (modelItem['type'] == '消费') { | |||
///消费返回的Item | |||
return Container( | |||
margin: EdgeInsets.only(left: 12.5, right: 12.5, bottom: 4, top: 4), | |||
padding: | |||
EdgeInsets.only(left: 25.w, right: 25.w, top: 20.h, bottom: 20.h), | |||
decoration: BoxDecoration( | |||
color: HexColor.fromHex("#FFFFFF"), | |||
borderRadius: BorderRadius.circular(8)), | |||
child: Column( | |||
children: <Widget>[ | |||
Row( | |||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||
children: <Widget>[ | |||
Row( | |||
children: <Widget>[ | |||
Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex("#FFFFF3F3"), | |||
border: Border.all( | |||
color: HexColor.fromHex( | |||
inputItemStyle.typeNameColor))), | |||
child: Padding( | |||
padding: const EdgeInsets.only( | |||
left: 4, right: 4, top: 2, bottom: 2), | |||
child: Center( | |||
child: Text( | |||
modelItem['type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex( | |||
inputItemStyle.typeNameColor), | |||
fontSize: 20.sp), | |||
), | |||
), | |||
), | |||
), | |||
Container( | |||
width: 353.w, | |||
margin: EdgeInsets.only(left: 15.w), | |||
child: Text( | |||
modelItem['title'] ?? "", | |||
maxLines: 1, | |||
overflow: TextOverflow.ellipsis, | |||
style: TextStyle(fontSize: 28.sp), | |||
)) | |||
], | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
"- ", | |||
style: TextStyle(color: Colors.red), | |||
), | |||
Text( | |||
"¥ " + modelItem['amount'], | |||
style: TextStyle(color: Colors.red, fontSize: 30.sp), | |||
) | |||
], | |||
) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
///订单编号 | |||
Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.orderIdText, | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_id'], | |||
style: TextStyle( | |||
color: HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 28.w, | |||
), | |||
Container( | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(4), | |||
color: HexColor.fromHex(inputItemStyle.copyBtnBgColor), | |||
border: Border.all( | |||
color: | |||
HexColor.fromHex(inputItemStyle.contentColor))), | |||
child: Padding( | |||
padding: EdgeInsets.only( | |||
left: 16, right: 16, top: 1, bottom: 1), | |||
child: Text( | |||
inputItemStyle.copyBtnText ?? "", | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
), | |||
) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.consumeOrderTypeText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['order_type'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.consumeAmountText + | |||
" ¥" + | |||
modelItem['amount'], | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)) | |||
], | |||
), | |||
SizedBox( | |||
height: 4, | |||
), | |||
Row( | |||
children: <Widget>[ | |||
Expanded( | |||
child: Row( | |||
children: <Widget>[ | |||
Text( | |||
inputItemStyle.consumeTimeText, | |||
style: TextStyle( | |||
color: | |||
HexColor.fromHex(inputItemStyle.contentColor), | |||
fontSize: 22.sp), | |||
), | |||
SizedBox( | |||
width: 4, | |||
), | |||
Text( | |||
modelItem['time'] ?? "", | |||
style: TextStyle( | |||
color: HexColor.fromHex("#FF999999"), | |||
fontSize: 22.sp), | |||
), | |||
], | |||
)), | |||
// Expanded( | |||
// child: Row( | |||
// children: <Widget>[ | |||
// Text( | |||
// inputItemStyle.consumeTimeText + | |||
// " " + | |||
// modelItem['settle_time'] ?? | |||
// "", | |||
// style: TextStyle( | |||
// color: HexColor.fromHex(inputItemStyle.contentColor), | |||
// fontSize: 22.sp), | |||
// ), | |||
// ], | |||
// )) | |||
], | |||
), | |||
], | |||
), | |||
); | |||
} else {} | |||
} | |||
} | |||
@override | |||
// TODO: implement wantKeepAlive | |||
bool get wantKeepAlive => true; | |||
} |