添加建议页面卡片

hmxc
小赖 4 years ago
parent bd869e6d3c
commit 0225e33f5e

@ -87,6 +87,9 @@ class _Manager {
////app/ type (1.2.3.4.)
String get advice => '/user/advice/list';
/// //
String get addAdvice => '/user/advice/insert';
}
class _Upload {

@ -69,7 +69,7 @@ class _PropertyIndexState extends State<PropertyIndex>
GoodsDetoPage().to();
}),
GridButton('投诉表扬', R.ASSETS_ICONS_TOOL_TSBY_PNG,
AdvicePage(type: AdviceType.SUGGESTION).to),
AdvicePage(type: AdviceType.COMPLAIN).to),
GridButton('问卷调查', R.ASSETS_ICONS_TOOL_WJDC_PNG, () {
QuestionnairePage().to();
}),

@ -0,0 +1,55 @@
import 'package:akuCommunity/model/manager/suggestion_or_complain_model.dart';
import 'package:akuCommunity/utils/headers.dart';
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:velocity_x/velocity_x.dart';
class AdviceCard extends StatefulWidget {
final SuggestionOrComplainModel model;
AdviceCard({Key key, this.model}) : super(key: key);
@override
_AdviceCardState createState() => _AdviceCardState();
}
class _AdviceCardState extends State<AdviceCard> {
///1.2.3.
String get statusValue => {
1: '未反馈',
2: '反馈中',
3: '已反馈',
}[widget.model.status];
@override
Widget build(BuildContext context) {
return MaterialButton(
elevation: 0,
padding: EdgeInsets.all(24.w),
color: Colors.white,
onPressed: () {},
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.w),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
DateUtil.formatDate(
widget.model.createDate,
format: 'yyyy年MM月dd日',
).text.size(32.sp).black.bold.make(),
statusValue.text.size(24.sp).color(Color(0xFFFF8200)).make(),
],
),
Divider(
height: 50.w,
thickness: 1.w,
color: Color(0xFFE8E8E8),
),
widget.model.content.text.size(28.w).black.make(),
],
),
);
}
}

@ -1,6 +1,7 @@
import 'package:akuCommunity/constants/api.dart';
import 'package:akuCommunity/model/manager/suggestion_or_complain_model.dart';
import 'package:akuCommunity/pages/things_page/widget/bee_list_view.dart';
import 'package:akuCommunity/ui/manager/advice/advice_card.dart';
import 'package:akuCommunity/ui/manager/advice/new_advice_page.dart';
import 'package:akuCommunity/widget/bee_scaffold.dart';
import 'package:akuCommunity/utils/headers.dart';
@ -94,8 +95,9 @@ class _AdvicePageState extends State<AdvicePage> with TickerProviderStateMixin {
.toList(),
builder: (items) {
return ListView.separated(
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 20.w),
itemBuilder: (context, index) {
return SizedBox();
return AdviceCard(model: items[index]);
},
separatorBuilder: (_, __) => 20.hb,
itemCount: items.length,

@ -1,13 +1,19 @@
import 'dart:io';
import 'package:akuCommunity/const/resource.dart';
import 'package:akuCommunity/constants/api.dart';
import 'package:akuCommunity/ui/manager/advice/advice_page.dart';
import 'package:akuCommunity/utils/network/base_model.dart';
import 'package:akuCommunity/utils/network/net_util.dart';
import 'package:akuCommunity/widget/bee_scaffold.dart';
import 'package:akuCommunity/utils/headers.dart';
import 'package:akuCommunity/widget/buttons/bottom_button.dart';
import 'package:akuCommunity/widget/picker/grid_image_picker.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:velocity_x/velocity_x.dart';
class NewAdvicePage extends StatefulWidget {
@ -21,6 +27,8 @@ class NewAdvicePage extends StatefulWidget {
class _NewAdvicePageState extends State<NewAdvicePage> {
int _type = 0;
List<File> _files = [];
TextEditingController _editingController = TextEditingController();
GlobalKey<FormState> _formKey = GlobalKey<FormState>();
String get title {
switch (widget.type) {
case AdviceType.SUGGESTION:
@ -80,6 +88,32 @@ class _NewAdvicePageState extends State<NewAdvicePage> {
);
}
////
Future addAdvice(int type, List<File> files, String content) async {
VoidCallback cancel = BotToast.showLoading();
List<String> urls =
await NetUtil().uploadFiles(files, API.upload.uploadArticle);
BaseModel baseModel = await NetUtil().post(
API.manager.addAdvice,
params: {
'type': type,
'content': content,
'fileUrls': urls,
},
showMessage: true,
);
cancel();
if (baseModel.status) {
Get.back();
}
}
@override
void dispose() {
_editingController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BeeScaffold.white(
@ -102,28 +136,37 @@ class _NewAdvicePageState extends State<NewAdvicePage> {
'您要选择的类型是?'.text.size(28.sp).make(),
32.hb,
<Widget>[
_buildType(0, R.ASSETS_ICONS_PROPOSAL_PNG, '建议'),
_buildType(0, R.ASSETS_ICONS_PROPOSAL_PNG,
widget.type == AdviceType.SUGGESTION ? '建议' : '投诉'),
80.wb,
_buildType(1, R.ASSETS_ICONS_CONSULT_PNG, '咨询'),
_buildType(1, R.ASSETS_ICONS_CONSULT_PNG,
widget.type == AdviceType.SUGGESTION ? '咨询' : '表扬'),
].row(),
44.hb,
'请输入内容'.text.size(28.sp).make(),
24.hb,
TextField(
// controller: ,
minLines: 6,
maxLines: 99,
decoration: InputDecoration(
border: OutlineInputBorder(),
isDense: true,
contentPadding: EdgeInsets.symmetric(
horizontal: 22.w,
vertical: 32.w,
),
hintText: '您对我们的工作有什么建议吗?欢迎您提给我们宝贵的建议,谢谢',
hintStyle: TextStyle(
fontSize: 28.sp,
color: Color(0xFF999999),
Form(
key: _formKey,
child: TextFormField(
controller: _editingController,
minLines: 6,
maxLines: 99,
validator: (text) {
if (TextUtil.isEmpty(text)) return '内容不能为空';
return null;
},
decoration: InputDecoration(
border: OutlineInputBorder(),
isDense: true,
contentPadding: EdgeInsets.symmetric(
horizontal: 22.w,
vertical: 32.w,
),
hintText: '您对我们的工作有什么建议吗?欢迎您提给我们宝贵的建议,谢谢',
hintStyle: TextStyle(
fontSize: 28.sp,
color: Color(0xFF999999),
),
),
),
),
@ -138,7 +181,20 @@ class _NewAdvicePageState extends State<NewAdvicePage> {
],
),
bottomNavi: BottomButton(
onPressed: () {},
onPressed: () {
if (_formKey.currentState.validate()) {
int type = 1;
switch (widget.type) {
case AdviceType.SUGGESTION:
type = _type == 0 ? 2 : 1;
break;
case AdviceType.COMPLAIN:
type = _type == 0 ? 4 : 3;
break;
}
addAdvice(type, _files, _editingController.text);
}
},
child: '确认提交'.text.make(),
),
);

@ -144,14 +144,11 @@ class NetUtil {
Future<List<String>> uploadFiles(List<File> files, String api) async {
List<String> urls = [];
if (urls.isEmpty) {
for (var item in files) {
for (var item in files) {
BaseFileModel model = await NetUtil().upload(api, item);
urls.add(model.url);
}
} else
return [];
if (urls.isEmpty) return [];
return urls;
}

Loading…
Cancel
Save