parent
410bc98018
commit
cd091a0cc8
@ -0,0 +1,133 @@
|
|||||||
|
import 'package:aku_community_manager/style/app_style.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/inner/aku_bottom_button.dart';
|
||||||
|
import 'package:bot_toast/bot_toast.dart';
|
||||||
|
import 'package:common_utils/common_utils.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
import 'package:velocity_x/velocity_x.dart';
|
||||||
|
|
||||||
|
class KeyApplyInputPage extends StatefulWidget {
|
||||||
|
KeyApplyInputPage({Key key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_KeyApplyInputPageState createState() => _KeyApplyInputPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _KeyApplyInputPageState extends State<KeyApplyInputPage> {
|
||||||
|
TextEditingController _nameController;
|
||||||
|
TextEditingController _phoneController;
|
||||||
|
TextEditingController _roleController;
|
||||||
|
TextEditingController _placeController;
|
||||||
|
bool get canSubmit {
|
||||||
|
if (TextUtil.isEmpty(_nameController.text)) {
|
||||||
|
BotToast.showText(text: '申请人姓名不能为空!');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (TextUtil.isEmpty(_phoneController.text)) {
|
||||||
|
BotToast.showText(text: '申请人联系方式不能为空!');
|
||||||
|
return false;
|
||||||
|
} else if (!_phoneFormat(_phoneController.text)) {
|
||||||
|
BotToast.showText(text: '收件人联系方式格式错误!');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (TextUtil.isEmpty(_roleController.text)) {
|
||||||
|
BotToast.showText(text: '身份不能为空!');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (TextUtil.isEmpty(_placeController.text)) {
|
||||||
|
BotToast.showText(text: '对应设备不能为空!');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _phoneFormat(String phone) {
|
||||||
|
if ((phone.length != 11) || (phone.substring(0, 1) != '1')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_nameController = TextEditingController();
|
||||||
|
_phoneController = TextEditingController();
|
||||||
|
_roleController = TextEditingController();
|
||||||
|
_placeController = TextEditingController();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_nameController?.dispose();
|
||||||
|
_phoneController?.dispose();
|
||||||
|
_roleController?.dispose();
|
||||||
|
_phoneController?.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AkuScaffold(
|
||||||
|
title: '添加包裹',
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
body: Center(
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 32.w),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
_inputRowTile('申请人姓名', _nameController),
|
||||||
|
_inputRowTile('联系方式', _phoneController,
|
||||||
|
formatters: [FilteringTextInputFormatter.digitsOnly]),
|
||||||
|
_inputRowTile('身份', _roleController),
|
||||||
|
_inputRowTile('对应设备位置', _placeController),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
bottom: AkuBottomButton(
|
||||||
|
title: '确认提交',
|
||||||
|
onTap: () async {
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _inputRowTile(String title, TextEditingController controller,
|
||||||
|
{String hintText, List<TextInputFormatter> formatters}) {
|
||||||
|
return Container(
|
||||||
|
width: double.infinity,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
40.w.heightBox,
|
||||||
|
title.text.size(28.sp).color(kTextPrimaryColor).make(),
|
||||||
|
32.w.heightBox,
|
||||||
|
TextField(
|
||||||
|
inputFormatters: formatters,
|
||||||
|
textAlign: TextAlign.start,
|
||||||
|
onChanged: (value) {
|
||||||
|
controller.text = value;
|
||||||
|
setState(() {});
|
||||||
|
},
|
||||||
|
decoration: InputDecoration(
|
||||||
|
hintText: hintText ?? '',
|
||||||
|
isDense: true,
|
||||||
|
contentPadding: EdgeInsets.zero,
|
||||||
|
enabledBorder: UnderlineInputBorder(
|
||||||
|
borderSide: BorderSide(color: Color(0xFFE8E8E8), width: 2.w),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 36.sp,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: kTextPrimaryColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
import 'package:aku_community_manager/style/app_style.dart';
|
||||||
|
import 'package:aku_community_manager/tools/aku_divider.dart';
|
||||||
|
import 'package:aku_community_manager/ui/manage_pages/key_manage/key_manage_map.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
import 'package:velocity_x/velocity_x.dart';
|
||||||
|
import 'package:aku_community_manager/tools/extensions/list_extension_tool.dart';
|
||||||
|
class KeyApplyRecordCard extends StatefulWidget {
|
||||||
|
final int index;
|
||||||
|
KeyApplyRecordCard({Key key, this.index}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_KeyApplyRecordCardState createState() => _KeyApplyRecordCardState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _KeyApplyRecordCardState extends State<KeyApplyRecordCard> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
width: double.infinity,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white, borderRadius: BorderRadius.circular(8.w)),
|
||||||
|
padding: EdgeInsets.all(24.w),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
'3-1-203配电箱'
|
||||||
|
.text
|
||||||
|
.size(32.sp)
|
||||||
|
.color(kTextPrimaryColor)
|
||||||
|
.bold
|
||||||
|
.make(),
|
||||||
|
Spacer(),
|
||||||
|
KeyManageMap.keyStatus[2].text
|
||||||
|
.size(28.sp)
|
||||||
|
.bold
|
||||||
|
.color(KeyManageMap.keyStatusColor[2])
|
||||||
|
.make()
|
||||||
|
],
|
||||||
|
),
|
||||||
|
16.w.heightBox,
|
||||||
|
AkuDivider.horizontal(),
|
||||||
|
24.w.heightBox,
|
||||||
|
...<Widget>[
|
||||||
|
_rowTile(R.ASSETS_MANAGE_KEY_PNG, '可申请钥匙数/钥匙总数',
|
||||||
|
'2/5'.text.size(24.sp).color(kTextSubColor).make()),
|
||||||
|
_rowTile(R.ASSETS_MANAGE_LOCK_PNG, '对应设备位置',
|
||||||
|
'2栋1楼2-3'.text.size(24.sp).color(kTextSubColor).make()),
|
||||||
|
_rowTile(R.ASSETS_OUTDOOR_IC_ADDRESS_PNG, '存放地址',
|
||||||
|
'物业管理处2号柜'.text.size(24.sp).color(kTextSubColor).make()),
|
||||||
|
].sepWidget(separate: 12.w.heightBox),
|
||||||
|
_getBottomButtons(2),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _getBottomButtons(int status) {
|
||||||
|
MaterialButton button;
|
||||||
|
switch (status) {
|
||||||
|
case 1:
|
||||||
|
button = _bottomButton('申请钥匙', () {}, Color(0xFFFFC40C), Colors.black);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
button = _bottomButton('确认领取', () {}, Color(0xFFFFC40C), Colors.black);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
button = _bottomButton('归还钥匙', () {}, Colors.black, Colors.white);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
button = _bottomButton('重新提交', () {}, Colors.white, Colors.black);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
button = _bottomButton('联系物业', () {}, Colors.white, Colors.black);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
return button == null
|
||||||
|
? SizedBox()
|
||||||
|
: Padding(
|
||||||
|
padding: EdgeInsets.only(top: 40.w),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Spacer(),
|
||||||
|
button,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _bottomButton(
|
||||||
|
String title, Function onPressed, Color color, Color textColor) {
|
||||||
|
return MaterialButton(
|
||||||
|
height: 52.w,
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 8.w, horizontal: 24.w),
|
||||||
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(74.w)),
|
||||||
|
color: color,
|
||||||
|
onPressed: onPressed,
|
||||||
|
elevation: 0,
|
||||||
|
focusElevation: 0,
|
||||||
|
hoverElevation: 0,
|
||||||
|
highlightElevation: 0,
|
||||||
|
child: title.text.size(26.sp).color(textColor).make(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _rowTile(String iconPath, String title, Widget content) {
|
||||||
|
return Row(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
width: 40.w,
|
||||||
|
height: 40.w,
|
||||||
|
child: Image.asset(iconPath),
|
||||||
|
),
|
||||||
|
12.w.widthBox,
|
||||||
|
title.text.size(24.sp).color(kTextSubColor).make(),
|
||||||
|
Spacer(),
|
||||||
|
content,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,56 @@
|
|||||||
|
import 'package:aku_community_manager/ui/manage_pages/key_manage/key_apply_record_view.dart';
|
||||||
|
import 'package:aku_community_manager/ui/manage_pages/key_manage/select_place_page.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/inner/aku_bottom_button.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/inner/aku_tab_bar.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
|
||||||
|
class KeyApplyRecordPage extends StatefulWidget {
|
||||||
|
KeyApplyRecordPage({Key key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_KeyApplyRecordPageState createState() => _KeyApplyRecordPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _KeyApplyRecordPageState extends State<KeyApplyRecordPage>
|
||||||
|
with TickerProviderStateMixin {
|
||||||
|
List<String> _tabs = ['全部', '审核中', '已通过', '已驳回'];
|
||||||
|
TabController _tabController;
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_tabController = TabController(length: _tabs.length, vsync: this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_tabController?.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AkuScaffold(
|
||||||
|
title: '钥匙管理',
|
||||||
|
appBarBottom: PreferredSize(
|
||||||
|
child: AkuTabBar(controller: _tabController, tabs: _tabs),
|
||||||
|
preferredSize: Size.fromHeight(88.w),
|
||||||
|
),
|
||||||
|
body: TabBarView(
|
||||||
|
controller: _tabController,
|
||||||
|
children: List.generate(
|
||||||
|
_tabs.length,
|
||||||
|
(index) => KeyApplyRecordView(
|
||||||
|
index: index,
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
bottom: AkuBottomButton(
|
||||||
|
title: '立即申请',
|
||||||
|
onTap: () {
|
||||||
|
SelectPlacePage();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
import 'package:aku_community_manager/ui/manage_pages/key_manage/key_apply_record_card.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
|
||||||
|
class KeyApplyRecordView extends StatefulWidget {
|
||||||
|
final int index;
|
||||||
|
KeyApplyRecordView({Key key, this.index}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_KeyApplyRecordViewState createState() => _KeyApplyRecordViewState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _KeyApplyRecordViewState extends State<KeyApplyRecordView> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ListView(
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 24.w,horizontal: 32.w),
|
||||||
|
children: [
|
||||||
|
KeyApplyRecordCard(
|
||||||
|
index: widget.index,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue