@@ -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,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 | |||||
} | |||||
} |
@@ -1,7 +1,9 @@ | |||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:zhiying_base_widget/widgets/custom/ordedr_found/order_found_nav/order_found_nav.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 'package:zhiying_comm/zhiying_comm.dart'; | ||||
import 'model/order_found_search_style.dart'; | |||||
///订单搜索页 | ///订单搜索页 | ||||
class OrderFoundSearchPage extends StatefulWidget { | class OrderFoundSearchPage extends StatefulWidget { | ||||
@override | @override | ||||
@@ -9,29 +11,60 @@ class OrderFoundSearchPage extends StatefulWidget { | |||||
} | } | ||||
class _OrderFoundSearchPageState extends State<OrderFoundSearchPage> { | class _OrderFoundSearchPageState extends State<OrderFoundSearchPage> { | ||||
OrderFoundSearchBloc _bloc; | |||||
OrderFoundSearchStyle style; | |||||
TextEditingController textEditingController; | |||||
@override | |||||
void initState() { | |||||
textEditingController = TextEditingController(); | |||||
_bloc = OrderFoundSearchBloc(); | |||||
_bloc.loadStyle(); | |||||
super.initState(); | |||||
} | |||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
return Stack( | |||||
children: [ | |||||
Scaffold( | |||||
appBar: _buildAppBar(), | |||||
body: Container( | |||||
child: ListView( | |||||
children: [ | |||||
_buildSearch(), | |||||
_buildCenter(), | |||||
_buildBottom(), | |||||
_buildTest() | |||||
], | |||||
), | |||||
), | |||||
), | |||||
], | |||||
); | |||||
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() { | _buildAppBar() { | ||||
return AppBar( | return AppBar( | ||||
backgroundColor: Colors.transparent, | |||||
elevation: 0, | |||||
leading: Navigator.canPop(context) | leading: Navigator.canPop(context) | ||||
? IconButton( | ? IconButton( | ||||
icon: Icon( | icon: Icon( | ||||
@@ -43,11 +76,20 @@ class _OrderFoundSearchPageState extends State<OrderFoundSearchPage> { | |||||
}) | }) | ||||
: Container(), | : Container(), | ||||
title: Text( | title: Text( | ||||
"订单查询", | |||||
style: TextStyle(fontSize: 17), | |||||
style?.top?.str ?? '', | |||||
style: TextStyle(fontSize: 17, color: HexColor.fromHex(style?.top?.strColor)), | |||||
), | ), | ||||
centerTitle: true, | centerTitle: true, | ||||
actions: [IconButton(icon: Icon(Icons.refresh), onPressed: () {})], | |||||
actions: [ | |||||
IconButton( | |||||
icon: Icon( | |||||
Icons.refresh, | |||||
color: HexColor.fromHex(style?.top?.strColor), | |||||
), | |||||
onPressed: () { | |||||
_bloc?.loadStyle(); | |||||
}) | |||||
], | |||||
); | ); | ||||
} | } | ||||
@@ -55,23 +97,43 @@ class _OrderFoundSearchPageState extends State<OrderFoundSearchPage> { | |||||
_buildSearch() { | _buildSearch() { | ||||
return Container( | return Container( | ||||
height: 50, | height: 50, | ||||
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10), border: Border.all(color: Colors.white)), | |||||
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), | margin: EdgeInsets.only(left: 10, right: 10, top: 10, bottom: 10), | ||||
padding: EdgeInsets.only(left: 10, right: 4), | padding: EdgeInsets.only(left: 10, right: 4), | ||||
child: Row( | child: Row( | ||||
children: [ | children: [ | ||||
Expanded( | Expanded( | ||||
child: TextField( | child: TextField( | ||||
decoration: InputDecoration(border: InputBorder.none, hintText: "请输入或粘粘淘宝订单编号", hintStyle: TextStyle(color: HexColor.fromHex("#999999"), fontSize: 14), isDense: true), | |||||
controller: textEditingController, | |||||
decoration: InputDecoration( | |||||
border: InputBorder.none, | |||||
hintText: style?.searchCss?.str ?? '', | |||||
hintStyle: TextStyle(color: HexColor.fromHex(style?.searchCss?.strColor ?? ""), fontSize: 14), | |||||
isDense: true), | |||||
)), | )), | ||||
Container( | |||||
height: 42, | |||||
alignment: Alignment.center, | |||||
padding: EdgeInsets.only(left: 24, right: 24), | |||||
decoration: BoxDecoration(color: HexColor.fromHex("#FF2020"), borderRadius: BorderRadius.circular(10)), | |||||
child: Text( | |||||
"搜索", | |||||
style: TextStyle(color: HexColor.fromHex("#FFFFFF")), | |||||
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 ?? "")), | |||||
), | |||||
), | ), | ||||
), | ), | ||||
], | ], | ||||
@@ -95,7 +157,7 @@ class _OrderFoundSearchPageState extends State<OrderFoundSearchPage> { | |||||
margin: EdgeInsets.only(right: 10), | margin: EdgeInsets.only(right: 10), | ||||
), | ), | ||||
Text( | Text( | ||||
"如何获取订单编号?", | |||||
style?.ruleCss?.str ?? "", | |||||
style: TextStyle(color: HexColor.fromHex("#333333"), fontSize: 15, fontWeight: FontWeight.w500), | style: TextStyle(color: HexColor.fromHex("#333333"), fontSize: 15, fontWeight: FontWeight.w500), | ||||
) | ) | ||||
], | ], | ||||
@@ -103,9 +165,14 @@ class _OrderFoundSearchPageState extends State<OrderFoundSearchPage> { | |||||
SizedBox( | SizedBox( | ||||
height: 16, | height: 16, | ||||
), | ), | ||||
CachedNetworkImage( | |||||
imageUrl: "https://alipic.lanhuapp.com/SketchPng9ae52da74764fe05917a1d5a4a8d5eb94a9013106c4412056afa00340164bde5", | |||||
fit: BoxFit.fitWidth, | |||||
GestureDetector( | |||||
onTap: () { | |||||
PhotoPreview.showPhotoPreviewByimages(context, [style?.ruleCss?.img ?? ""]); | |||||
}, | |||||
child: CachedNetworkImage( | |||||
imageUrl: style?.ruleCss?.img ?? '', | |||||
fit: BoxFit.fitWidth, | |||||
), | |||||
) | ) | ||||
], | ], | ||||
), | ), | ||||
@@ -128,7 +195,7 @@ class _OrderFoundSearchPageState extends State<OrderFoundSearchPage> { | |||||
decoration: BoxDecoration(color: HexColor.fromHex("#FF2020"), borderRadius: BorderRadius.circular(10)), | decoration: BoxDecoration(color: HexColor.fromHex("#FF2020"), borderRadius: BorderRadius.circular(10)), | ||||
), | ), | ||||
Text( | Text( | ||||
"查询规则?", | |||||
style?.findRuleCss?.title ?? '', | |||||
style: TextStyle(color: HexColor.fromHex("#333333"), fontSize: 15, fontWeight: FontWeight.w500), | style: TextStyle(color: HexColor.fromHex("#333333"), fontSize: 15, fontWeight: FontWeight.w500), | ||||
) | ) | ||||
], | ], | ||||
@@ -141,16 +208,7 @@ class _OrderFoundSearchPageState extends State<OrderFoundSearchPage> { | |||||
physics: NeverScrollableScrollPhysics(), | physics: NeverScrollableScrollPhysics(), | ||||
children: [ | children: [ | ||||
Text( | Text( | ||||
''' | |||||
1.购买人没同步的订单可通过订单查询找回; | |||||
2.当查找人查找到订单,并且该订单在订单库确实找不到归 | |||||
属时,该订单归属到查找人; | |||||
3.当有多个用户输入同一订单号,以第一个输入人为准; | |||||
4.已归属的订单不支持继续查询; | |||||
5.建议购买人自查,运营商帮助超级会员查询时,不要点击 | |||||
确认找回,可让购买人自查并找回; | |||||
6.收益将按查找人的当前的用户关系进行归属。 | |||||
''', | |||||
style?.findRuleCss?.content ?? "", | |||||
style: TextStyle(color: HexColor.fromHex("#999999"), fontSize: 12, fontWeight: FontWeight.w500), | style: TextStyle(color: HexColor.fromHex("#999999"), fontSize: 12, fontWeight: FontWeight.w500), | ||||
) | ) | ||||
], | ], | ||||
@@ -160,7 +218,4 @@ class _OrderFoundSearchPageState extends State<OrderFoundSearchPage> { | |||||
); | ); | ||||
} | } | ||||
_buildTest() { | |||||
return OrderFoundNav(); | |||||
} | |||||
} | } |
@@ -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; | |||||
} | |||||
} |
@@ -1,90 +0,0 @@ | |||||
import 'package:flutter/material.dart'; | |||||
import 'package:zhiying_comm/util/extension/color.dart'; | |||||
import 'package:zhiying_comm/zhiying_comm.dart'; | |||||
class OrderFoundNav extends StatelessWidget { | |||||
@override | |||||
Widget build(BuildContext context) { | |||||
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( | |||||
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: TextStyle(color: HexColor.fromHex("#333333"), fontSize: 15, fontWeight: FontWeight.w500), | |||||
) | |||||
], | |||||
), | |||||
Padding( | |||||
padding: const EdgeInsets.only(left: 15), | |||||
child: Text( | |||||
"美图、饿了么、权益等", | |||||
style: TextStyle(color: HexColor.fromHex("#999999"), fontSize: 12, fontWeight: FontWeight.w500), | |||||
), | |||||
), | |||||
SizedBox( | |||||
height: 10, | |||||
), | |||||
createNav() | |||||
], | |||||
), | |||||
); | |||||
} | |||||
createNav() { | |||||
List<Widget> listWidget = List(); | |||||
for (var index = 0; index < 2; index++) { | |||||
listWidget.add(Row( | |||||
children: _buildRow(index), | |||||
)); | |||||
} | |||||
return Column(children: listWidget); | |||||
} | |||||
_buildRow(int index2) { | |||||
List<Widget> listWidget = List(); | |||||
for (var index = 0; index < 5; index++) { | |||||
listWidget.add(Expanded( | |||||
child: _buildItem(), | |||||
)); | |||||
} | |||||
return listWidget; | |||||
} | |||||
_buildItem() { | |||||
return Container( | |||||
margin: EdgeInsets.only(top: 10), | |||||
child: Column( | |||||
children: [ | |||||
CachedNetworkImage( | |||||
imageUrl: "https://alipic.lanhuapp.com/SketchPngcc0450a94dea814bcb680581f96ff1646a8b4f7c00a496f21e808f6c3dbfebe1", | |||||
width: 40, | |||||
height: 40, | |||||
), | |||||
SizedBox( | |||||
height: 6, | |||||
), | |||||
Text( | |||||
"苏宁", | |||||
style: TextStyle(color: HexColor.fromHex("#333333"), fontSize: 12), | |||||
), | |||||
], | |||||
), | |||||
); | |||||
} | |||||
} |