import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:liftmanager/internal/bbs/model/liftcase_model.dart'; import 'package:liftmanager/internal/search/presenter/base_list_provider.dart'; import 'package:liftmanager/internal/wode/order_const.dart'; import 'package:liftmanager/internal/wode/presenter/order_list_presenter.dart'; import 'package:liftmanager/internal/wode/wode_router.dart'; import 'package:liftmanager/mvp/base_page_state.dart'; import 'package:liftmanager/res/colors.dart'; import 'package:liftmanager/routers/fluro_navigator.dart'; import 'package:liftmanager/utils/time_format.dart'; import 'package:liftmanager/widgets/app_bar.dart'; import 'package:liftmanager/widgets/load_image.dart'; import 'package:liftmanager/widgets/my_refresh_list.dart'; import 'package:liftmanager/widgets/state_layout.dart'; import 'package:provider/provider.dart'; import 'package:umeng_common_sdk/umeng_common_sdk.dart'; class OrderPage extends StatefulWidget { OrderPage(this.checkType); String checkType; int tabCheckIndex = 0; @override OrderPageState createState() => OrderPageState(); } class OrderPageState extends BasePageState { BaseListProvider provider = BaseListProvider(); int _page = 1; ScrollController _scrollController = new ScrollController(); @override void dispose() { UmengCommonSdk.onPageEnd("我的订单"); _scrollController.dispose(); super.dispose(); } @override void initState() { UmengCommonSdk.onPageStart("我的订单"); if (widget.checkType.isNotEmpty && widget.checkType != null) { widget.tabCheckIndex = int.parse(widget.checkType); } provider.setStateTypeNotNotify(StateType.loading); super.initState(); _onRefresh(); } @override Widget build(BuildContext context) { double width = MediaQuery.of(context).size.width; return WillPopScope( // ignore: missing_return onWillPop: () { Navigator.popUntil(context, ModalRoute.withName('/home')); }, child: ChangeNotifierProvider>( create: (_) => provider, child: Scaffold( appBar: MyAppBar( centerTitle: "我的订单", isFun: true, fun: () { Navigator.popUntil(context, ModalRoute.withName('/home')); }, actions: [], ), body: Container( child: Stack( children: [ Container( padding: EdgeInsets.only(top: ScreenUtil().setWidth(44)), child: Column( children: [ Expanded( flex: 1, child: Consumer>( builder: (_, provider, __) { return MyListView( key: Key('order_list'), itemCount: provider.list.length, stateType: provider.stateType, onRefresh: _onRefresh, loadMore: _loadMore, hasMore: provider.hasMore, itemBuilder: (_, index) { return OrderListItemWidget( data: provider.list[index], typeValue: OrderConstant .userOrderType[widget.tabCheckIndex] ['value']); }, ); }, ), ) ], ), ), Positioned( child: Container( padding: EdgeInsets.only(bottom: 5), // color:Color(0xffFAF7FA), decoration: BoxDecoration( border: Border( bottom: BorderSide(width: 0.5, color: Color(0xffeeeeee)), ), // color: Color(0xff9FD1FE), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: OrderConstant.userOrderType.asMap().keys.map((i) { return TabThis( item: OrderConstant.userOrderType[i]['name'], tabIndex: i, checkIndex: widget.tabCheckIndex, fun: (index) { setState(() { widget.tabCheckIndex = index; provider.list.clear(); _onRefresh(); }); }, ); }).toList(), ), ), ), ], ), ), ), ), ); } Future _onRefresh() async { _page = 1; await presenter.getOrderList( _page, OrderConstant.userOrderType[widget.tabCheckIndex]['value']); } Future _loadMore() async { _page++; await presenter.getOrderList( _page, OrderConstant.userOrderType[widget.tabCheckIndex]['value']); } @override OrderListPresenterSeconds createPresenter() { return OrderListPresenterSeconds(); } } class TabThis extends StatelessWidget { TabThis({Key key, this.item, this.tabIndex, this.fun, this.checkIndex}) : super(key: key); String item; int tabIndex; int checkIndex; Function fun; @override Widget build(BuildContext context) { return Container( padding: EdgeInsets.only(top: ScreenUtil().setWidth(10)), child: Container( child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ GestureDetector( onTap: () { fun(tabIndex); }, child: Container( padding: EdgeInsets.only(bottom: 6), decoration: BoxDecoration( border: Border( bottom: BorderSide( width: 2, color: checkIndex == tabIndex ? Color(0xff02A0FD) : Colors.transparent), ), // color: Color(0xff9FD1FE), ), child: Text( item, style: TextStyle( color: checkIndex == tabIndex ? Color(0xff02A0FD) : Color(0xff666666), fontSize: ScreenUtil().setSp(14), ), textAlign: TextAlign.center, ), ), ) ], ), ), ); } } class OrderListItemWidget extends StatelessWidget { OrderListItemWidget({Key key, this.data, this.typeValue}) : super(key: key); LiftCasesDetailModel data; String typeValue; getTypeValue(liftCaseAppealStatus) { String str; if (liftCaseAppealStatus == 1) { str = "申诉中"; } else if (liftCaseAppealStatus == 2) { str = "申诉驳回"; } else if (liftCaseAppealStatus == 3) { str = "申诉已结束"; } else if (liftCaseAppealStatus == 4) { str = "申诉已退款"; } return str; } @override Widget build(BuildContext context) { double width = MediaQuery.of(context).size.width; return Container( padding: EdgeInsets.only(top: ScreenUtil().setWidth(10)), width: width, // height: 100, child: GestureDetector( onTap: () { NavigatorUtils.push( context, "${WodeRouter.orderDetail}?id=${data.id}"); }, child: Row( crossAxisAlignment: CrossAxisAlignment.start, // mainAxisSize: MainAxisSize.min, children: [ ClipRRect( borderRadius: BorderRadius.circular(20), child: Container( margin: EdgeInsets.only( left: ScreenUtil().setWidth(10), right: ScreenUtil().setWidth(10), top: ScreenUtil().setWidth(0)), // decoration: BoxDecoration( // borderRadius: BorderRadius.circular(ScreenUtil().setWidth(22)), // ), child: LoadNetworkImage( data.avatarUrl, width: ScreenUtil().setWidth(43), height: ScreenUtil().setWidth(43), // alignment: Alignment.centerLeft, ), ), ), Expanded( // flex: 1, // fit: FlexFit.loose, child: Container( padding: EdgeInsets.only(right: ScreenUtil().setWidth(15)), child: Column( children: [ Container( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( data.name ?? "小小修理工", style: TextStyle( color: Color(0xff333333), fontSize: ScreenUtil().setSp(17)), textAlign: TextAlign.start, ), Container( decoration: BoxDecoration( //背景 color: data.dataTable == 1 ? Colours.blue_app_main : Color(0xffFDAF2C), //设置四周圆角 角度 borderRadius: BorderRadius.all(Radius.circular(4.0)), ), margin: EdgeInsets.only(left: 5), padding: EdgeInsets.only( left: 5, right: 5, top: 0, bottom: 0), child: Text( data.dataTable == 1 ? '问诊服务' : '出诊服务', style: TextStyle( color: Colors.white, fontSize: ScreenUtil().setSp(14), ), textAlign: TextAlign.start, ), ) ], ), typeValue != "TO_APPEAL" ? Container( child: Text( OrderConstant.getStatusName( data.statuz, data.dataTable, arrivedFlag: data.arrivedFlag, userType: 'USER'), style: TextStyle( color: data.dataTable != 1 ? Color(0xffF84203) : Color(0xff0288FF), fontSize: ScreenUtil().setSp(14), ), textAlign: TextAlign.end, ), ) : Container( child: Text( data.liftCaseAppealStatus != null ? getTypeValue( data.liftCaseAppealStatus) : "", style: TextStyle( color: Color(0xff0288FF), fontSize: ScreenUtil().setSp(14), ), textAlign: TextAlign.end, ), ) ], ), ), Container( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( data.createTime != null ? DateUtils.instance.getFormartData( timeSamp: data.createTime, format: "MM月dd日") : '', style: TextStyle( color: Color(0xff999999), fontSize: ScreenUtil().setSp(13), ), textAlign: TextAlign.start, ), Container( padding: EdgeInsets.only(left: 5), child: Text( data.brandName ?? '', style: TextStyle( color: Colours.blue_app_main, fontSize: ScreenUtil().setSp(13), ), textAlign: TextAlign.start, ), ) ], ), ], ), ), data.dataTable != 1 ? Container( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( // padding: EdgeInsets.only(left: 5), child: Text( '出诊时间:', style: TextStyle( color: Color(0xff999999), fontSize: ScreenUtil().setSp(13), ), textAlign: TextAlign.start, ), ), Text( data.arrivedTime != null ? DateUtils.instance.getFormartData( timeSamp: data.arrivedTime, format: "MM月dd日 HH:mm") : '', style: TextStyle( color: Color(0xff666666), fontSize: ScreenUtil().setSp(13), ), textAlign: TextAlign.start, ), ], ), ], ), ) : Container(), data.dataTable != 1 ? Container( // margin: EdgeInsets.only(top: 6), child: Row( children: [ Container( // padding: EdgeInsets.only(left: 5), child: Text( '出诊地点:', style: TextStyle( color: Color(0xff999999), fontSize: ScreenUtil().setSp(13), ), textAlign: TextAlign.start, ), ), Container( width: ScreenUtil().setWidth(230), child: Text( '${data.address ?? ''}', style: TextStyle( color: Color(0xff666666), fontSize: ScreenUtil().setSp(13), // color: Color(0xff666666), // fontSize: ScreenUtil().setSp(15), ), textAlign: TextAlign.start, maxLines: 1, overflow: TextOverflow.ellipsis, ), ), ], ), ) : Container(), Container( // margin: EdgeInsets.only(top: 6), child: Row( children: [ Container( // padding: EdgeInsets.only(left: 5), child: Text( '问题描述:', style: TextStyle( color: Color(0xff999999), fontSize: ScreenUtil().setSp(13), ), textAlign: TextAlign.start, ), ), Container( width: ScreenUtil().setWidth(230), child: Text( '${data.expression ?? ''}', style: TextStyle( color: Color(0xff666666), fontSize: ScreenUtil().setSp(13), // color: Color(0xff666666), // fontSize: ScreenUtil().setSp(15), ), textAlign: TextAlign.start, maxLines: 1, overflow: TextOverflow.ellipsis, ), ), ], ), ), Container( margin: EdgeInsets.only(top: 6), child: Row( children: [ Container( padding: EdgeInsets.only(right: 5), child: Text( data.totalCost != null ? "¥${data.totalCost.toString()}" : '', style: TextStyle( color: Color(0xffFD0808), fontSize: ScreenUtil().setSp(15), ), textAlign: TextAlign.left, ), ), ], ), ) ], ), ), ) ], ), ), ); } }