import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'my_page/revise_password_page.dart'; import 'package:flutter_picker/flutter_picker.dart'; import '../util/bluetooth_utils.dart'; import '../showDialog.dart'; import '../login_page.dart'; import '../util/api.dart'; import '../util/models.dart'; import '../util/session.dart'; import '../util/util.dart'; class MyPage extends StatefulWidget { final Widget child; MyPage({ Key key, this.child }): super(key: key); _MyPageState createState() => _MyPageState(); } class _MyPageState extends State < MyPage > with AutomaticKeepAliveClientMixin { bool check = false; String _siteName = "请选择站点"; List < String > stationList = []; Station stationObj; String name = '物流'; BluetoothUtils bluetooth = BluetoothUtils(); List < BtInfoObj > btList = []; Set btSet = Set(); bool btLinkStatus = false; List printTypeList = ["全部", "发件方", "收件方", "物流公司", "货物", "货物外", "不打印"]; static var printTypeMap = { "全部": "1", "发件方": "2", "收件方": "3", "物流公司": "4", "货物": "5", "货物外": "6", "不打印": "7", }; static var printTypeMapSecond = { "1": "全部", "2": "发件方", "3": "收件方", "4": "物流公司", "5": "货物", "6": "货物外", "7": "不打印", }; String printType = '全部'; @override bool get wantKeepAlive => true; @override void initState() { btList.clear(); btSet.clear(); super.initState(); getStationList().then((resp) { if (isNotError(context, resp) && this.mounted) { stationObj = Station.fromJson(resp.data); getKey('stationId').then((value) { List < String > tempList = []; for (int i = 0; i < stationObj.data.length; i++) { tempList.add(stationObj.data[i].name.toString()); if (stationObj.data[i].id.toString() == value) { _siteName = stationObj.data[i].name.toString(); } } getKey('nickName').then((value) { setState(() { stationList = tempList; name = value; }); }); getKey('printType').then((value) { printType = printTypeMapSecond[value]; }); }); } }); bluetooth.getEchannel().receiveBroadcastStream().listen(onEvent, onError: onError); getKey('check').then((value) { if (value == null) { setState(() { check = false; }); } else if (value == 'false') { setState(() { check = false; }); } else if (value == 'true') { setState(() { check = true; }); } }); getKey('btList').then((value) { print(value); if (value != '' && check == true) { List tempList = []; for (int i = 0; i < 999; i++) { if (value.indexOf('&') != -1) { int index = value.indexOf('&'); tempList.add(value.substring(0, index)); value = value.substring(index + 1, value.length); } else { break; } } getKey('checkedBt').then((value){ print(value); for (int i = 0; i < tempList.length; i++) { BtInfoObj tempObj; if(value!=null && value==i.toString()){ tempObj = BtInfoObj(name: tempList[i], showLoadStauts: false, connectStatus: true); }else{ tempObj = BtInfoObj(name: tempList[i], showLoadStauts: false, connectStatus: false); } setState(() { btList.add(tempObj); }); } }); } }); } onEvent(Object obj) { print('进入onEvent回调${obj}'); if (obj.toString().indexOf('||') != -1) { //过滤开始搜索和结束搜索 if(obj.toString().indexOf('DISCAONNECTED')!=-1){//当上一个连接断开后,将连接的蓝牙动画状态关闭 print('**************DISCAONNECTED***************'); for(int i=0;i tempBtList2 = []; for (int i = 0; i < tempBtList.length; i++) { tempBtList2.add( BtInfoObj(name: tempBtList[i], showLoadStauts: false, connectStatus: false) ); } setState(() { btList =tempBtList2; }); String tempStr = ''; for (int i = 0; i < btList.length; i++) { tempStr += '${btList[i].name}&'; } print(tempStr); setKey('btList', tempStr); } } } onError(Object obj) { print(obj.toString()); } @override Widget build(BuildContext context) { return Container( child: Scaffold( appBar: AppBar( elevation: 0, title: Text('我的', style: TextStyle( fontSize: ScreenUtil.getInstance().setSp(36) ), ), centerTitle: true, backgroundColor: Color.fromRGBO(64, 98, 254, 1), actions: < Widget > [ InkWell( child: Container( padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(30)), child: Center( child: Text('退出'), ) ), onTap: () { showDialog < Null > ( context: context, //BuildContext对象 barrierDismissible: false, builder: (BuildContext context) { return new LoadingDialog( //调用对话框 text: '确认退出?', childCallback: (val) { if (val) { clearKey(); Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) { return LoginPage(); })); } else { return; } }, ); }); }, ) ], ), body: Container( color: Color.fromRGBO(246, 246, 254, 1), child: Column( children: < Widget > [ _avatarWidget(), _funWrapWidget(context), ], ), ), ) ); } Widget _avatarWidget() { return Container( color: Color.fromRGBO(64, 98, 254, 1), padding: EdgeInsets.fromLTRB(0, ScreenUtil.getInstance().setHeight(59), 0, ScreenUtil.getInstance().setHeight(67), ), child: Column( children: < Widget > [ Center( child: Padding( padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setWidth(24), ), child: ClipOval( child: Image.asset('lib/images/icon_logo.png', fit: BoxFit.cover, width: ScreenUtil.getInstance().setWidth(120), height: ScreenUtil.getInstance().setWidth(120), ), ) ) ), Center(child: Text(name, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(255, 255, 255, 1)), ), ) ], ), ); } Widget _funWrapWidget(BuildContext context) { return Container( padding: EdgeInsets.only(top: ScreenUtil.getInstance().setHeight(20)), child: Column( children: < Widget > [ _switchSite(context), _passWordWidget(), _linkPrint(), _printType(), _btList() ], ), ); } Widget _switchSite(BuildContext context) { return InkWell( child: Container( height: ScreenUtil.getInstance().setHeight(90), color: Colors.white, padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setHeight(30), 0, 0, 0), child: Column( children: < Widget > [ Expanded( child: Center( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: < Widget > [ Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: < Widget > [ Padding( padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(22)), child: Image.asset('lib/images/icon_zhandianss.png', width: ScreenUtil.getInstance().setWidth(30), height: ScreenUtil.getInstance().setHeight(34), ) ), Text('站点切换', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ), ], ), ), Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.end, children: < Widget > [ Text(_siteName, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(153, 153, 153, 1)), ), Icon(Icons.keyboard_arrow_right, color: Color.fromRGBO(199, 199, 204, 1)) ], ), ), ], ), ), ), Expanded( flex: 0, child: _underLine(), ) ], ) ), onTap: () { // showDialog < Null > ( // context: context, //BuildContext对象 // barrierDismissible: false, // builder: (BuildContext context) { // return SiteDialog( //调用对话框 // ); // }); showPickerModal(context, 'station'); }, ); } showPickerModal(BuildContext context, String type) { var list; if (type == 'station') { list = stationList; } else if (type == 'printType') { list = printTypeList; } new Picker( adapter: PickerDataAdapter < String > (pickerdata: list), height: ScreenUtil.getInstance().setHeight(450), confirmText: '确定', confirmTextStyle: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(64, 98, 254, 1)), cancelText: '取消', cancelTextStyle: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(153, 153, 153, 1)), headercolor: Color.fromRGBO(245, 245, 245, 1), itemExtent: ScreenUtil.getInstance().setHeight(80), textStyle: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(42, 42, 42, 1)), changeToFirst: true, hideHeader: false, onConfirm: (Picker picker, List value) { if (type == 'station') { setState(() { _siteName = stationObj.data[value[0]].name; }); setKey('stationId', stationObj.data[value[0]].id.toString()); setKey('stationName',stationObj.data[value[0]].name); } else if (type == "printType") { setState(() { printType = printTypeList[value[0]]; }); setKey('printType', printTypeMap[printTypeList[value[0]]]); getKey('printType').then((value) { print(value); }); } } ).showModal(this.context); //_scaffoldKey.currentState); } Widget _underLine() { return Container( height: ScreenUtil.getInstance().setHeight(1), color: Color.fromRGBO(223, 223, 223, 1), ); } Widget _passWordWidget() { return GestureDetector( child: Container( height: ScreenUtil.getInstance().setHeight(90), color: Colors.white, padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setHeight(30), 0, 0, 0), child: Column( children: < Widget > [ Expanded( child: Center( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: < Widget > [ Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: < Widget > [ Padding( padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(22)), child: Image.asset('lib/images/icon_mimas.png', width: ScreenUtil.getInstance().setWidth(30), height: ScreenUtil.getInstance().setHeight(34), ) ), Text('修改密码', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ), ], ), ), Icon(Icons.keyboard_arrow_right, color: Color.fromRGBO(199, 199, 204, 1)) ], ), ), ) ], ) ), onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) { return RevisePasswordPage(); })); }, ); } Widget _linkPrint() { return Container( height: ScreenUtil.getInstance().setHeight(90), color: Colors.white, padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setHeight(30), 0, 0, 0), margin: EdgeInsets.only(top: ScreenUtil.getInstance().setHeight(20)), child: Column( children: < Widget > [ Expanded( child: Center( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: < Widget > [ Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: < Widget > [ Padding( padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(22)), child: Image.asset('lib/images/icon_dayinji.png', width: ScreenUtil.getInstance().setWidth(30), height: ScreenUtil.getInstance().setHeight(34), ) ), Text('打印机连接', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ), ], ), ), Switch( value: check, activeColor: Colors.blue, onChanged: (bool val) { if (val) { bluetooth.isBTDevice().then((resp) { if (resp) { bluetooth.isEnableBluetooth().then((bool resp) { //打开蓝牙 bluetooth.enableBluetooth().then((resp){ setState(() { check = true; btLinkStatus = false; }); setKey('check', 'true'); bluetooth.scanBT(); // }); }); } }); } else { bluetooth.disConnnectBT(); //关闭蓝牙 setState(() { check = false; btList.clear(); btSet.clear(); }); setKey('check', 'false'); } }, ) ], ), ), ), _underLine() ], ) ); } Widget _printType() { return InkWell( child: Container( height: ScreenUtil.getInstance().setHeight(90), color: Colors.white, padding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setHeight(30), 0, 0, 0), child: Column( children: < Widget > [ Expanded( child: Center( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: < Widget > [ Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: < Widget > [ Padding( padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(22)), child: Image.asset('lib/images/icon_dayinji.png', width: ScreenUtil.getInstance().setWidth(30), height: ScreenUtil.getInstance().setHeight(34), ) ), Text('打印类型', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ), ], ), ), Row( mainAxisAlignment: MainAxisAlignment.end, children: < Widget > [ Text(printType, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(153, 153, 153, 1)), ), Icon(Icons.keyboard_arrow_right, color: Color.fromRGBO(199, 199, 204, 1)) ], ) ], ), ), ) ], ) ), onTap: () { showPickerModal(context, 'printType'); }, ); } Widget _btList() { return Container( height: ScreenUtil.getInstance().setHeight(350), padding: EdgeInsets.all(ScreenUtil.getInstance().setHeight(30)), child: (btList.length > 0 && check == true) ? ListView.builder( itemCount: btList.length, itemBuilder: (BuildContext context, int index) { return _btItem(btList[index], index); }, ) : check == true ? _searchBt() : Center() ); } Widget _btItem(BtInfoObj obj, int index) { // print(obj.name); int tempIndex = obj.name.indexOf('||'); String name = obj.name.substring(0, tempIndex); String btAddress = obj.name.substring(tempIndex + 2, obj.name.length); // print(btAddress); return InkWell( child:SafeArea( child:Padding( padding: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(30)), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: < Widget > [ Text(name), obj.showLoadStauts ? SizedBox( width: ScreenUtil.getInstance().setWidth(30), height: ScreenUtil.getInstance().setHeight(30), child: Image.asset('lib/images/loading.gif'), ) : CircleAvatar( backgroundColor: obj.connectStatus ? Color.fromRGBO(64, 98, 254, 1) : Colors.grey, radius: 6, ) ], ) ), ), onTap: () { if(btList[index].connectStatus) return;//已连接直接返回 for(int i=0;i [ Text('正在搜索...'), SizedBox( width: ScreenUtil.getInstance().setWidth(45), height: ScreenUtil.getInstance().setHeight(45), child: Image.asset('lib/images/loading.gif'), ) ], ), ); } }