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

199 lines
6.0 KiB

import 'package:flutter/material.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/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();
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(),
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: BottomButton(
onPressed: () async {
bool result =
await Get.to(() => AdviceAddCommentPage(id: widget.model.id));
if (result && mounted) _refreshController.callRefresh();
},
child: '继续提问'.text.bold.make(),
),
);
}
}