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 { 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(), ), ) ], ); } }