@@ -45,7 +45,7 @@ android { | |||||
applicationId "cn.zhios.zhiying" | applicationId "cn.zhios.zhiying" | ||||
minSdkVersion 21 | minSdkVersion 21 | ||||
targetSdkVersion 28 | targetSdkVersion 28 | ||||
versionCode 1618056480 | |||||
versionCode 1718056480 | |||||
versionName "10.6.0" | versionName "10.6.0" | ||||
aaptOptions.cruncherEnabled = false | aaptOptions.cruncherEnabled = false | ||||
aaptOptions.useNewCruncher = false | aaptOptions.useNewCruncher = false | ||||
@@ -161,6 +161,14 @@ public class MainActivity extends FlutterActivity implements ZhiyingFlutterCommN | |||||
map.put("domain", "http://inapi.izhyin.cn/");//"http://120.76.175.204:8989");http://47.114.51.254:80 http://inapi.izhyin.cn/ | map.put("domain", "http://inapi.izhyin.cn/");//"http://120.76.175.204:8989");http://47.114.51.254:80 http://inapi.izhyin.cn/ | ||||
map.put("master_id", "123456"); | map.put("master_id", "123456"); | ||||
map.put("secret_key", "123456"); | map.put("secret_key", "123456"); | ||||
// map.put("domain", "http://inapi.izhyin.cn/");//"http://120.76.175.204:8989");http://47.114.51.254:80 http://inapi.izhyin.cn/ | |||||
// map.put("master_id", "22255132"); | |||||
// map.put("secret_key", "123456"); | |||||
///正式 | |||||
// map.put("domain", "http://api.zhios.cn/");//45678910,api.zhios.cn84198689 | |||||
// map.put("master_id", "99813608"); | |||||
// map.put("secret_key", "123456"); | |||||
///正式 | ///正式 | ||||
// map.put("domain", "http://api.zhios.cn/");//45678910,api.zhios.cn84198689 | // map.put("domain", "http://api.zhios.cn/");//45678910,api.zhios.cn84198689 | ||||
@@ -26,6 +26,7 @@ import 'package:zhiying_base_widget/zhiying_base_widget.dart'; | |||||
import 'package:zhiying_acquisition/register.dart'; | import 'package:zhiying_acquisition/register.dart'; | ||||
import 'package:zhiying_shopping_mall/zhiying_shopping_mall.dart'; | import 'package:zhiying_shopping_mall/zhiying_shopping_mall.dart'; | ||||
import 'package:zhiying_credit_card/register.dart'; | import 'package:zhiying_credit_card/register.dart'; | ||||
import 'package:zhiying_base_widget/zhiying_base_widget.dart'; | |||||
void main() { | void main() { | ||||
FlutterError.onError = (FlutterErrorDetails details) { | FlutterError.onError = (FlutterErrorDetails details) { | ||||
@@ -151,3 +152,37 @@ class _MyAppState extends State<MyApp> { | |||||
// if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) { | // if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) { | ||||
// FocusManager.instance.primaryFocus.unfocus(); | // FocusManager.instance.primaryFocus.unfocus(); | ||||
// } | // } | ||||
class TestPage extends StatefulWidget { | |||||
@override | |||||
_TestPageState createState() => _TestPageState(); | |||||
} | |||||
class _TestPageState extends State<TestPage> { | |||||
@override | |||||
void initState() { | |||||
NativeUtil.notifyInitSuccess(); | |||||
super.initState(); | |||||
} | |||||
@override | |||||
Widget build(BuildContext context) { | |||||
return Scaffold( | |||||
appBar: AppBar( | |||||
title: Text("临时测试页"), | |||||
), | |||||
body: Container( | |||||
child: ListView( | |||||
children: [ | |||||
ListTile( | |||||
title: Text("查询页"), | |||||
onTap: () { | |||||
Navigator.push(context, MaterialPageRoute(builder: (context) => OrderFoundSearchPage())); | |||||
}, | |||||
) | |||||
], | |||||
), | |||||
), | |||||
); | |||||
} | |||||
} |
@@ -6,6 +6,7 @@ import 'package:pull_to_refresh/pull_to_refresh.dart'; | |||||
import 'package:provider/provider.dart'; | import 'package:provider/provider.dart'; | ||||
import 'package:flutter_bloc/flutter_bloc.dart'; | import 'package:flutter_bloc/flutter_bloc.dart'; | ||||
import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_notifier.dart'; | import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_notifier.dart'; | ||||
import 'package:zhiying_base_widget/widgets/custom/bottom_pic/bottom_pic.dart'; | |||||
import 'package:zhiying_base_widget/widgets/empty/empty_widget.dart'; | import 'package:zhiying_base_widget/widgets/empty/empty_widget.dart'; | ||||
import 'package:zhiying_base_widget/widgets/home/home_auth/home_auth.dart'; | import 'package:zhiying_base_widget/widgets/home/home_auth/home_auth.dart'; | ||||
import 'package:zhiying_base_widget/widgets/refresh/refresh_header/refresh_gif_header.dart'; | import 'package:zhiying_base_widget/widgets/refresh/refresh_header/refresh_gif_header.dart'; | ||||
@@ -26,7 +27,7 @@ class CustomItemPage extends StatelessWidget { | |||||
final String modPid; | final String modPid; | ||||
final String modId; | final String modId; | ||||
final bool needBuildStatus; | final bool needBuildStatus; | ||||
Function(double) scroller; | |||||
Function(double) scroller; | |||||
CustomItemPage(this.data, this.tabIndex, this.modId, this.modPid, this.needBuildStatus, {this.scroller}); | CustomItemPage(this.data, this.tabIndex, this.modId, this.modPid, this.needBuildStatus, {this.scroller}); | ||||
@@ -38,7 +39,14 @@ class CustomItemPage extends StatelessWidget { | |||||
], | ], | ||||
child: BlocProvider<CustomItemPageBloc>( | child: BlocProvider<CustomItemPageBloc>( | ||||
create: (_) => CustomItemPageBloc(CustomItemPageRepository(this.data, this.tabIndex, this.modId, this.modPid)), | create: (_) => CustomItemPageBloc(CustomItemPageRepository(this.data, this.tabIndex, this.modId, this.modPid)), | ||||
child: _CustomItemPageContainer(this.data, this.tabIndex, this.modId, this.modPid, this.needBuildStatus,scroller: this.scroller,), | |||||
child: _CustomItemPageContainer( | |||||
this.data, | |||||
this.tabIndex, | |||||
this.modId, | |||||
this.modPid, | |||||
this.needBuildStatus, | |||||
scroller: this.scroller, | |||||
), | |||||
), | ), | ||||
); | ); | ||||
} | } | ||||
@@ -94,8 +102,9 @@ class __CustomItemPageContainerState extends State<_CustomItemPageContainer> wit | |||||
_controller = ScrollController(); | _controller = ScrollController(); | ||||
_eventBus = EventBus(); | _eventBus = EventBus(); | ||||
_refreshController = RefreshController(initialRefresh: false); | _refreshController = RefreshController(initialRefresh: false); | ||||
_initEvent();_controller.addListener(() { | |||||
if(widget.scroller!=null){ | |||||
_initEvent(); | |||||
_controller.addListener(() { | |||||
if (widget.scroller != null) { | |||||
widget?.scroller(_controller.offset); | widget?.scroller(_controller.offset); | ||||
} | } | ||||
}); | }); | ||||
@@ -186,6 +195,13 @@ class __CustomItemPageContainerState extends State<_CustomItemPageContainer> wit | |||||
margin: const EdgeInsets.only(bottom: 8), | margin: const EdgeInsets.only(bottom: 8), | ||||
child: _buildAuthWidget(model), | child: _buildAuthWidget(model), | ||||
), //_buildAuthWidget(model), | ), //_buildAuthWidget(model), | ||||
), | |||||
Align( | |||||
alignment: Alignment.bottomCenter, | |||||
child: Container( | |||||
margin: EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom), | |||||
child: _buildBottomPic(model), | |||||
), //_buildAuthWidget(model), | |||||
) | ) | ||||
], | ], | ||||
), | ), | ||||
@@ -197,7 +213,7 @@ class __CustomItemPageContainerState extends State<_CustomItemPageContainer> wit | |||||
List<Widget> result = []; | List<Widget> result = []; | ||||
for (int i = 0; i < datas.length; i++) { | for (int i = 0; i < datas.length; i++) { | ||||
WidgetModel item = WidgetModel.fromJson(Map<String, dynamic>.from(datas[i])); | WidgetModel item = WidgetModel.fromJson(Map<String, dynamic>.from(datas[i])); | ||||
if (item.modName == 'audit_tip') { | |||||
if (item.modName == 'audit_tip' || item.modName == "bottom_suspension") { | |||||
Logger.debug('授权组件,跳过'); | Logger.debug('授权组件,跳过'); | ||||
continue; | continue; | ||||
} | } | ||||
@@ -261,4 +277,20 @@ class __CustomItemPageContainerState extends State<_CustomItemPageContainer> wit | |||||
return rlt ?? Container(); | return rlt ?? Container(); | ||||
} | } | ||||
/// 特殊的底部图片跳转 | |||||
Widget _buildBottomPic(final List<Map<String, dynamic>> datas) { | |||||
int length = datas?.length ?? 0; | |||||
if (length == 0) return Container(); | |||||
Widget rlt; | |||||
for (int i = 0; i < datas.length; i++) { | |||||
WidgetModel item = WidgetModel.fromJson(Map<String, dynamic>.from(datas[i])); | |||||
if (item.modName == 'bottom_suspension') { | |||||
rlt = BottomPic(model: datas[i]); | |||||
break; | |||||
} | |||||
} | |||||
return rlt ?? Container(); | |||||
} | |||||
} | } |
@@ -354,7 +354,7 @@ class __CommonPageContainerState extends State<_CommonPageContainer> with Single | |||||
return MyTab( | return MyTab( | ||||
icon: CachedNetworkImage( | icon: CachedNetworkImage( | ||||
imageUrl: item['choose_image_url'] ?? '', | imageUrl: item['choose_image_url'] ?? '', | ||||
width: 14, | |||||
width: 16, | |||||
), | ), | ||||
text: item['name'], | text: item['name'], | ||||
); | ); | ||||
@@ -0,0 +1,31 @@ | |||||
import 'dart:async'; | |||||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||||
import 'order_found_result_model.dart'; | |||||
class OrderFoundResultBloc | |||||
extends BlocBase | |||||
{ | |||||
StreamController<OrderFoundResultModel> streamController = StreamController(); | |||||
OrderFoundResultModel orderFoundResultModel; | |||||
Stream get outData { | |||||
return streamController.stream; | |||||
} | |||||
//获取页面数据 | |||||
getData() { | |||||
// NetUtil.request("", method: NetMethod.POST, onSuccess: (data) { | |||||
// }); | |||||
orderFoundResultModel = OrderFoundResultModel(); | |||||
streamController.add(orderFoundResultModel); | |||||
} | |||||
@override | |||||
void dispose() { | |||||
streamController.close(); | |||||
// TODO: implement dispose | |||||
} | |||||
} |
@@ -0,0 +1,104 @@ | |||||
class OrderFoundResultModel { | |||||
int uid; | |||||
String nickname; | |||||
bool hidOrder; | |||||
String ordId; | |||||
String providerOid; | |||||
String itemId; | |||||
int itemNum; | |||||
String itemTitle; | |||||
String itemPrice; | |||||
String provider; | |||||
String paidPrice; | |||||
int orderType; | |||||
int priceType; | |||||
String priceName; | |||||
String userCommission; | |||||
String userCommissionRate; | |||||
String reason; | |||||
int state; | |||||
String createAt; | |||||
String updateAt; | |||||
String confirmAt; | |||||
String settleAt; | |||||
String thumbnail; | |||||
OrderFoundResultModel( | |||||
{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.priceType, | |||||
this.priceName, | |||||
this.userCommission, | |||||
this.userCommissionRate, | |||||
this.reason, | |||||
this.state, | |||||
this.createAt, | |||||
this.updateAt, | |||||
this.confirmAt, | |||||
this.settleAt, | |||||
this.thumbnail}); | |||||
OrderFoundResultModel.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']; | |||||
itemNum = json['item_num']; | |||||
itemTitle = json['item_title']; | |||||
itemPrice = json['item_price']; | |||||
provider = json['provider']; | |||||
paidPrice = json['paid_price']; | |||||
orderType = json['order_type']; | |||||
priceType = json['price_type']; | |||||
priceName = json['price_name']; | |||||
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']; | |||||
} | |||||
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['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['price_type'] = this.priceType; | |||||
data['price_name'] = this.priceName; | |||||
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,460 @@ | |||||
import 'package:flutter/cupertino.dart'; | |||||
import 'package:flutter/gestures.dart'; | |||||
import 'package:flutter/material.dart'; | |||||
import 'package:flutter/services.dart'; | |||||
import 'package:zhiying_base_widget/pages/order_found_page/order_found_result/order_found_result_bloc.dart'; | |||||
import 'package:zhiying_base_widget/pages/order_found_page/order_found_result/order_found_result_model.dart'; | |||||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||||
import 'package:fluttertoast/fluttertoast.dart'; | |||||
class OrderFoundResultPage extends StatefulWidget { | |||||
//有数据的model | |||||
final OrderFoundResultModel orderFoundResultModel; | |||||
//没有订单数据的空页面的title | |||||
final String emptyOrderTitle; | |||||
//没有订单数据的空页面的内容 | |||||
final String emptyOrderContent; | |||||
//没有订单数据的空页面的图片 | |||||
final String emptyOrderPic; | |||||
const OrderFoundResultPage( | |||||
{Key key, | |||||
this.orderFoundResultModel, | |||||
this.emptyOrderTitle, | |||||
this.emptyOrderContent, | |||||
this.emptyOrderPic}) | |||||
: super(key: key); | |||||
@override | |||||
_OrderFoundResultPageState createState() => _OrderFoundResultPageState(); | |||||
} | |||||
class _OrderFoundResultPageState extends State<OrderFoundResultPage> { | |||||
// OrderFoundResultBloc _bloc; | |||||
bool hasData = true; | |||||
OrderFoundResultModel model; | |||||
String emptyOrderTitle; | |||||
String emptyOrderContent; | |||||
String emptyOrderPic; | |||||
@override | |||||
void initState() { | |||||
// TODO: implement initState | |||||
super.initState(); | |||||
model = widget.orderFoundResultModel; | |||||
if (!EmptyUtil.isEmpty(model)) { | |||||
hasData = true; | |||||
} else { | |||||
hasData = false; | |||||
} | |||||
emptyOrderTitle = widget.emptyOrderTitle; | |||||
emptyOrderContent = widget.emptyOrderContent; | |||||
emptyOrderPic = widget.emptyOrderPic; | |||||
// _bloc = OrderFoundResultBloc(); | |||||
// _bloc.getData(); | |||||
} | |||||
//找回订单操作 | |||||
retrieveOrderClick() { | |||||
print("是我的,找回该订单点击"); | |||||
Map<String, dynamic> params = {}; | |||||
params['oid'] = model?.ordId; | |||||
NetUtil.request('/api/v1/order/find', method: NetMethod.POST, params: params, | |||||
onSuccess: (data) { | |||||
Fluttertoast.showToast(msg: "找回成功"); | |||||
Navigator.pop(context, "success"); | |||||
}); | |||||
} | |||||
continueToQuery() { | |||||
print("继续查询点击"); | |||||
Navigator.pop(context); | |||||
} | |||||
//复制订单号 | |||||
copyOrderCode() async{ | |||||
ClipboardData data = new ClipboardData(text: model?.ordId); | |||||
await Clipboard.setData(data); | |||||
Fluttertoast.showToast(msg: "已复制订单号"); | |||||
} | |||||
@override | |||||
Widget build(BuildContext context) { | |||||
return Scaffold( | |||||
appBar: AppBar( | |||||
elevation: 0, | |||||
brightness: Brightness.light, | |||||
backgroundColor: Colors.white, | |||||
title: Text( | |||||
"订单查询", | |||||
style: TextStyle( | |||||
fontSize: 16, | |||||
color: HexColor.fromHex("#FF333333"), | |||||
fontWeight: FontWeight.w600), | |||||
), | |||||
centerTitle: true, | |||||
leading: Navigator.canPop(context) | |||||
? IconButton( | |||||
icon: Icon( | |||||
Icons.arrow_back_ios, | |||||
size: 18, | |||||
color: HexColor.fromHex("#FF444444"), | |||||
), | |||||
onPressed: () { | |||||
Navigator.pop(context); | |||||
}) | |||||
: Container(), | |||||
), | |||||
body: Container( | |||||
child: hasData ? hasOrderView() : emptyView(), | |||||
), | |||||
); | |||||
} | |||||
//有订单数据的页面 | |||||
hasOrderView() { | |||||
return Column( | |||||
children: [ | |||||
Expanded( | |||||
child: Column( | |||||
children: [ | |||||
orderTip(), //提示文字 | |||||
orderMsg(), //订单数据 | |||||
], | |||||
)), | |||||
//继续查询按钮 | |||||
GestureDetector( | |||||
onTap: () { | |||||
continueToQuery(); | |||||
}, | |||||
behavior: HitTestBehavior.opaque, | |||||
child: Container( | |||||
padding: EdgeInsets.all(12), | |||||
child: Text( | |||||
"不是我的,继续查询", | |||||
style: TextStyle(fontSize: 14, color: HexColor.fromHex("#FF999999")), | |||||
), | |||||
), | |||||
), | |||||
//找回订单按钮 | |||||
GestureDetector( | |||||
onTap: () { | |||||
retrieveOrderClick(); | |||||
}, | |||||
behavior: HitTestBehavior.opaque, | |||||
child: Container( | |||||
height: 50, | |||||
width: double.infinity, | |||||
margin: EdgeInsets.only(left: 24, right: 24, bottom: 24), | |||||
decoration: | |||||
BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.red), | |||||
alignment: Alignment.center, | |||||
child: Text( | |||||
"是我的,找回该订单", | |||||
style: TextStyle(fontSize: 14, color: Colors.white), | |||||
), | |||||
), | |||||
), | |||||
], | |||||
); | |||||
} | |||||
//提示文字 | |||||
orderTip() { | |||||
return Container( | |||||
margin: EdgeInsets.only(top: 15, left: 12), | |||||
child: Row( | |||||
children: [ | |||||
Container( | |||||
margin: EdgeInsets.only(right: 5), | |||||
width: 4, | |||||
height: 15, | |||||
decoration: | |||||
BoxDecoration(borderRadius: BorderRadius.circular(2), color: Colors.red), | |||||
), | |||||
Text( | |||||
"是否为这笔订单?", | |||||
style: TextStyle( | |||||
fontSize: 15, | |||||
color: HexColor.fromHex("#FF333333"), | |||||
fontWeight: FontWeight.bold), | |||||
) | |||||
], | |||||
), | |||||
); | |||||
} | |||||
//订单数据 | |||||
orderMsg() { | |||||
return Container( | |||||
height: 150, | |||||
margin: EdgeInsets.only(top: 10, left: 12, right: 12), | |||||
padding: EdgeInsets.only(top: 10, left: 10, right: 10), | |||||
decoration: | |||||
BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.white), | |||||
child: Column( | |||||
children: [ | |||||
Row( | |||||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||||
children: [ | |||||
Text( | |||||
"自购订单", | |||||
style: TextStyle( | |||||
fontSize: 12, | |||||
color: HexColor.fromHex("#FF333333"), | |||||
fontWeight: FontWeight.w600), | |||||
), | |||||
], | |||||
), | |||||
Container( | |||||
child: Row( | |||||
children: [ | |||||
Container( | |||||
margin: EdgeInsets.only(top: 10, bottom: 10), | |||||
width: 97, | |||||
height: 97, | |||||
decoration: BoxDecoration( | |||||
borderRadius: BorderRadius.circular(7.5), | |||||
image: DecorationImage( | |||||
image: NetworkImage(model?.thumbnail ?? ""), fit: BoxFit.fill)), | |||||
), | |||||
Expanded( | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 10), | |||||
height: 100, | |||||
child: Column( | |||||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||||
crossAxisAlignment: CrossAxisAlignment.start, | |||||
children: [ | |||||
Row( | |||||
children: [ | |||||
Container( | |||||
margin: EdgeInsets.only(right: 4), | |||||
decoration: BoxDecoration( | |||||
borderRadius: BorderRadius.circular(2.5), | |||||
color: Colors.red), | |||||
padding: EdgeInsets.only(left: 10, right: 10), | |||||
child: Text( | |||||
model?.provider, | |||||
style: TextStyle(fontSize: 10, color: Colors.white), | |||||
), | |||||
), | |||||
Expanded( | |||||
child: Text( | |||||
model?.itemTitle, | |||||
style: TextStyle( | |||||
fontSize: 13, | |||||
color: HexColor.fromHex("#FF333333"), | |||||
), | |||||
maxLines: 1, | |||||
overflow: TextOverflow.ellipsis, | |||||
), | |||||
) | |||||
], | |||||
), | |||||
Row( | |||||
children: [ | |||||
Text( | |||||
"订单编号:${model?.ordId}", | |||||
style: TextStyle( | |||||
fontSize: 10, | |||||
color: HexColor.fromHex("#FF999999"), | |||||
), | |||||
), | |||||
GestureDetector( | |||||
onTap: () { | |||||
copyOrderCode(); | |||||
}, | |||||
behavior: HitTestBehavior.opaque, | |||||
child: Container( | |||||
width: 40, | |||||
margin: EdgeInsets.only(left: 4), | |||||
decoration: BoxDecoration( | |||||
border: new Border.all( | |||||
color: HexColor.fromHex("#FFD6D6D6"), width: 0.5), | |||||
borderRadius: BorderRadius.circular(2.5), | |||||
color: HexColor.fromHex("#FFF5F5F5")), | |||||
alignment: Alignment.center, | |||||
child: Text( | |||||
"复制", | |||||
style: TextStyle( | |||||
fontSize: 9, color: HexColor.fromHex("#FF999999")), | |||||
), | |||||
), | |||||
) | |||||
], | |||||
), | |||||
Text( | |||||
"下单时间:${model?.createAt}", | |||||
style: TextStyle( | |||||
fontSize: 10, | |||||
color: HexColor.fromHex("#FF999999"), | |||||
), | |||||
), | |||||
Text( | |||||
"完成时间:${model?.updateAt}", | |||||
style: TextStyle( | |||||
fontSize: 10, | |||||
color: HexColor.fromHex("#FF999999"), | |||||
), | |||||
), | |||||
Row( | |||||
children: [ | |||||
Expanded( | |||||
child: Text( | |||||
"订单金额:¥ ${model?.paidPrice}", | |||||
style: TextStyle( | |||||
fontSize: 10, | |||||
color: HexColor.fromHex("#FF333333"), | |||||
), | |||||
), | |||||
), | |||||
// RichText( | |||||
// text: TextSpan(children: [ | |||||
// TextSpan( | |||||
// text: "收益:¥ ", | |||||
// style: TextStyle( | |||||
// fontSize: 11, | |||||
// color: Colors.red, | |||||
// fontWeight: FontWeight.w600)), | |||||
// TextSpan( | |||||
// text: "10.19", | |||||
// style: TextStyle( | |||||
// fontSize: 18, | |||||
// color: Colors.red, | |||||
// fontWeight: FontWeight.w600)) | |||||
// ]), | |||||
// ) | |||||
], | |||||
), | |||||
], | |||||
), | |||||
), | |||||
), | |||||
], | |||||
), | |||||
), | |||||
// Container( | |||||
// padding: EdgeInsets.only(left: 6), | |||||
// height: 25, | |||||
// alignment: Alignment.centerLeft, | |||||
// decoration: BoxDecoration( | |||||
// borderRadius: BorderRadius.circular(2.5), | |||||
// color: HexColor.fromHex("#FFF9F9F9")), | |||||
// child: RichText( | |||||
// text: TextSpan(children: [ | |||||
// TextSpan( | |||||
// text: "补贴于", | |||||
// style: TextStyle( | |||||
// fontSize: 10, color: HexColor.fromHex("#FF666666"))), | |||||
// TextSpan( | |||||
// text: "2020年07月23日", | |||||
// style: TextStyle( | |||||
// fontSize: 10, color: HexColor.fromHex("#FFFF4242"))), | |||||
// TextSpan( | |||||
// text: "到账,注意查收", | |||||
// style: TextStyle( | |||||
// fontSize: 10, color: HexColor.fromHex("#FF666666"))) | |||||
// ]), | |||||
// ), | |||||
// ) | |||||
], | |||||
), | |||||
); | |||||
} | |||||
//没有订单数据的空页面 | |||||
emptyView() { | |||||
return Column( | |||||
children: [ | |||||
Expanded( | |||||
child: Column( | |||||
children: [ | |||||
Container( | |||||
width: double.infinity, | |||||
margin: EdgeInsets.only(top: 8, left: 12, right: 12), | |||||
padding: EdgeInsets.only(bottom: 16, left: 12, right: 12, top: 28), | |||||
decoration: BoxDecoration( | |||||
borderRadius: BorderRadius.circular(12), color: Colors.white), | |||||
child: Column( | |||||
children: [ | |||||
CachedNetworkImage( | |||||
imageUrl: emptyOrderPic ?? "", | |||||
width: 152, | |||||
fit: BoxFit.fitWidth, | |||||
), | |||||
Container( | |||||
margin: EdgeInsets.only(top: 16), | |||||
child: Text( | |||||
"未查询到该订单", | |||||
style: | |||||
TextStyle(fontSize: 15, color: HexColor.fromHex("#FF999999")), | |||||
), | |||||
), | |||||
Container( | |||||
margin: EdgeInsets.only(top: 24), | |||||
color: HexColor.fromHex("#FFF9F9F9"), | |||||
), | |||||
Container( | |||||
margin: EdgeInsets.only(top: 16), | |||||
child: Row( | |||||
children: [ | |||||
Container( | |||||
margin: EdgeInsets.only(right: 5), | |||||
width: 4, | |||||
height: 15, | |||||
decoration: BoxDecoration( | |||||
borderRadius: BorderRadius.circular(2), color: Colors.red), | |||||
), | |||||
Text( | |||||
emptyOrderTitle ?? "", | |||||
style: TextStyle( | |||||
fontSize: 15, | |||||
color: HexColor.fromHex("#FF333333"), | |||||
fontWeight: FontWeight.bold), | |||||
) | |||||
], | |||||
), | |||||
), | |||||
Container( | |||||
alignment: Alignment.topLeft, | |||||
margin: EdgeInsets.only(top: 8), | |||||
child: Text( | |||||
emptyOrderContent ?? "", | |||||
style: | |||||
TextStyle(fontSize: 12, color: HexColor.fromHex("#FF999999")), | |||||
), | |||||
) | |||||
], | |||||
), | |||||
), | |||||
], | |||||
)), | |||||
GestureDetector( | |||||
onTap: () { | |||||
continueToQuery(); | |||||
}, | |||||
behavior: HitTestBehavior.opaque, | |||||
child: Container( | |||||
height: 50, | |||||
width: double.infinity, | |||||
margin: EdgeInsets.only(left: 24, right: 24, bottom: 24), | |||||
decoration: | |||||
BoxDecoration(borderRadius: BorderRadius.circular(12), color: Colors.red), | |||||
alignment: Alignment.center, | |||||
child: Text( | |||||
"重新查询", | |||||
style: TextStyle(fontSize: 14, color: Colors.white), | |||||
), | |||||
), | |||||
), | |||||
], | |||||
); | |||||
} | |||||
} |
@@ -0,0 +1,184 @@ | |||||
class OrderFoundSearchStyle { | |||||
Top top; | |||||
SearchCss searchCss; | |||||
RuleCss ruleCss; | |||||
FindRuleCss findRuleCss; | |||||
ResultCss resultCss; | |||||
FindRuleCss notFindRuleCss; | |||||
OrderFoundSearchStyle( | |||||
{this.top, | |||||
this.searchCss, | |||||
this.ruleCss, | |||||
this.findRuleCss, | |||||
this.resultCss, | |||||
this.notFindRuleCss}); | |||||
OrderFoundSearchStyle.fromJson(Map<String, dynamic> json) { | |||||
top = json['top'] != null ? new Top.fromJson(json['top']) : null; | |||||
searchCss = json['search_css'] != null | |||||
? new SearchCss.fromJson(json['search_css']) | |||||
: null; | |||||
ruleCss = json['rule_css'] != null | |||||
? new RuleCss.fromJson(json['rule_css']) | |||||
: null; | |||||
findRuleCss = json['find_rule_css'] != null | |||||
? new FindRuleCss.fromJson(json['find_rule_css']) | |||||
: null; | |||||
resultCss = json['result_css'] != null | |||||
? new ResultCss.fromJson(json['result_css']) | |||||
: null; | |||||
notFindRuleCss = json['not_find_rule_css'] != null | |||||
? new FindRuleCss.fromJson(json['not_find_rule_css']) | |||||
: null; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
if (this.top != null) { | |||||
data['top'] = this.top.toJson(); | |||||
} | |||||
if (this.searchCss != null) { | |||||
data['search_css'] = this.searchCss.toJson(); | |||||
} | |||||
if (this.ruleCss != null) { | |||||
data['rule_css'] = this.ruleCss.toJson(); | |||||
} | |||||
if (this.findRuleCss != null) { | |||||
data['find_rule_css'] = this.findRuleCss.toJson(); | |||||
} | |||||
if (this.resultCss != null) { | |||||
data['result_css'] = this.resultCss.toJson(); | |||||
} | |||||
if (this.notFindRuleCss != null) { | |||||
data['not_find_rule_css'] = this.notFindRuleCss.toJson(); | |||||
} | |||||
return data; | |||||
} | |||||
} | |||||
class Top { | |||||
String bgColor; | |||||
String bgSubColor; | |||||
String str; | |||||
String strColor; | |||||
Top({this.bgColor, this.bgSubColor, this.str, this.strColor}); | |||||
Top.fromJson(Map<String, dynamic> json) { | |||||
bgColor = json['bg_color']; | |||||
bgSubColor = json['bg_sub_color']; | |||||
str = json['str']; | |||||
strColor = json['str_color']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['bg_color'] = this.bgColor; | |||||
data['bg_sub_color'] = this.bgSubColor; | |||||
data['str'] = this.str; | |||||
data['str_color'] = this.strColor; | |||||
return data; | |||||
} | |||||
} | |||||
class SearchCss { | |||||
String str; | |||||
String bgColor; | |||||
String strColor; | |||||
String btnStr; | |||||
String btnStrColor; | |||||
String btnBgColor; | |||||
String btnBgSubColor; | |||||
SearchCss( | |||||
{this.str, | |||||
this.bgColor, | |||||
this.strColor, | |||||
this.btnStr, | |||||
this.btnStrColor, | |||||
this.btnBgColor, | |||||
this.btnBgSubColor}); | |||||
SearchCss.fromJson(Map<String, dynamic> json) { | |||||
str = json['str']; | |||||
bgColor = json['bg_color']; | |||||
strColor = json['str_color']; | |||||
btnStr = json['btn_str']; | |||||
btnStrColor = json['btn_str_color']; | |||||
btnBgColor = json['btn_bg_color']; | |||||
btnBgSubColor = json['btn_bg_sub_color']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['str'] = this.str; | |||||
data['bg_color'] = this.bgColor; | |||||
data['str_color'] = this.strColor; | |||||
data['btn_str'] = this.btnStr; | |||||
data['btn_str_color'] = this.btnStrColor; | |||||
data['btn_bg_color'] = this.btnBgColor; | |||||
data['btn_bg_sub_color'] = this.btnBgSubColor; | |||||
return data; | |||||
} | |||||
} | |||||
class RuleCss { | |||||
String str; | |||||
String img; | |||||
String imgUrl; | |||||
RuleCss({this.str, this.img, this.imgUrl}); | |||||
RuleCss.fromJson(Map<String, dynamic> json) { | |||||
str = json['str']; | |||||
img = json['img']; | |||||
imgUrl = json['img_url']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['str'] = this.str; | |||||
data['img'] = this.img; | |||||
data['img_url'] = this.imgUrl; | |||||
return data; | |||||
} | |||||
} | |||||
class FindRuleCss { | |||||
String title; | |||||
String content; | |||||
FindRuleCss({this.title, this.content}); | |||||
FindRuleCss.fromJson(Map<String, dynamic> json) { | |||||
title = json['title']; | |||||
content = json['content']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['title'] = this.title; | |||||
data['content'] = this.content; | |||||
return data; | |||||
} | |||||
} | |||||
class ResultCss { | |||||
String btnBgColor; | |||||
String btnBgSubColor; | |||||
ResultCss({this.btnBgColor, this.btnBgSubColor}); | |||||
ResultCss.fromJson(Map<String, dynamic> json) { | |||||
btnBgColor = json['btn_bg_color']; | |||||
btnBgSubColor = json['btn_bg_sub_color']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['btn_bg_color'] = this.btnBgColor; | |||||
data['btn_bg_sub_color'] = this.btnBgSubColor; | |||||
return data; | |||||
} | |||||
} |
@@ -0,0 +1,69 @@ | |||||
import 'dart:async'; | |||||
import 'dart:convert'; | |||||
import 'package:flutter/cupertino.dart'; | |||||
import 'package:flutter/material.dart'; | |||||
import 'package:zhiying_base_widget/dialog/loading/loading.dart'; | |||||
import 'package:zhiying_base_widget/pages/order_found_page/order_found_result/order_found_result_model.dart'; | |||||
import 'package:zhiying_base_widget/pages/order_found_page/order_found_result/order_found_result_page.dart'; | |||||
import 'package:zhiying_base_widget/pages/order_found_page/order_found_search_page/model/order_found_search_style.dart'; | |||||
import 'package:zhiying_comm/util/base_bloc.dart'; | |||||
import 'package:zhiying_comm/util/empty_util.dart'; | |||||
import 'package:zhiying_comm/util/log/let_log.dart'; | |||||
import 'package:zhiying_comm/util/net_util.dart'; | |||||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||||
class OrderFoundSearchBloc extends BlocBase { | |||||
StreamController streamController = StreamController.broadcast(); | |||||
Stream get outData => streamController.stream; | |||||
OrderFoundSearchStyle style; | |||||
loadStyle() { | |||||
NetUtil.request("/api/v1/order/find/css", onSuccess: (data) { | |||||
style = OrderFoundSearchStyle.fromJson(json.decode(data['data'])); | |||||
streamController.add(style); | |||||
Logger.log(json.encode(data['data'])); | |||||
}); | |||||
} | |||||
searchOrderById(BuildContext context, String id) { | |||||
var params = {"oid": id}; | |||||
Loading.show(context); | |||||
NetUtil.request("/api/v1/order/find/search", params: params, method: NetMethod.POST, onSuccess: (data) { | |||||
Loading.dismiss(); | |||||
if (EmptyUtil.isEmpty(data)) { | |||||
Navigator.push( | |||||
context, | |||||
MaterialPageRoute( | |||||
builder: (_) => OrderFoundResultPage( | |||||
emptyOrderTitle: style?.notFindRuleCss?.title ?? '', | |||||
emptyOrderContent: style?.notFindRuleCss?.content ?? "", | |||||
))); | |||||
} else { | |||||
Navigator.push( | |||||
context, | |||||
MaterialPageRoute( | |||||
builder: (_) => OrderFoundResultPage( | |||||
orderFoundResultModel: OrderFoundResultModel.fromJson(data), | |||||
emptyOrderTitle: style?.notFindRuleCss?.title ?? '', | |||||
emptyOrderContent: style?.notFindRuleCss?.content ?? "", | |||||
))).then((value) { | |||||
if (value != null && value == "success") { | |||||
Navigator.pop(context); | |||||
} | |||||
}); | |||||
} | |||||
streamController.add(style); | |||||
Logger.log(json.encode(data['data'])); | |||||
}, onError: (e) { | |||||
Loading.dismiss(); | |||||
}); | |||||
} | |||||
@override | |||||
void dispose() { | |||||
// TODO: implement dispose | |||||
} | |||||
} |
@@ -0,0 +1,221 @@ | |||||
import 'package:flutter/material.dart'; | |||||
import 'package:zhiying_base_widget/pages/order_found_page/order_found_search_page/order_found_search_bloc.dart'; | |||||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||||
import 'model/order_found_search_style.dart'; | |||||
///订单搜索页 | |||||
class OrderFoundSearchPage extends StatefulWidget { | |||||
@override | |||||
_OrderFoundSearchPageState createState() => _OrderFoundSearchPageState(); | |||||
} | |||||
class _OrderFoundSearchPageState extends State<OrderFoundSearchPage> { | |||||
OrderFoundSearchBloc _bloc; | |||||
OrderFoundSearchStyle style; | |||||
TextEditingController textEditingController; | |||||
@override | |||||
void initState() { | |||||
textEditingController = TextEditingController(); | |||||
_bloc = OrderFoundSearchBloc(); | |||||
_bloc.loadStyle(); | |||||
super.initState(); | |||||
} | |||||
@override | |||||
Widget build(BuildContext context) { | |||||
return StreamBuilder( | |||||
stream: _bloc.outData, | |||||
builder: (context, asyn) { | |||||
if (asyn.data == null) { | |||||
return Container( | |||||
color: Colors.white, | |||||
); | |||||
} | |||||
style = asyn.data; | |||||
return Stack( | |||||
children: [ | |||||
Container( | |||||
color: HexColor.fromHex("#f9f9f9"), | |||||
), | |||||
Container( | |||||
height: 200, | |||||
width: MediaQuery.of(context).size.width, | |||||
decoration: BoxDecoration( | |||||
borderRadius: BorderRadius.only(bottomLeft: Radius.circular(6), bottomRight: Radius.circular(6)), | |||||
gradient: LinearGradient( | |||||
begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [HexColor.fromHex(style?.top?.bgColor), HexColor.fromHex(style?.top?.bgSubColor ?? '')])), | |||||
), | |||||
Scaffold( | |||||
backgroundColor: Colors.transparent, | |||||
appBar: _buildAppBar(), | |||||
body: Container( | |||||
child: ListView( | |||||
children: [_buildSearch(), _buildCenter(), _buildBottom()], | |||||
), | |||||
), | |||||
), | |||||
], | |||||
); | |||||
}); | |||||
} | |||||
_buildAppBar() { | |||||
return AppBar( | |||||
backgroundColor: Colors.transparent, | |||||
elevation: 0, | |||||
leading: Navigator.canPop(context) | |||||
? IconButton( | |||||
icon: Icon( | |||||
Icons.arrow_back_ios_rounded, | |||||
), | |||||
iconSize: 18, | |||||
onPressed: () { | |||||
Navigator.pop(context); | |||||
}) | |||||
: Container(), | |||||
title: Text( | |||||
style?.top?.str ?? '', | |||||
style: TextStyle(fontSize: 17, color: HexColor.fromHex(style?.top?.strColor)), | |||||
), | |||||
centerTitle: true, | |||||
actions: [ | |||||
IconButton( | |||||
icon: Icon( | |||||
Icons.refresh, | |||||
color: HexColor.fromHex(style?.top?.strColor), | |||||
), | |||||
onPressed: () { | |||||
_bloc?.loadStyle(); | |||||
}) | |||||
], | |||||
); | |||||
} | |||||
///构建搜索 | |||||
_buildSearch() { | |||||
return Container( | |||||
height: 50, | |||||
decoration: BoxDecoration(color: HexColor.fromHex(style?.searchCss?.bgColor ?? ''), borderRadius: BorderRadius.circular(10), border: Border.all(color: Colors.white)), | |||||
margin: EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10), | |||||
padding: EdgeInsets.only(left: 10, right: 4), | |||||
child: Row( | |||||
children: [ | |||||
Expanded( | |||||
child: TextField( | |||||
controller: textEditingController, | |||||
decoration: InputDecoration( | |||||
border: InputBorder.none, | |||||
hintText: style?.searchCss?.str ?? '', | |||||
hintStyle: TextStyle(color: HexColor.fromHex(style?.searchCss?.strColor ?? ""), fontSize: 14), | |||||
isDense: true), | |||||
)), | |||||
GestureDetector( | |||||
onTap: () { | |||||
if (textEditingController?.text.trim().length == 0) { | |||||
Fluttertoast.showToast(msg: "请输入搜索的订单编号"); | |||||
return; | |||||
} | |||||
FocusScope.of(context).requestFocus(new FocusNode()); | |||||
_bloc.searchOrderById(context, textEditingController.text); | |||||
}, | |||||
child: Container( | |||||
height: 42, | |||||
alignment: Alignment.center, | |||||
padding: EdgeInsets.only(left: 24, right: 24), | |||||
decoration: BoxDecoration( | |||||
borderRadius: BorderRadius.circular(10), | |||||
gradient: LinearGradient( | |||||
begin: Alignment.centerLeft, | |||||
end: Alignment.centerRight, | |||||
colors: [HexColor.fromHex(style?.searchCss?.btnBgColor), HexColor.fromHex(style?.searchCss?.btnBgSubColor ?? '')])), | |||||
child: Text( | |||||
style?.searchCss?.btnStr ?? "", | |||||
style: TextStyle(color: HexColor.fromHex(style?.searchCss?.btnStrColor ?? "")), | |||||
), | |||||
), | |||||
), | |||||
], | |||||
), | |||||
); | |||||
} | |||||
_buildCenter() { | |||||
return Container( | |||||
margin: EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10), | |||||
padding: EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10), | |||||
decoration: BoxDecoration(color: HexColor.fromHex("#FFFFFF"), borderRadius: BorderRadius.circular(10)), | |||||
child: Column( | |||||
children: [ | |||||
Row( | |||||
children: [ | |||||
Container( | |||||
width: 4, | |||||
height: 14, | |||||
decoration: BoxDecoration(color: HexColor.fromHex("#FF2020"), borderRadius: BorderRadius.circular(10)), | |||||
margin: EdgeInsets.only(right: 10), | |||||
), | |||||
Text( | |||||
style?.ruleCss?.str ?? "", | |||||
style: TextStyle(color: HexColor.fromHex("#333333"), fontSize: 15, fontWeight: FontWeight.w500), | |||||
) | |||||
], | |||||
), | |||||
SizedBox( | |||||
height: 16, | |||||
), | |||||
GestureDetector( | |||||
onTap: () { | |||||
PhotoPreview.showPhotoPreviewByimages(context, [style?.ruleCss?.img ?? ""]); | |||||
}, | |||||
child: CachedNetworkImage( | |||||
imageUrl: style?.ruleCss?.img ?? '', | |||||
fit: BoxFit.fitWidth, | |||||
), | |||||
) | |||||
], | |||||
), | |||||
); | |||||
} | |||||
_buildBottom() { | |||||
return Container( | |||||
margin: EdgeInsets.only(left: 10, right: 10, top: 0, bottom: 10), | |||||
padding: EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10), | |||||
decoration: BoxDecoration(color: HexColor.fromHex("#FFFFFF"), borderRadius: BorderRadius.circular(10)), | |||||
child: Column( | |||||
children: [ | |||||
Row( | |||||
children: [ | |||||
Container( | |||||
width: 4, | |||||
height: 14, | |||||
margin: EdgeInsets.only(right: 10), | |||||
decoration: BoxDecoration(color: HexColor.fromHex("#FF2020"), borderRadius: BorderRadius.circular(10)), | |||||
), | |||||
Text( | |||||
style?.findRuleCss?.title ?? '', | |||||
style: TextStyle(color: HexColor.fromHex("#333333"), fontSize: 15, fontWeight: FontWeight.w500), | |||||
) | |||||
], | |||||
), | |||||
SizedBox( | |||||
height: 16, | |||||
), | |||||
ListView( | |||||
shrinkWrap: true, | |||||
physics: NeverScrollableScrollPhysics(), | |||||
children: [ | |||||
Text( | |||||
style?.findRuleCss?.content ?? "", | |||||
style: TextStyle(color: HexColor.fromHex("#999999"), fontSize: 12, fontWeight: FontWeight.w500), | |||||
) | |||||
], | |||||
) | |||||
], | |||||
), | |||||
); | |||||
} | |||||
} |
@@ -9,7 +9,7 @@ import 'package:zhiying_comm/zhiying_comm.dart'; | |||||
class OrderContentBloc extends BlocBase { | class OrderContentBloc extends BlocBase { | ||||
final String skipIdentifier; | final String skipIdentifier; | ||||
OrderContentBloc({this.skipIdentifier}); | |||||
OrderContentBloc({this.skipIdentifier,this.source}); | |||||
List<OrderModel> _orders = List(); | List<OrderModel> _orders = List(); | ||||
@@ -21,6 +21,7 @@ class OrderContentBloc extends BlocBase { | |||||
OrderFilterModel _filter; | OrderFilterModel _filter; | ||||
RefreshController refreshController = | RefreshController refreshController = | ||||
RefreshController(initialRefresh: false); | RefreshController(initialRefresh: false); | ||||
String source; | |||||
@override | @override | ||||
void dispose() { | void dispose() { | ||||
_ordersController.close(); | _ordersController.close(); | ||||
@@ -40,6 +41,9 @@ class OrderContentBloc extends BlocBase { | |||||
params.removeWhere((key, value) => value == null || value == ''); | params.removeWhere((key, value) => value == null || value == ''); | ||||
params['state'] = _state; | params['state'] = _state; | ||||
String reqUrl = skipIdentifier == 'pub.flutter.order_by_userlvup' ? '/api/v1/order_by_userlvup' : '/api/v1/order'; | String reqUrl = skipIdentifier == 'pub.flutter.order_by_userlvup' ? '/api/v1/order_by_userlvup' : '/api/v1/order'; | ||||
if(skipIdentifier=="pub.flutter.order_list"){ | |||||
reqUrl="/api/v1/order_list/"+(source??""); | |||||
} | |||||
NetUtil.request(reqUrl, method: NetMethod.POST, params: params, | NetUtil.request(reqUrl, method: NetMethod.POST, params: params, | ||||
onCache: (data) { | onCache: (data) { | ||||
//_parseData(data); | //_parseData(data); | ||||
@@ -19,13 +19,24 @@ class OrderPageBloc extends BlocBase { | |||||
_styleController = null; | _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(String skipIdentifier,{String source}) async { | |||||
if(skipIdentifier=="pub.flutter.order_list"){ | |||||
skipIdentifier="pub.flutter.my_order"; | |||||
NetUtil.request('/api/v1/mod/${skipIdentifier.toString()}?source_type='+source, | |||||
method: NetMethod.GET, onCache: (data) { | |||||
// _loadData(data); | |||||
}, onSuccess: (data) { | |||||
_loadData(data); | |||||
}); | |||||
}else{ | |||||
NetUtil.request('/api/v1/mod/${skipIdentifier.toString()}', | |||||
method: NetMethod.GET, onCache: (data) { | |||||
// _loadData(data); | |||||
}, onSuccess: (data) { | |||||
_loadData(data); | |||||
}); | |||||
} | |||||
} | } | ||||
void _loadData(dynamic data) { | void _loadData(dynamic data) { | ||||
@@ -14,6 +14,7 @@ class OrderSearchBloc extends BlocBase { | |||||
int _page = 1; | int _page = 1; | ||||
String _keyword = ''; | String _keyword = ''; | ||||
String source; | |||||
@override | @override | ||||
void dispose() { | void dispose() { | ||||
_ordersController.close(); | _ordersController.close(); | ||||
@@ -18,9 +18,10 @@ class OrderContentPage extends StatefulWidget { | |||||
final int index; | final int index; | ||||
final EventBus eventBus; | final EventBus eventBus; | ||||
final String skipIdentifier; | final String skipIdentifier; | ||||
final String source;///通过自定义页面订单分类进入的订单类型 | |||||
const OrderContentPage(this.state, | const OrderContentPage(this.state, | ||||
{Key key, this.filter, this.style, this.index, this.eventBus, this.skipIdentifier}) | |||||
{Key key, this.filter, this.style, this.index, this.eventBus, this.skipIdentifier,this.source}) | |||||
: super(key: key); | : super(key: key); | ||||
@override | @override | ||||
@@ -31,7 +32,7 @@ class _OrderContentPageState extends State<OrderContentPage> { | |||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
return BlocProvider<OrderContentBloc>( | return BlocProvider<OrderContentBloc>( | ||||
bloc: OrderContentBloc(skipIdentifier: widget?.skipIdentifier), | |||||
bloc: OrderContentBloc(skipIdentifier: widget?.skipIdentifier,source: widget?.source), | |||||
child: OrderContentContainer( | child: OrderContentContainer( | ||||
widget.state, | widget.state, | ||||
widget.filter, | widget.filter, | ||||
@@ -49,7 +50,6 @@ class OrderContentContainer extends StatefulWidget { | |||||
final OrderPageStyleModel style; | final OrderPageStyleModel style; | ||||
final int index; | final int index; | ||||
final EventBus eventBus; | final EventBus eventBus; | ||||
const OrderContentContainer(this.state, this.filter, this.style, | const OrderContentContainer(this.state, this.filter, this.style, | ||||
{Key key, this.index, this.eventBus}) | {Key key, this.index, this.eventBus}) | ||||
: super(key: key); | : super(key: key); | ||||
@@ -67,7 +67,7 @@ class _OrdersPageState extends State<OrdersPage> { | |||||
) | ) | ||||
: Container(), | : Container(), | ||||
middle: Text( | middle: Text( | ||||
widget.data['skip_identifier'] == 'pub.flutter.my_order' ? '我的订单' : '会员升级订单', | |||||
widget?.data["skip_name"] ??( widget.data['skip_identifier'] == 'pub.flutter.my_order' ? '我的订单' : '会员升级订单'), | |||||
style: TextStyle( | style: TextStyle( | ||||
fontSize: 15, | fontSize: 15, | ||||
color: Color(0xff333333), | color: Color(0xff333333), | ||||
@@ -86,8 +86,7 @@ class _OrdersContainer extends StatefulWidget { | |||||
_OrdersContainerState createState() => _OrdersContainerState(); | _OrdersContainerState createState() => _OrdersContainerState(); | ||||
} | } | ||||
class _OrdersContainerState extends State<_OrdersContainer> | |||||
with TickerProviderStateMixin { | |||||
class _OrdersContainerState extends State<_OrdersContainer> with TickerProviderStateMixin { | |||||
TabController _tabController; | TabController _tabController; | ||||
GlobalKey _tabKey = GlobalKey(); | GlobalKey _tabKey = GlobalKey(); | ||||
OrderPageBloc _bloc; | OrderPageBloc _bloc; | ||||
@@ -100,11 +99,21 @@ class _OrdersContainerState extends State<_OrdersContainer> | |||||
EventBus _eventBus = EventBus(); | EventBus _eventBus = EventBus(); | ||||
String source; | |||||
@override | @override | ||||
void initState() { | void initState() { | ||||
_bloc = BlocProvider.of<OrderPageBloc>(context); | _bloc = BlocProvider.of<OrderPageBloc>(context); | ||||
if (widget.data.containsKey('skip_identifier')) { | if (widget.data.containsKey('skip_identifier')) { | ||||
_bloc.loadData(widget.data['skip_identifier']); | |||||
String source = null; | |||||
if (widget?.data['data'] != null) { | |||||
source = widget?.data['data']['source_type']; | |||||
} | |||||
_bloc.loadData(widget.data['skip_identifier'], source: source); | |||||
} | |||||
if(widget?.data['data']!=null&&widget.data['data']['source_type']!=null){ | |||||
source=widget.data['data']['source_type']; | |||||
} | } | ||||
super.initState(); | super.initState(); | ||||
@@ -128,8 +137,7 @@ class _OrdersContainerState extends State<_OrdersContainer> | |||||
List<OrderTypeModel> type = model.filter.orderState; | List<OrderTypeModel> type = model.filter.orderState; | ||||
_tabController?.dispose(); | _tabController?.dispose(); | ||||
_tabController = | |||||
TabController(length: type?.length ?? 0, vsync: this); | |||||
_tabController = TabController(length: type?.length ?? 0, vsync: this); | |||||
_tabController.addListener(() { | _tabController.addListener(() { | ||||
Logger.debug('????? ${_tabController.index.toString()}'); | Logger.debug('????? ${_tabController.index.toString()}'); | ||||
}); | }); | ||||
@@ -143,6 +151,7 @@ class _OrdersContainerState extends State<_OrdersContainer> | |||||
index: index, | index: index, | ||||
eventBus: _eventBus, | eventBus: _eventBus, | ||||
skipIdentifier: widget.data['skip_identifier'], | skipIdentifier: widget.data['skip_identifier'], | ||||
source: source, | |||||
), | ), | ||||
); | ); | ||||
@@ -155,13 +164,13 @@ class _OrdersContainerState extends State<_OrdersContainer> | |||||
child: GestureDetector( | child: GestureDetector( | ||||
child: OrderSearchWidget(model), | child: OrderSearchWidget(model), | ||||
onTap: () { | onTap: () { | ||||
Navigator.of(context) | |||||
.push(CupertinoPageRoute(builder: (BuildContext context) { | |||||
Navigator.of(context).push(CupertinoPageRoute(builder: (BuildContext context) { | |||||
return OrderSearchPage(model); | return OrderSearchPage(model); | ||||
})); | })); | ||||
}, | }, | ||||
), | ), | ||||
), | ), | ||||
/// TabBar 分类导航 | /// TabBar 分类导航 | ||||
OrderTabbarWidget( | OrderTabbarWidget( | ||||
model, | model, | ||||
@@ -174,6 +183,7 @@ class _OrdersContainerState extends State<_OrdersContainer> | |||||
}); | }); | ||||
}, | }, | ||||
), | ), | ||||
/// TabView 子视图 | /// TabView 子视图 | ||||
Expanded( | Expanded( | ||||
child: Stack( | child: Stack( | ||||
@@ -182,6 +192,7 @@ class _OrdersContainerState extends State<_OrdersContainer> | |||||
children: _contents, | children: _contents, | ||||
controller: _tabController, | controller: _tabController, | ||||
), | ), | ||||
/// 筛选视图 | /// 筛选视图 | ||||
Visibility( | Visibility( | ||||
visible: _isFilterShow, | visible: _isFilterShow, | ||||
@@ -43,6 +43,7 @@ import 'package:zhiying_base_widget/widgets/custom/banner/custom_banner_widget.d | |||||
import 'package:zhiying_base_widget/widgets/custom/goods/custom_goods_creater.dart'; | import 'package:zhiying_base_widget/widgets/custom/goods/custom_goods_creater.dart'; | ||||
import 'package:zhiying_base_widget/widgets/custom/multi_nav/custom_quick_entry.dart'; | import 'package:zhiying_base_widget/widgets/custom/multi_nav/custom_quick_entry.dart'; | ||||
import 'package:zhiying_base_widget/widgets/custom/notice/custom_notice_widget.dart'; | import 'package:zhiying_base_widget/widgets/custom/notice/custom_notice_widget.dart'; | ||||
import 'package:zhiying_base_widget/widgets/custom/ordedr_class/order_class_nav/order_class_nav.dart'; | |||||
import 'package:zhiying_base_widget/widgets/custom/search/custom_search_widget.dart'; | import 'package:zhiying_base_widget/widgets/custom/search/custom_search_widget.dart'; | ||||
import 'package:zhiying_base_widget/widgets/custom/share_content/share_content_widget.dart'; | import 'package:zhiying_base_widget/widgets/custom/share_content/share_content_widget.dart'; | ||||
import 'package:zhiying_base_widget/widgets/custom/slide_banner/custom_slide_banner_creater.dart'; | import 'package:zhiying_base_widget/widgets/custom/slide_banner/custom_slide_banner_creater.dart'; | ||||
@@ -310,6 +311,12 @@ class BaseWidgetRegister { | |||||
/// 通用模块 | /// 通用模块 | ||||
PageFactory.regist('pub.flutter.custom', (model) => CustomPage(model)); | PageFactory.regist('pub.flutter.custom', (model) => CustomPage(model)); | ||||
///订单找回 | |||||
PageFactory.regist("pub.flutter.order_find", (model) => OrderFoundSearchPage()); | |||||
/// 订单页面 | |||||
PageFactory.regist('pub.flutter.order_list', (model) => OrdersPage(model)); | |||||
} | } | ||||
// 注册控件 | // 注册控件 | ||||
@@ -453,5 +460,7 @@ class BaseWidgetRegister { | |||||
WidgetFactory.regist('audit_tip', DefaultWidgetCreater((model) => HomeAuth(model))); | WidgetFactory.regist('audit_tip', DefaultWidgetCreater((model) => HomeAuth(model))); | ||||
// 分享内容组件 | // 分享内容组件 | ||||
WidgetFactory.regist('share_content', DefaultWidgetCreater((model) => CustomShareContentWidget(model))); | WidgetFactory.regist('share_content', DefaultWidgetCreater((model) => CustomShareContentWidget(model))); | ||||
WidgetFactory.regist('features_cate', DefaultWidgetCreater((model) => OrderClassNav(model))); | |||||
} | } | ||||
} | } |
@@ -0,0 +1,42 @@ | |||||
import 'dart:convert'; | |||||
import 'package:flutter/material.dart'; | |||||
import 'package:zhiying_comm/util/log/let_log.dart'; | |||||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||||
import 'bottom_pic_style.dart'; | |||||
class BottomPic extends StatelessWidget { | |||||
final Map<String, dynamic> model; | |||||
BottomPic({Key key, this.model}) : super(key: key); | |||||
@override | |||||
BottomPicStyle style; | |||||
Widget build(BuildContext context) { | |||||
style = BottomPicStyle.fromJson(json.decode(model['data'])); | |||||
Logger.log(model['data']); | |||||
if (style == null) { | |||||
return Container(); | |||||
} | |||||
return GestureDetector( | |||||
onTap: () { | |||||
RouterUtil.route(SkipModel.fromJson(style.toJson()), style.toJson(), context); | |||||
}, | |||||
child: Container( | |||||
margin: EdgeInsets.only( | |||||
left: double.tryParse(style?.leftRightMargin ?? "0"), right: double.tryParse(style?.leftRightMargin ?? "0"), top: double.tryParse(style?.topMargin ?? "0"), bottom: 0), | |||||
decoration: BoxDecoration( | |||||
color: HexColor.fromHex(style?.bgColor ?? ''), | |||||
borderRadius: BorderRadius.only( | |||||
topLeft: Radius.circular(double.tryParse(style?.topLeftRadius ?? "0")), | |||||
topRight: Radius.circular(double.tryParse(style?.topRightRadius ?? "0")), | |||||
bottomLeft: Radius.circular(double.tryParse(style?.bottomLeftRadius ?? "0")), | |||||
bottomRight: Radius.circular(double.tryParse(style?.bottomRightRadius ?? "0")))), | |||||
child: CachedNetworkImage( | |||||
imageUrl: style?.bgImage ?? "", | |||||
), | |||||
), | |||||
); | |||||
} | |||||
} |
@@ -0,0 +1,100 @@ | |||||
class BottomPicStyle { | |||||
String name; | |||||
String desc; | |||||
String moduleType; | |||||
String moduleKey; | |||||
String isTopMargin; | |||||
String isLeftRightMargin; | |||||
String isShow; | |||||
String topMargin; | |||||
String leftRightMargin; | |||||
String topLeftRadius; | |||||
String topRightRadius; | |||||
String bottomLeftRadius; | |||||
String bottomRightRadius; | |||||
String bgColor; | |||||
String bgImage; | |||||
String bgImageUrl; | |||||
String skipIdentifier; | |||||
String skipName; | |||||
String requiredLogin; | |||||
String requiredTaobaoAuth; | |||||
String isJump; | |||||
String cateTag; | |||||
BottomPicStyle( | |||||
{this.name, | |||||
this.desc, | |||||
this.moduleType, | |||||
this.moduleKey, | |||||
this.isTopMargin, | |||||
this.isLeftRightMargin, | |||||
this.isShow, | |||||
this.topMargin, | |||||
this.leftRightMargin, | |||||
this.topLeftRadius, | |||||
this.topRightRadius, | |||||
this.bottomLeftRadius, | |||||
this.bottomRightRadius, | |||||
this.bgColor, | |||||
this.bgImage, | |||||
this.bgImageUrl, | |||||
this.skipIdentifier, | |||||
this.skipName, | |||||
this.requiredLogin, | |||||
this.requiredTaobaoAuth, | |||||
this.isJump, | |||||
this.cateTag}); | |||||
BottomPicStyle.fromJson(Map<String, dynamic> json) { | |||||
name = json['name']; | |||||
desc = json['desc']; | |||||
moduleType = json['module_type']; | |||||
moduleKey = json['module_key']; | |||||
isTopMargin = json['is_top_margin']; | |||||
isLeftRightMargin = json['is_left_right_margin']; | |||||
isShow = json['is_show']; | |||||
topMargin = json['top_margin']; | |||||
leftRightMargin = json['left_right_margin']; | |||||
topLeftRadius = json['top_left_radius']; | |||||
topRightRadius = json['top_right_radius']; | |||||
bottomLeftRadius = json['bottom_left_radius']; | |||||
bottomRightRadius = json['bottom_right_radius']; | |||||
bgColor = json['bg_color']; | |||||
bgImage = json['bg_image']; | |||||
bgImageUrl = json['bg_image_url']; | |||||
skipIdentifier = json['skip_identifier']; | |||||
skipName = json['skip_name']; | |||||
requiredLogin = json['required_login']; | |||||
requiredTaobaoAuth = json['required_taobao_auth']; | |||||
isJump = json['is_jump']; | |||||
cateTag = json['cate_tag']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['name'] = this.name; | |||||
data['desc'] = this.desc; | |||||
data['module_type'] = this.moduleType; | |||||
data['module_key'] = this.moduleKey; | |||||
data['is_top_margin'] = this.isTopMargin; | |||||
data['is_left_right_margin'] = this.isLeftRightMargin; | |||||
data['is_show'] = this.isShow; | |||||
data['top_margin'] = this.topMargin; | |||||
data['left_right_margin'] = this.leftRightMargin; | |||||
data['top_left_radius'] = this.topLeftRadius; | |||||
data['top_right_radius'] = this.topRightRadius; | |||||
data['bottom_left_radius'] = this.bottomLeftRadius; | |||||
data['bottom_right_radius'] = this.bottomRightRadius; | |||||
data['bg_color'] = this.bgColor; | |||||
data['bg_image'] = this.bgImage; | |||||
data['bg_image_url'] = this.bgImageUrl; | |||||
data['skip_identifier'] = this.skipIdentifier; | |||||
data['skip_name'] = this.skipName; | |||||
data['required_login'] = this.requiredLogin; | |||||
data['required_taobao_auth'] = this.requiredTaobaoAuth; | |||||
data['is_jump'] = this.isJump; | |||||
data['cate_tag'] = this.cateTag; | |||||
return data; | |||||
} | |||||
} |
@@ -0,0 +1,133 @@ | |||||
import 'dart:convert'; | |||||
import 'package:flutter/material.dart'; | |||||
import 'package:zhiying_base_widget/widgets/custom/ordedr_class/order_class_nav/order_class_style.dart'; | |||||
import 'package:zhiying_comm/util/extension/color.dart'; | |||||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||||
///订单分类 | |||||
class OrderClassNav extends StatelessWidget { | |||||
final Map<String, dynamic> model; | |||||
OrderClassNav(this.model, {Key key}) : super(key: key); | |||||
OrderClassStyle style; | |||||
BuildContext context; | |||||
@override | |||||
Widget build(BuildContext context) { | |||||
// Logger.log(model['data']); | |||||
style = OrderClassStyle.fromJson(json.decode(model['data'])); | |||||
if (style == null) { | |||||
return Container(); | |||||
} | |||||
this.context = context; | |||||
return Container( | |||||
margin: EdgeInsets.only( | |||||
left: double.tryParse(style?.leftRightMargin ?? "0"), right: double.tryParse(style?.leftRightMargin ?? "0"), top: double.tryParse(style?.topMargin ?? "0"), bottom: 0), | |||||
padding: EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10), | |||||
decoration: BoxDecoration( | |||||
color: HexColor.fromHex(style?.bgColor ?? ''), | |||||
borderRadius: BorderRadius.only( | |||||
topLeft: Radius.circular(double.tryParse(style?.topLeftRadius ?? "0")), | |||||
topRight: Radius.circular(double.tryParse(style?.topRightRadius ?? "0")), | |||||
bottomLeft: Radius.circular(double.tryParse(style?.bottomLeftRadius ?? "0")), | |||||
bottomRight: Radius.circular(double.tryParse(style?.bottomRightRadius ?? "0")))), | |||||
child: Column( | |||||
crossAxisAlignment: CrossAxisAlignment.start, | |||||
children: [ | |||||
Row( | |||||
children: [ | |||||
Container( | |||||
width: 4, | |||||
height: 14, | |||||
decoration: BoxDecoration(color: HexColor.fromHex("#FF2020"), borderRadius: BorderRadius.circular(10)), | |||||
margin: EdgeInsets.only(right: 10), | |||||
), | |||||
Text( | |||||
style?.title ?? "", | |||||
style: TextStyle(color: HexColor.fromHex("#333333"), fontSize: 15, fontWeight: FontWeight.w500), | |||||
) | |||||
], | |||||
), | |||||
Padding( | |||||
padding: const EdgeInsets.only(left: 15), | |||||
child: Text( | |||||
style?.subTitle ?? "", | |||||
style: TextStyle(color: HexColor.fromHex("#999999"), fontSize: 12, fontWeight: FontWeight.w500), | |||||
), | |||||
), | |||||
SizedBox( | |||||
height: 10, | |||||
), | |||||
createNav() | |||||
], | |||||
), | |||||
); | |||||
} | |||||
createNav() { | |||||
List<Widget> listWidget = List(); | |||||
int row = (style?.listStyle?.length / style?.columSize).ceil(); | |||||
for (var index = 0; index < row; index++) { | |||||
listWidget.add(Row( | |||||
children: _buildRow(index), | |||||
)); | |||||
} | |||||
return Column(children: listWidget); | |||||
} | |||||
_buildRow(int index2) { | |||||
List<Widget> listWidget = List(); | |||||
int currentIndex = index2 * style?.columSize; | |||||
for (var index = 0; index < style?.columSize; index++) { | |||||
var nowIndex = currentIndex + index; | |||||
listWidget.add(Expanded( | |||||
child: _buildItem(nowIndex), | |||||
)); | |||||
} | |||||
return listWidget; | |||||
} | |||||
_buildItem(int currentIndex) { | |||||
print(currentIndex.toString()); | |||||
if (currentIndex >= style?.listStyle?.length) { | |||||
return Container(); | |||||
} | |||||
var item = style.listStyle[currentIndex]; | |||||
print(currentIndex.toString() + item?.title); | |||||
return GestureDetector( | |||||
onTap: () { | |||||
RouterUtil.route(SkipModel.fromJson(item.toJson() ?? ''), item.toJson(), context); | |||||
}, | |||||
child: Container( | |||||
margin: EdgeInsets.only(top: 10), | |||||
child: Column( | |||||
children: [ | |||||
CachedNetworkImage( | |||||
imageUrl: item?.img ?? "", | |||||
width: 40, | |||||
height: 40, | |||||
), | |||||
SizedBox( | |||||
height: 6, | |||||
), | |||||
Text( | |||||
item?.title, | |||||
style: TextStyle(color: HexColor.fromHex("#333333"), fontSize: 12), | |||||
), | |||||
Text( | |||||
item?.subTitle, | |||||
style: TextStyle(color: HexColor.fromHex("#333333"), fontSize: 10), | |||||
), | |||||
], | |||||
), | |||||
), | |||||
); | |||||
} | |||||
} |
@@ -0,0 +1,186 @@ | |||||
class OrderClassStyle { | |||||
String name; | |||||
String desc; | |||||
String title; | |||||
int customFeaturesCate; | |||||
String moduleType; | |||||
String moduleKey; | |||||
String isTopMargin; | |||||
String isLeftRightMargin; | |||||
String isShow; | |||||
String topMargin; | |||||
String leftRightMargin; | |||||
String topLeftRadius; | |||||
String topRightRadius; | |||||
String bottomLeftRadius; | |||||
String bottomRightRadius; | |||||
String bgColor; | |||||
String subTitle; | |||||
List<ListStyle> listStyle; | |||||
int columSize; | |||||
OrderClassStyle( | |||||
{this.name, | |||||
this.desc, | |||||
this.title, | |||||
this.customFeaturesCate, | |||||
this.moduleType, | |||||
this.moduleKey, | |||||
this.isTopMargin, | |||||
this.isLeftRightMargin, | |||||
this.isShow, | |||||
this.topMargin, | |||||
this.leftRightMargin, | |||||
this.topLeftRadius, | |||||
this.topRightRadius, | |||||
this.bottomLeftRadius, | |||||
this.bottomRightRadius, | |||||
this.bgColor, | |||||
this.subTitle, | |||||
this.listStyle, | |||||
this.columSize}); | |||||
OrderClassStyle.fromJson(Map<String, dynamic> json) { | |||||
name = json['name']; | |||||
desc = json['desc']; | |||||
title = json['title']; | |||||
customFeaturesCate = json['custom_features_cate']; | |||||
moduleType = json['module_type']; | |||||
moduleKey = json['module_key']; | |||||
isTopMargin = json['is_top_margin']; | |||||
isLeftRightMargin = json['is_left_right_margin']; | |||||
isShow = json['is_show']; | |||||
topMargin = json['top_margin']; | |||||
leftRightMargin = json['left_right_margin']; | |||||
topLeftRadius = json['top_left_radius']; | |||||
topRightRadius = json['top_right_radius']; | |||||
bottomLeftRadius = json['bottom_left_radius']; | |||||
bottomRightRadius = json['bottom_right_radius']; | |||||
bgColor = json['bg_color']; | |||||
subTitle = json['sub_title']; | |||||
if (json['list_style'] != null) { | |||||
listStyle = new List<ListStyle>(); | |||||
json['list_style'].forEach((v) { | |||||
listStyle.add(new ListStyle.fromJson(v)); | |||||
}); | |||||
} | |||||
columSize = json['colum_size']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['name'] = this.name; | |||||
data['desc'] = this.desc; | |||||
data['title'] = this.title; | |||||
data['custom_features_cate'] = this.customFeaturesCate; | |||||
data['module_type'] = this.moduleType; | |||||
data['module_key'] = this.moduleKey; | |||||
data['is_top_margin'] = this.isTopMargin; | |||||
data['is_left_right_margin'] = this.isLeftRightMargin; | |||||
data['is_show'] = this.isShow; | |||||
data['top_margin'] = this.topMargin; | |||||
data['left_right_margin'] = this.leftRightMargin; | |||||
data['top_left_radius'] = this.topLeftRadius; | |||||
data['top_right_radius'] = this.topRightRadius; | |||||
data['bottom_left_radius'] = this.bottomLeftRadius; | |||||
data['bottom_right_radius'] = this.bottomRightRadius; | |||||
data['bg_color'] = this.bgColor; | |||||
data['sub_title'] = this.subTitle; | |||||
if (this.listStyle != null) { | |||||
data['list_style'] = this.listStyle.map((v) => v.toJson()).toList(); | |||||
} | |||||
data['colum_size'] = this.columSize; | |||||
return data; | |||||
} | |||||
} | |||||
class ListStyle { | |||||
String idx; | |||||
String title; | |||||
String img; | |||||
Data data; | |||||
String imgUrl; | |||||
String subTitle; | |||||
String isShow; | |||||
String rightIcon; | |||||
String rightIconUrl; | |||||
String skipIdentifier; | |||||
String requiredLogin; | |||||
String requiredTaobaoAuth; | |||||
String isJump; | |||||
String cateTag; | |||||
String skipName; | |||||
ListStyle( | |||||
{this.idx, | |||||
this.title, | |||||
this.img, | |||||
this.data, | |||||
this.imgUrl, | |||||
this.subTitle, | |||||
this.isShow, | |||||
this.rightIcon, | |||||
this.rightIconUrl, | |||||
this.skipIdentifier, | |||||
this.requiredLogin, | |||||
this.requiredTaobaoAuth, | |||||
this.isJump, | |||||
this.cateTag, | |||||
this.skipName}); | |||||
ListStyle.fromJson(Map<String, dynamic> json) { | |||||
idx = json['idx']; | |||||
title = json['title']; | |||||
img = json['img']; | |||||
data = json['data'] != null ? new Data.fromJson(json['data']) : null; | |||||
imgUrl = json['img_url']; | |||||
subTitle = json['sub_title']; | |||||
isShow = json['is_show']; | |||||
rightIcon = json['right_icon']; | |||||
rightIconUrl = json['right_icon_url']; | |||||
skipIdentifier = json['skip_identifier']; | |||||
requiredLogin = json['required_login']; | |||||
requiredTaobaoAuth = json['required_taobao_auth']; | |||||
isJump = json['is_jump']; | |||||
cateTag = json['cate_tag']; | |||||
skipName = json['skip_name']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['idx'] = this.idx; | |||||
data['title'] = this.title; | |||||
data['img'] = this.img; | |||||
if (this.data != null) { | |||||
data['data'] = this.data.toJson(); | |||||
} | |||||
data['img_url'] = this.imgUrl; | |||||
data['sub_title'] = this.subTitle; | |||||
data['is_show'] = this.isShow; | |||||
data['right_icon'] = this.rightIcon; | |||||
data['right_icon_url'] = this.rightIconUrl; | |||||
data['skip_identifier'] = this.skipIdentifier; | |||||
data['required_login'] = this.requiredLogin; | |||||
data['required_taobao_auth'] = this.requiredTaobaoAuth; | |||||
data['is_jump'] = this.isJump; | |||||
data['cate_tag'] = this.cateTag; | |||||
data['skip_name'] = this.skipName; | |||||
return data; | |||||
} | |||||
} | |||||
class Data { | |||||
String sourceType; | |||||
Data({this.sourceType}); | |||||
Data.fromJson(Map<String, dynamic> json) { | |||||
sourceType = json['source_type']; | |||||
} | |||||
Map<String, dynamic> toJson() { | |||||
final Map<String, dynamic> data = new Map<String, dynamic>(); | |||||
data['source_type'] = this.sourceType; | |||||
return data; | |||||
} | |||||
} |
@@ -13,6 +13,7 @@ export 'package:amap_flutter_location/amap_flutter_location.dart'; | |||||
export 'package:amap_flutter_location/amap_location_option.dart'; | export 'package:amap_flutter_location/amap_location_option.dart'; | ||||
export 'package:tab_indicator_styler/tab_indicator_styler.dart'; | export 'package:tab_indicator_styler/tab_indicator_styler.dart'; | ||||
export 'package:zhiying_base_widget/dialog/global_dialog/notification_setting_dialog/notification_setting_dialog.dart'; | export 'package:zhiying_base_widget/dialog/global_dialog/notification_setting_dialog/notification_setting_dialog.dart'; | ||||
export 'pages/order_found_page/order_found_search_page/order_found_search_page.dart'; | |||||
class ZhiyingBaseWidget { | class ZhiyingBaseWidget { | ||||
static const MethodChannel _channel = const MethodChannel('zhiying_base_widget'); | static const MethodChannel _channel = const MethodChannel('zhiying_base_widget'); | ||||
@@ -39,8 +39,8 @@ dependencies: | |||||
# image_gallery_saver: ^1.6.0 | # image_gallery_saver: ^1.6.0 | ||||
permission_handler: | permission_handler: | ||||
git: | git: | ||||
ref: 0.0.2 | |||||
url: http://192.168.0.138:3000/FnuoOS_Flutter_Components/permission_handler.git | url: http://192.168.0.138:3000/FnuoOS_Flutter_Components/permission_handler.git | ||||
ref: 0.0.2 | |||||
more_picture_share: | more_picture_share: | ||||
git: | git: | ||||
@@ -63,8 +63,8 @@ dependencies: | |||||
zhiying_flutter_webview: | zhiying_flutter_webview: | ||||
git: | git: | ||||
ref: 0.0.4 | |||||
url: http://192.168.0.138:3000/FnuoOS_ZhiYing/zhiying_flutter_webview.git | url: http://192.168.0.138:3000/FnuoOS_ZhiYing/zhiying_flutter_webview.git | ||||
ref: 0.0.4 | |||||
# 特效底部 | # 特效底部 | ||||
# convex_bottom_bar: ^2.7.1+2 | # convex_bottom_bar: ^2.7.1+2 | ||||