import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:kefu_flutter/models/work_order.dart'; import 'package:kefu_flutter/models/work_order_type.dart'; import 'package:kefu_flutter/utils/im_utils.dart'; import '../kefu_flutter.dart'; import 'create.dart'; import 'detail.dart'; class WorkOrder extends StatefulWidget { @override _WorkOrderState createState() => _WorkOrderState(); } class _WorkOrderState extends State<WorkOrder> { KeFuStore keFuStore; List<WorkOrderModel> workOrders = []; List<WorkOrderTypeModel> get workOrderTypes { try { return keFuStore.workOrderTypes; } catch (_) { return []; } } @override void initState() { super.initState(); if (mounted) { keFuStore = KeFuStore.getInstance; if (keFuStore.workOrderTypes.length == 0) { keFuStore.getWorkOrderTypes(); } _initData(); } } // init data void _initData() async { await _getWorkOrders(); } // GET workorders Future<void> _getWorkOrders() async { if (keFuStore == null) { debugPrint("keFuStore is not instance"); return; } Response res = await keFuStore.http.get('/public/workorders'); if (res.data['code'] == 200) { workOrders = (res.data['data'] as List) .map((i) => WorkOrderModel.fromJson(i)) .toList(); setState(() {}); } } // _goToCreateWprkOrder void _goToCreateWprkOrder(BuildContext context) { Navigator.push( context, MaterialPageRoute(builder: (context) => CreateWorkOrder())) .then((_) { _getWorkOrders(); }); } // _goToWprkOrderDetail void _goToWprkOrderDetail(BuildContext context, int wid) { Navigator.push(context, MaterialPageRoute(builder: (context) => WorkOrderDetail(wid))) .then((_) { _getWorkOrders(); }); } String _getTypeTitle(int tid) { return workOrderTypes.where((item) => item.id == tid).first.title; } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( centerTitle: true, title: Text("我的工单"), actions: <Widget>[ FlatButton( child: Text( "创建工单", style: TextStyle(color: Colors.white), ), onPressed: () => _goToCreateWprkOrder(context), ) ], ), body: CustomScrollView( slivers: <Widget>[ workOrders.length <= 0 ? SliverToBoxAdapter( child: Padding( padding: EdgeInsets.symmetric(vertical: 30.0), child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ Icon( Icons.library_books, color: Colors.black26, size: 50, ), Padding( padding: EdgeInsets.symmetric(vertical: 10.0), child: Text( "暂无相关数据~", style: TextStyle(color: Colors.grey, fontSize: 14.0), ), ), ], ), ), ) : SliverList( delegate: SliverChildBuilderDelegate((ctx, index) { var workOrder = workOrders[index]; return Column( children: <Widget>[ ListTile( onTap: () => _goToWprkOrderDetail(context, workOrder.id), title: DefaultTextStyle( style: TextStyle( fontSize: 14.0, color: Colors.black87.withAlpha(180)), child: Row( children: <Widget>[ Icon( Icons.library_books, color: Colors.black26, size: 25, ), VerticalDivider( width: 5.0, color: Colors.transparent), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Text( "${workOrder.title}", maxLines: 2, overflow: TextOverflow.ellipsis, ), DefaultTextStyle( style: TextStyle( color: Colors.black45, fontSize: 12.0), child: Row( children: <Widget>[ Text( "${_getTypeTitle(workOrder.tid)} "), Text( " ${ImUtils.formatDate(workOrder.createAt, isformatFull: true)}"), ], )) ], ), ), VerticalDivider( color: Colors.transparent, width: 10.0, ), Text( workOrder.status == 2 ? "已回复" : workOrder.status == 3 ? "已结束" : workOrder.status == 0 ? "待处理" : workOrder.status == 1 ? "待回复" : "未知状态", style: TextStyle( color: workOrder.status == 2 ? Color(0XFF8bc34a) : workOrder.status == 3 ? Color(0XFFcccCCC) : workOrder.status == 0 ? Color(0XFFFF9800) : workOrder.status == 1 ? Color(0XFFFF9800) : Colors.amber, fontSize: 12.0), ) ], )), ), Padding( padding: EdgeInsets.symmetric(horizontal: 10.0), child: Divider( height: 0.5, ), ) ], ); }, childCount: workOrders.length)) ], ), ); } }