|
|
|
@ -1,13 +1,24 @@
|
|
|
|
|
import 'package:aku_new_community/base/base_style.dart';
|
|
|
|
|
import 'package:aku_new_community/gen/assets.gen.dart';
|
|
|
|
|
import 'package:aku_new_community/models/task/my_task_list_model.dart';
|
|
|
|
|
import 'package:aku_new_community/ui/service/dialogs/task_cancel_dialog.dart';
|
|
|
|
|
import 'package:aku_new_community/ui/service/dialogs/task_evaluation_dialog.dart';
|
|
|
|
|
import 'package:aku_new_community/ui/service/task_map.dart';
|
|
|
|
|
import 'package:aku_new_community/widget/bee_divider.dart';
|
|
|
|
|
import 'package:aku_new_community/widget/bee_scaffold.dart';
|
|
|
|
|
import 'package:aku_new_community/widget/buttons/bee_long_button.dart';
|
|
|
|
|
import 'package:aku_new_community/widget/views/bee_grid_image_view.dart';
|
|
|
|
|
import 'package:aku_new_community/widget/voice_player.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:get/get.dart';
|
|
|
|
|
import 'package:velocity_x/velocity_x.dart';
|
|
|
|
|
|
|
|
|
|
import '../task_func.dart';
|
|
|
|
|
|
|
|
|
|
class MyTaskDetailPage extends StatefulWidget {
|
|
|
|
|
final MyTaskListModel model;
|
|
|
|
|
|
|
|
|
@ -18,6 +29,52 @@ class MyTaskDetailPage extends StatefulWidget {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _MyTaskDetailPageState extends State<MyTaskDetailPage> {
|
|
|
|
|
String get detailStatusToString {
|
|
|
|
|
switch (widget.model.status) {
|
|
|
|
|
case 1:
|
|
|
|
|
return '已发布';
|
|
|
|
|
case 2:
|
|
|
|
|
if (widget.model.endTime?.isBefore(DateTime.now()) ?? false) {
|
|
|
|
|
return '已超时(原预计${DateUtil.formatDate(widget.model.endTime, format: DateFormats.h_m)}';
|
|
|
|
|
} else {
|
|
|
|
|
return '服务中';
|
|
|
|
|
}
|
|
|
|
|
case 3:
|
|
|
|
|
return '待确认';
|
|
|
|
|
case 4:
|
|
|
|
|
return '已完成';
|
|
|
|
|
case 5:
|
|
|
|
|
return '已评价';
|
|
|
|
|
case 9:
|
|
|
|
|
return '已取消';
|
|
|
|
|
default:
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String get subStatusString {
|
|
|
|
|
switch (widget.model.status) {
|
|
|
|
|
case 1:
|
|
|
|
|
return '请与发布人确认后开始服务';
|
|
|
|
|
case 2:
|
|
|
|
|
if (widget.model.endTime?.isBefore(DateTime.now()) ?? false) {
|
|
|
|
|
return '请及时提醒帮手完成任务';
|
|
|
|
|
} else {
|
|
|
|
|
return '帮手正在为您服务中';
|
|
|
|
|
}
|
|
|
|
|
case 3:
|
|
|
|
|
return '请注意及时确认帮手的工作内容';
|
|
|
|
|
case 4:
|
|
|
|
|
return '欢迎对骑手及本次任务进行评价';
|
|
|
|
|
case 5:
|
|
|
|
|
return '感谢信任与支持,欢迎再次光临';
|
|
|
|
|
case 9:
|
|
|
|
|
return '请及时提醒帮手完成任务';
|
|
|
|
|
default:
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return BeeScaffold(
|
|
|
|
@ -34,7 +91,7 @@ class _MyTaskDetailPageState extends State<MyTaskDetailPage> {
|
|
|
|
|
gradient: LinearGradient(
|
|
|
|
|
begin: Alignment.centerLeft,
|
|
|
|
|
end: Alignment.centerRight,
|
|
|
|
|
colors: widget.model.status == 4
|
|
|
|
|
colors: widget.model.status == 9
|
|
|
|
|
? [
|
|
|
|
|
Colors.white,
|
|
|
|
|
Color(0xFFADACAC),
|
|
|
|
@ -54,13 +111,13 @@ class _MyTaskDetailPageState extends State<MyTaskDetailPage> {
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
'${TaskMap.detailStatusToString[widget.model.status]}'
|
|
|
|
|
'${detailStatusToString}'
|
|
|
|
|
.text
|
|
|
|
|
.size(40.sp)
|
|
|
|
|
.color(Colors.black)
|
|
|
|
|
.bold
|
|
|
|
|
.make(),
|
|
|
|
|
'${TaskMap.subStatus[widget.model.status]}'
|
|
|
|
|
'${subStatusString}'
|
|
|
|
|
.text
|
|
|
|
|
.size(24.sp)
|
|
|
|
|
.color(Colors.black.withOpacity(0.45))
|
|
|
|
@ -69,28 +126,6 @@ class _MyTaskDetailPageState extends State<MyTaskDetailPage> {
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
Spacer(),
|
|
|
|
|
// Padding(
|
|
|
|
|
// padding: EdgeInsets.only(right: 32.w),
|
|
|
|
|
// child: MaterialButton(
|
|
|
|
|
// color: Colors.white,
|
|
|
|
|
// elevation: 0,
|
|
|
|
|
// shape: RoundedRectangleBorder(
|
|
|
|
|
// borderRadius: BorderRadius.circular(8.w),
|
|
|
|
|
// ),
|
|
|
|
|
// onPressed: () async {
|
|
|
|
|
// var re = await TaskFunc.cancel(
|
|
|
|
|
// taskId: widget.model.id);
|
|
|
|
|
// if (re) {
|
|
|
|
|
// Get.back();
|
|
|
|
|
// }
|
|
|
|
|
// },
|
|
|
|
|
// child: '取消订单'
|
|
|
|
|
// .text
|
|
|
|
|
// .size(24.sp)
|
|
|
|
|
// .color(Colors.black.withOpacity(0.65))
|
|
|
|
|
// .make(),
|
|
|
|
|
// ),
|
|
|
|
|
// )
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
@ -118,9 +153,124 @@ class _MyTaskDetailPageState extends State<MyTaskDetailPage> {
|
|
|
|
|
)),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
bottomNavi: Container(
|
|
|
|
|
width: double.infinity,
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
padding: EdgeInsets.all(32.w),
|
|
|
|
|
child: Row(
|
|
|
|
|
children: [
|
|
|
|
|
Offstage(
|
|
|
|
|
offstage: widget.model.status > 3,
|
|
|
|
|
child: MaterialButton(
|
|
|
|
|
onPressed: () async {
|
|
|
|
|
var re = await Get.bottomSheet(
|
|
|
|
|
TaskCancelDialog(taskId: widget.model.id));
|
|
|
|
|
if (re) {
|
|
|
|
|
Get.back();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
minWidth: 330.w,
|
|
|
|
|
height: 80.w,
|
|
|
|
|
elevation: 0,
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
shape: RoundedRectangleBorder(
|
|
|
|
|
borderRadius: BorderRadius.circular(40.w),
|
|
|
|
|
side: BorderSide(color: Colors.black.withOpacity(0.25)),
|
|
|
|
|
),
|
|
|
|
|
child: Text(
|
|
|
|
|
'取消订单',
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 28.sp, color: Colors.black.withOpacity(0.65)),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
Spacer(),
|
|
|
|
|
buttonByStatus,
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget get buttonByStatus {
|
|
|
|
|
switch (widget.model.status) {
|
|
|
|
|
case 1:
|
|
|
|
|
return MaterialButton(
|
|
|
|
|
onPressed: () async {},
|
|
|
|
|
minWidth: 330.w,
|
|
|
|
|
height: 80.w,
|
|
|
|
|
elevation: 0,
|
|
|
|
|
color: kPrimaryColor,
|
|
|
|
|
shape: RoundedRectangleBorder(
|
|
|
|
|
borderRadius: BorderRadius.circular(40.w),
|
|
|
|
|
),
|
|
|
|
|
child: Text(
|
|
|
|
|
'修改任务',
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 28.sp, color: Colors.black.withOpacity(0.85)),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
case 2:
|
|
|
|
|
return MaterialButton(
|
|
|
|
|
onPressed: () {},
|
|
|
|
|
minWidth: 330.w,
|
|
|
|
|
height: 80.w,
|
|
|
|
|
elevation: 0,
|
|
|
|
|
color: kPrimaryColor,
|
|
|
|
|
shape: RoundedRectangleBorder(
|
|
|
|
|
borderRadius: BorderRadius.circular(40.w),
|
|
|
|
|
),
|
|
|
|
|
child: Text(
|
|
|
|
|
'催促服务',
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 28.sp, color: Colors.black.withOpacity(0.85)),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
case 3:
|
|
|
|
|
return MaterialButton(
|
|
|
|
|
onPressed: () async {
|
|
|
|
|
var re = await TaskFunc.confirm(taskId: widget.model.id);
|
|
|
|
|
if (re) {
|
|
|
|
|
Get.back();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
minWidth: 330.w,
|
|
|
|
|
height: 80.w,
|
|
|
|
|
elevation: 0,
|
|
|
|
|
color: kPrimaryColor,
|
|
|
|
|
shape: RoundedRectangleBorder(
|
|
|
|
|
borderRadius: BorderRadius.circular(40.w),
|
|
|
|
|
),
|
|
|
|
|
child: Text(
|
|
|
|
|
'确认完成',
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 28.sp, color: Colors.black.withOpacity(0.85)),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
case 4:
|
|
|
|
|
return BeeLongButton(
|
|
|
|
|
onPressed: () async {
|
|
|
|
|
var re = await Get.bottomSheet(TaskEvaluationDialog(
|
|
|
|
|
taskId: widget.model.id,
|
|
|
|
|
));
|
|
|
|
|
},
|
|
|
|
|
text: '点击评价',
|
|
|
|
|
);
|
|
|
|
|
case 5:
|
|
|
|
|
return BeeLongButton.white(
|
|
|
|
|
onPressed: () async {},
|
|
|
|
|
text: '再次发布',
|
|
|
|
|
);
|
|
|
|
|
case 9:
|
|
|
|
|
return BeeLongButton.white(
|
|
|
|
|
onPressed: () async {},
|
|
|
|
|
text: '再次发布',
|
|
|
|
|
);
|
|
|
|
|
default:
|
|
|
|
|
return SizedBox.shrink();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget _taskInfo() {
|
|
|
|
|
return Container(
|
|
|
|
|
width: 686.w,
|
|
|
|
@ -148,13 +298,38 @@ class _MyTaskDetailPageState extends State<MyTaskDetailPage> {
|
|
|
|
|
.color(Colors.black.withOpacity(0.45))
|
|
|
|
|
.make(),
|
|
|
|
|
Spacer(),
|
|
|
|
|
'${DateUtil.formatDateStr(widget.model.updateDate)}'
|
|
|
|
|
'${DateUtil.formatDateStr(widget.model.createDate)}'
|
|
|
|
|
.text
|
|
|
|
|
.size(24.sp)
|
|
|
|
|
.color(Colors.black.withOpacity(0.45))
|
|
|
|
|
.make()
|
|
|
|
|
.make(),
|
|
|
|
|
64.w.widthBox,
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
24.w.heightBox,
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
'任务单号'
|
|
|
|
|
.text
|
|
|
|
|
.size(24.sp)
|
|
|
|
|
.color(Colors.black.withOpacity(0.45))
|
|
|
|
|
.make(),
|
|
|
|
|
Spacer(),
|
|
|
|
|
'${widget.model.code}'
|
|
|
|
|
.text
|
|
|
|
|
.size(24.sp)
|
|
|
|
|
.color(Colors.black.withOpacity(0.45))
|
|
|
|
|
.make(),
|
|
|
|
|
24.w.widthBox,
|
|
|
|
|
GestureDetector(
|
|
|
|
|
onTap: () async {
|
|
|
|
|
await Clipboard.setData(
|
|
|
|
|
ClipboardData(text: widget.model.code));
|
|
|
|
|
BotToast.showText(text: '已复制到粘贴板');
|
|
|
|
|
},
|
|
|
|
|
child: Assets.icons.copy.image(width: 40.w, height: 40.w)),
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
@ -171,21 +346,18 @@ class _MyTaskDetailPageState extends State<MyTaskDetailPage> {
|
|
|
|
|
color: Color(0xFFFFF7E6),
|
|
|
|
|
borderRadius: BorderRadius.circular(8.w),
|
|
|
|
|
),
|
|
|
|
|
child: '#${TaskMap.typeToString[widget.model.type]}'
|
|
|
|
|
child: '#${TaskMap.taskType[widget.model.type]}'
|
|
|
|
|
.text
|
|
|
|
|
.size(28.sp)
|
|
|
|
|
.color(Color(0xFFFA8C16))
|
|
|
|
|
.make(),
|
|
|
|
|
),
|
|
|
|
|
Spacer(),
|
|
|
|
|
Assets.icons.intergral.image(width: 24.w, height: 24.w),
|
|
|
|
|
8.w.widthBox,
|
|
|
|
|
'${widget.model.reward}'.text.size(32.sp).color(Colors.red).make()
|
|
|
|
|
],
|
|
|
|
|
);
|
|
|
|
|
return Container(
|
|
|
|
|
width: 686.w,
|
|
|
|
|
height: 500.w,
|
|
|
|
|
// height: 500.w,
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
borderRadius: BorderRadius.circular(8.w),
|
|
|
|
@ -197,16 +369,19 @@ class _MyTaskDetailPageState extends State<MyTaskDetailPage> {
|
|
|
|
|
34.w.heightBox,
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Assets.icons.clockCircle.image(width: 36.w, height: 36.w),
|
|
|
|
|
Assets.icons.watch.image(width: 40.w, height: 40.w),
|
|
|
|
|
24.w.widthBox,
|
|
|
|
|
'${DateUtil.formatDateStr(widget.model.readyEndTime)}'
|
|
|
|
|
.text
|
|
|
|
|
.size(24.sp)
|
|
|
|
|
.color(Colors.black.withOpacity(0.65))
|
|
|
|
|
'${widget.model.serviceTime ?? '0'}'
|
|
|
|
|
.richText
|
|
|
|
|
.withTextSpanChildren([
|
|
|
|
|
' 分钟'.textSpan.size(28.sp).color(Colors.black).make(),
|
|
|
|
|
])
|
|
|
|
|
.size(28.sp)
|
|
|
|
|
.color(Color(0xFFFA8C16))
|
|
|
|
|
.make(),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
20.w.heightBox,
|
|
|
|
|
24.w.heightBox,
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Assets.icons.environment.image(width: 36.w, height: 36.w),
|
|
|
|
@ -228,16 +403,18 @@ class _MyTaskDetailPageState extends State<MyTaskDetailPage> {
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
'#${TaskMap.typeToString[widget.model.type]}'
|
|
|
|
|
.text
|
|
|
|
|
.size(28.sp)
|
|
|
|
|
.color(Colors.black.withOpacity(0.85))
|
|
|
|
|
.make(),
|
|
|
|
|
16.w.heightBox,
|
|
|
|
|
widget.model.remarks.text
|
|
|
|
|
.size(28.sp)
|
|
|
|
|
.color(Colors.black.withOpacity(0.65))
|
|
|
|
|
.make(),
|
|
|
|
|
24.w.heightBox,
|
|
|
|
|
VoicePlayer(
|
|
|
|
|
url: widget.model.voiceUrl,
|
|
|
|
|
),
|
|
|
|
|
24.w.heightBox,
|
|
|
|
|
BeeGridImageView(
|
|
|
|
|
urls:
|
|
|
|
|
widget.model.imgList?.map((e) => e.url).toList() ?? []),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
@ -254,11 +431,14 @@ class _MyTaskDetailPageState extends State<MyTaskDetailPage> {
|
|
|
|
|
.color(Colors.black.withOpacity(0.45))
|
|
|
|
|
.make(),
|
|
|
|
|
Spacer(),
|
|
|
|
|
'¥${widget.model.reward}'
|
|
|
|
|
.text
|
|
|
|
|
.size(32.sp)
|
|
|
|
|
.color(Colors.red)
|
|
|
|
|
.make(),
|
|
|
|
|
widget.model.rewardType == 1
|
|
|
|
|
? Text(
|
|
|
|
|
'¥ ',
|
|
|
|
|
style: TextStyle(color: Colors.red, fontSize: 32.sp),
|
|
|
|
|
)
|
|
|
|
|
: Assets.icons.intergral.image(width: 24.w, height: 24.w),
|
|
|
|
|
8.w.widthBox,
|
|
|
|
|
'${widget.model.reward}'.text.size(32.sp).color(Colors.red).make()
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|