You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aku_new_community/lib/ui/manager/advice/advice_detail_page.dart

234 lines
7.3 KiB

import 'package:flutter/material.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:dio/dio.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:get/get.dart' hide Response;
import 'package:shimmer/shimmer.dart';
import 'package:velocity_x/velocity_x.dart';
import 'package:aku_community/base/base_style.dart';
import 'package:aku_community/constants/api.dart';
import 'package:aku_community/constants/app_theme.dart';
import 'package:aku_community/model/manager/advice_detail_model.dart';
import 'package:aku_community/model/manager/suggestion_or_complain_model.dart';
import 'package:aku_community/ui/manager/advice/advice_add_comment_page.dart';
import 'package:aku_community/ui/manager/advice/advice_evaluate_page.dart';
import 'package:aku_community/utils/headers.dart';
import 'package:aku_community/utils/network/base_model.dart';
import 'package:aku_community/utils/network/net_util.dart';
import 'package:aku_community/widget/bee_scaffold.dart';
import 'package:aku_community/widget/buttons/bottom_button.dart';
import 'package:aku_community/widget/views/bee_grid_image_view.dart';
class AdviceDetailPage extends StatefulWidget {
final SuggestionOrComplainModel? model;
AdviceDetailPage({Key? key, required this.model}) : super(key: key);
@override
_AdviceDetailPageState createState() => _AdviceDetailPageState();
}
class _AdviceDetailPageState extends State<AdviceDetailPage> {
bool _loading = true;
EasyRefreshController _refreshController = EasyRefreshController();
late AdviceDetailModel _model;
String get adviceValue {
switch (widget.model!.type) {
case 1:
return '咨询';
case 2:
return '建议';
case 3:
return '投诉';
case 4:
return '表扬';
}
return '';
}
_buildShimmer() {
return Padding(
padding: EdgeInsets.all(32.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Shimmer.fromColors(
baseColor: Colors.black12,
highlightColor: Colors.white10,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
VxBox().height(53.w).width(152.w).color(Colors.white).make(),
30.hb,
VxBox().height(40.w).width(600.w).color(Colors.white).make(),
24.hb,
VxBox().height(33.w).width(263.w).color(Colors.white).make(),
50.hb,
VxBox().height(53.w).width(152.w).color(Colors.white).make(),
30.hb,
VxBox().height(40.w).width(600.w).color(Colors.white).make(),
24.hb,
VxBox().height(33.w).width(263.w).color(Colors.white).make(),
],
),
),
Divider(
height: 50.w,
thickness: 1.w,
color: Color(0xFFD8D8D8),
),
BeeGridImageView(
urls: widget.model!.imgUrls!.map((e) => e.url).toList(),
padding: EdgeInsets.only(right: 100.w),
),
],
),
);
}
_buildAdviceContent(AppAdviceContentVos item) {
String type = '';
switch (item.createUserType) {
case 1:
type = '';
break;
case 2:
type = '装修公司';
break;
case 3:
type = '物业';
break;
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'$type\的回复'.text.size(38.sp).bold.make(),
28.hb,
item.content!.text.size(28.sp).color(ktextSubColor).make(),
24.hb,
DateUtil.formatDate(item.date, format: 'yyyy年MM月dd日 HH:mm')
.text
.size(24.sp)
.color(Color(0xFF999999))
.make(),
50.hb,
],
);
}
_buildChild() {
return ListView(
padding: EdgeInsets.all(32.w),
children: [
'您的$adviceValue'.text.black.bold.size(38.sp).make(),
30.hb,
_model.appAdviceDetailVo!.appAdviceVo!.content!.text
.color(ktextSubColor)
.size(28.sp)
.make(),
24.hb,
DateUtil.formatDate(
_model.appAdviceDetailVo!.appAdviceVo!.date,
format: 'yyyy年MM月dd日 HH:mm',
).text.size(24.sp).color(Color(0xFF999999)).make(),
...widget.model!.imgUrls!.isEmpty
? []
: [
Divider(
height: 50.w,
thickness: 1.w,
color: Color(0xFFD8D8D8),
),
BeeGridImageView(
urls: widget.model!.imgUrls!.map((e) => e.url).toList(),
padding: EdgeInsets.only(right: 100.w),
),
Divider(
height: 50.w,
thickness: 1.w,
color: Color(0xFFD8D8D8),
)
],
..._model.appAdviceDetailVo!.appAdviceContentVos!
.map((e) => _buildAdviceContent(e))
.toList(),
],
);
}
@override
void dispose() {
_refreshController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeScaffold(
title: '查看详情',
systemStyle: SystemStyle.yellowBottomBar,
// actions: [
// TextButton(
// onPressed: () =>
// Get.to(() => AdviceEvaluatePage(id: widget.model!.id)),
// child: '评价'.text.make(),
// ),
// ],
body: EasyRefresh(
firstRefresh: true,
child: _loading ? _buildShimmer() : _buildChild(),
controller: _refreshController,
header: MaterialHeader(),
onRefresh: () async {
Response res = await NetUtil().dio!.get(
API.manager.adviceDetail,
queryParameters: {'adviceId': widget.model!.id},
);
_model = AdviceDetailModel.fromJson(res.data);
_loading = false;
if (mounted) setState(() {});
},
),
bottomNavi: _bottomButtons());
}
Widget _bottomButtons() {
return Row(
children: [
widget.model?.status == 3
? SizedBox()
: SizedBox(
width: 290.w,
child: BottomButton(
bgColor: Colors.black,
textColor: Colors.white,
onPressed: () async {
bool result = await (Get.to(
() => AdviceAddCommentPage(id: widget.model!.id)));
if (result && mounted) _refreshController.callRefresh();
},
child: '继续提问'.text.bold.make(),
),
),
Expanded(
child: BottomButton(
onPressed: () async {
BaseModel baseModel =
await NetUtil().get(API.manager.completeFeedBack, params: {
"adviceId": widget.model!.id,
});
if (baseModel.status ?? false) {
Get.to(() => AdviceEvaluatePage(id: widget.model!.id));
}
BotToast.showText(text: baseModel.message ?? '未知错误');
},
child: '完成沟通'.text.bold.make(),
),
)
],
);
}
}