import 'package:deus_app/common/style/gsy_style.dart'; import 'package:deus_app/common/utils/ConstantString.dart'; import 'package:flutter/material.dart'; import '../model/drop_menu_item.dart'; class MaintJobDrawer extends StatefulWidget { final _CallBack callback; const MaintJobDrawer({super.key, required this.callback}); @override State createState() { return _maintJobDrawer(); } } DropMenuItem not = DropMenuItem('已关闭', 0); DropMenuItem close = DropMenuItem('已完成', 2); DropMenuItem on = DropMenuItem('执行中', 1); DropMenuItem overdue = DropMenuItem('待执行', 3); DropMenuItem complete = DropMenuItem('已逾期', 4); List sexMenuItems = [not, close, on, overdue, complete]; typedef _CallBack = void Function(String device, String name,dynamic stase); class _maintJobDrawer extends State { @override Widget build(BuildContext context) { return Drawer( child: MediaQuery.removePadding( context: context, //移除抽屉菜单顶部默认留白 removeTop: true, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only(top: 65.0, left: 10, right: 10), child: Row(children: [ Expanded( flex: 2, child: Text( '任务名称', style: TextStyle( color: Colors.black, fontSize: GSYConstant.minTextSize, fontWeight: FontWeight.bold, ), ), ), Expanded( child: Container( height: 40, child: TextField( decoration: InputDecoration( border: OutlineInputBorder(), ), style: TextStyle(fontSize: 14), onChanged: (value) { setState(() { _name = value; }); }, ), ), flex: 7, ), ]), ), Padding( padding: const EdgeInsets.only(top: 20.0, left: 10, right: 10), child: Row(children: [ Expanded( flex: 2, child: Text( '任务编号', style: TextStyle( color: Colors.black, fontSize: GSYConstant.minTextSize, fontWeight: FontWeight.bold, ), ), ), Expanded( child: Container( height: 40, child: TextField( decoration: InputDecoration(border: OutlineInputBorder()), style: TextStyle(fontSize: 14), onChanged: (value) { setState(() { _number = value; }); }, ), ), flex: 7, ), ]), ), Padding( padding: const EdgeInsets.only(top: 20.0, left: 10, right: 10), child: Row(children: [ Expanded( flex: 2, child: Text( '任务状态', style: TextStyle( color: Colors.black, fontSize: GSYConstant.minTextSize, fontWeight: FontWeight.bold, ), ), ), Expanded( flex: 7, child: Container( child: dropDownButtonsColumn(sexMenuItems, '请选择任务状态'), ), ), ]), ), SizedBox( height: 80, ), Row( crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end, children: [ TextButton( onPressed: () { Navigator.pop(context); }, child: Text(ConstantString.cancel), style: ButtonStyle( backgroundColor: MaterialStateProperty.all(Color(0xFF4875EC)), foregroundColor: MaterialStateProperty.all(Colors.white), minimumSize: MaterialStateProperty.all(Size(80, 40)), padding: MaterialStateProperty.all(EdgeInsets.zero)), ), SizedBox( width: 20, ), TextButton( onPressed: () { if (widget.callback != null) { widget.callback(_name,_number,satus); Navigator.pop(context); } }, child: Text(ConstantString.query), style: ButtonStyle( backgroundColor: MaterialStateProperty.all(Color(0xFF4875EC)), foregroundColor: MaterialStateProperty.all(Colors.white), minimumSize: MaterialStateProperty.all(Size(80, 40)), padding: MaterialStateProperty.all(EdgeInsets.zero)), ), SizedBox( width: 20, ), ], ) ], ), ), ); } Widget dropDownButtonsColumn(List list, String hint) { return Container( height: 40, //gives the height of the dropdown button width: MediaQuery.of(context).size.width, //gives the width of the dropdown button decoration: BoxDecoration( border: new Border.all( color: Colors.grey, //边框颜色 width: 1.0, //边框粗细 ), borderRadius: const BorderRadius.all(const Radius.circular(4.0)), //边框的弧度 ), // padding: const EdgeInsets.symmetric(horizontal: 13), //you can include padding to control the menu items child: Theme( data: Theme.of(context).copyWith( // canvasColor: Colors.white, // background color for the dropdown items buttonTheme: ButtonTheme.of(context).copyWith( alignedDropdown: true, //If false (the default), then the dropdown's menu will be wider than its button. )), child: DropdownButtonHideUnderline( // to hide the default underline of the dropdown button child: DropdownButton( iconEnabledColor: Color(0xFF595959), // icon color of the dropdown button items: list.map((dropMenuItem) { return DropdownMenuItem( value: dropMenuItem.label, child: Text( dropMenuItem.label, style: TextStyle(fontSize: 15), ), ); }).toList(), hint: Text( hint, style: TextStyle(fontSize: 15), ), // setting hint onChanged: (String? value) { key = value; setState(() { for (var element in list) { if (value == element.label) { satus = element.value; // saving the selected value } } }); }, value: key, // displaying the selected value ), )), ); } String _name = '', _number = ''; dynamic satus = null; String? key; }