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 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() { super.initState(); getStationList().then((resp) { if (isNotError(context, resp)) { 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); } onEvent(Object obj) { print(obj.toString()); } 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), ), body: Container( color: Color.fromRGBO(246, 246, 254, 1), child: Column( children: < Widget > [ _avatarWidget(), _funWrapWidget(check, 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(bool check, BuildContext context) { return Container( padding: EdgeInsets.only(top: ScreenUtil.getInstance().setHeight(20)), child: Column( children: < Widget > [ _switchSite(context), _passWordWidget(), _linkPrint(check), _printType(), _quitWidget(context) ], ), ); } 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()); } 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(bool check) { 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: this.check, activeColor: Colors.blue, onChanged: (bool val) { bluetooth.isBTDevice().then((resp) { if (resp) { bluetooth.isEnableBluetooth().then((bool resp) { this.setState(() { this.check = resp; }); bluetooth.scanBT(); // }); } }); }, ) ], ), ), ), _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 _quitWidget(BuildContext context) { return InkWell( child: 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 > [ 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: () { 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; } }, ); }); }, ); } }