提交 498558fc authored 作者: maodou's avatar maodou

1.订单评价优化

上级 ae4ca11b
......@@ -3,17 +3,23 @@ part of user_order;
/// 已完成item
class BuiltCompleted extends StatelessWidget {
final OrderListModel model;
final UserOrderController controller;
// final BuildContext context;
const BuiltCompleted({Key? key, required this.model /*,required this.context*/
const BuiltCompleted({Key? key, required this.model , required this.controller
})
: super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () { context.pushNamed(Routes.orderCompleted,queryParameters: {'orderNum':model.ordersnum});},
onTap: ()
async {
final result = await context.pushNamed(Routes.orderCompleted,
queryParameters: {'orderNum': model.ordersnum});
if (result == true) {
controller.onRefresh(); }
},
child: Container(
margin: EdgeInsets.only(left: 10.w, right: 10.w, top: 10.w),
padding: EdgeInsets.only(left: 11.5.w, bottom: 12.w),
......@@ -31,7 +37,6 @@ class BuiltCompleted extends StatelessWidget {
),
child: _buildCom(context)),
);
}
Widget _buildCom(BuildContext context) {
......@@ -81,7 +86,7 @@ class BuiltCompleted extends StatelessWidget {
],
),
child: Image.network(
model.cartList![0].img??'',
model.cartList![0].img ?? '',
// 用实际图片链接替换
fit: BoxFit.cover,
),
......@@ -130,7 +135,6 @@ class BuiltCompleted extends StatelessWidget {
),
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
)),
SizedBox(height: 22.5.w),
......@@ -147,7 +151,9 @@ class BuiltCompleted extends StatelessWidget {
fontSize: 14.w,
),
),
Align(
Visibility(
visible: judgeComments() == 0 ? false : true,
child: Align(
alignment: Alignment.centerRight,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 12.w),
......@@ -160,16 +166,21 @@ class BuiltCompleted extends StatelessWidget {
child: GestureDetector(
onTap: () {
// print("保存昵称");
context.pushNamed(Routes.orderEvaluate,extra:OrderInfoModel(),queryParameters: {'orderNum':model.ordersnum});
context.pushNamed(Routes.orderEvaluate,
extra: OrderInfoModel(),
queryParameters: {
'orderNum': model.ordersnum
});
},
child: Text(
'去评价',
judgeComments() == 1 ? '去评价' : "继续评价",
style: TextStyle(
fontSize: 12.w, color: Colours.cC31F4C),
)),
),
),
),
),
],
),
),
......@@ -239,7 +250,7 @@ class BuiltCompleted extends StatelessWidget {
],
),
child: Image.network(
cartModel.img??'',
cartModel.img ?? '',
// 用实际图片链接替换
fit: BoxFit.cover,
),
......@@ -261,7 +272,7 @@ class BuiltCompleted extends StatelessWidget {
Padding(
padding: EdgeInsets.only(right: 11.w),
child: Text(
${model.totalPrice??''}',
${model.totalPrice ?? ''}',
style: TextStyle(
color: Colours.cAB1941,
fontWeight: Fonts.medium,
......@@ -272,7 +283,7 @@ class BuiltCompleted extends StatelessWidget {
Padding(
padding: EdgeInsets.only(right: 11.w, top: 0.5),
child: Text(
'共${model.cartList!.isEmpty?0:model.cartList?.length}件',
'共${model.cartList!.isEmpty ? 0 : model.cartList?.length}件',
style: TextStyle(
color: Colours.c9,
fontSize: 10.w,
......@@ -282,25 +293,32 @@ class BuiltCompleted extends StatelessWidget {
SizedBox(
height: 13.5.w,
),
Container(
Visibility(
visible: judgeComments() == 0 ? false : true,
child: Container(
height: 23.w,
width: 60.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.w),
border:
Border.all(color: Colours.cC31F4C, width: 0.5.w)),
border: Border.all(
color: Colours.cC31F4C, width: 0.5.w)),
child: Center(
child: GestureDetector(
onTap: () {
context.pushNamed(Routes.orderEvaluate,extra:OrderInfoModel(),queryParameters: {'orderNum':model.ordersnum});
context.pushNamed(Routes.orderEvaluate,
extra: OrderInfoModel(),
queryParameters: {
'orderNum': model.ordersnum
});
},
child: Text(
'继续评价',
judgeComments() == 1 ? '去评价' : "继续评价",
style: TextStyle(
fontSize: 10.w, color: Colours.cC31F4C),
)),
),
),
),
],
),
)
......@@ -310,4 +328,36 @@ class BuiltCompleted extends StatelessWidget {
),
);
}
/// 判断图书是否已评价,全部评价返回0,全部未评价返回1,部分未评价返回2
int judgeComments() {
Console.log('=============judgeComments 开始');
// 无图书
if (model.cartList == null || model.cartList!.isEmpty) {
Console.log('=============judgeComments null 1');
return 1;
} else {
List<CartListModel>? cartList = model.cartList;
int i = 0;
for (CartListModel cart in cartList!) {
if (cart.rating == 0) {
i++;
}
}
// 全部已评价
if (i == 0) {
Console.log('=============judgeComments 0');
return 0;
}
// 全部未评价
if (model.cartList!.length == i) {
Console.log('=============judgeComments 1');
return 1;
} else {
Console.log('=============judgeComments 2');
// 部分未评价
return 2;
}
}
}
}
......@@ -49,7 +49,7 @@ class _BuildListPageState extends State<BuildListPage>
} else if (model.status == 2) {
return BuiltCanceled(model: model,);
} else if (model.status == 3) {
return BuiltCompleted(model: model,);
return BuiltCompleted(model: model,controller: controller,);
} else if (model.status == 4) {
return BuiltRefunded(model: model,);
}
......
......@@ -63,7 +63,7 @@ class _SearchPageState extends State<OrderSearchPage> {
} else if (model.status == 2) {
return BuiltCanceled(model: model,);
} else if (model.status == 3) {
return BuiltCompleted(model: model,);
return BuiltCompleted(model: model,controller: UserOrderController(0));
} else if (model.status == 4) {
return BuiltRefunded(model: model,);
}
......
......@@ -2,12 +2,15 @@ part of user_order_completed;
/// 已完成订单
class UserOrderCompletedController extends GetxController {
final String orderNum;// 订单编号
UserOrderCompletedController(this.orderNum);/*{
final String orderNum; // 订单编号
UserOrderCompletedController(this.orderNum);
/*{
getOrderInfo();
}*/
late OrderInfoModel model=OrderInfoModel();
late OrderInfoModel model = OrderInfoModel();
// 应付款、订单编号等
List<OrderCompletedModel> orderCompleteds = [];
......@@ -23,33 +26,56 @@ class UserOrderCompletedController extends GetxController {
super.onReady();
}
/// 获取订单信息
void getOrderInfo() async {
model = await MineAPI.getOrderInfo(orderNum: orderNum);
String payWay ='';
if(model.payType==1){
payWay='微信';
}else if(model.payType==2){
payWay='支付宝';
}else if(model.payType==3){
payWay='紫荆币';
String payWay = '';
if (model.payType == 1) {
payWay = '微信';
} else if (model.payType == 2) {
payWay = '支付宝';
} else if (model.payType == 3) {
payWay = '紫荆币';
}
orderCompleteds = [
OrderCompletedModel(name: '应付款',value: model.finalTotalPrice.toString(),
other: (double.parse(model.totalPrice.toString())-
double.parse(model.finalTotalPrice.toString())).toString()),
OrderCompletedModel(name: '订单编号',value: model.ordersnum.toString()),
OrderCompletedModel(name: '支付方式',value: payWay),
OrderCompletedModel(name: '支付时间',value: model.payTime.toString()),
OrderCompletedModel(name: '下单时间',value: model.createTime.toString()),
OrderCompletedModel(
name: '应付款',
value: model.finalTotalPrice.toString(),
other: (double.parse(model.totalPrice.toString()) -
double.parse(model.finalTotalPrice.toString()))
.toString()),
OrderCompletedModel(name: '订单编号', value: model.ordersnum.toString()),
OrderCompletedModel(name: '支付方式', value: payWay),
OrderCompletedModel(name: '支付时间', value: model.payTime.toString()),
OrderCompletedModel(name: '下单时间', value: model.createTime.toString()),
];
update();
}
/// 判断图书是否已评价,全部评价返回0,全部未评价返回1,部分未评价返回2
int judgeComments() {
// 无图书
if (model.bookList == null || model.bookList!.isEmpty) {
return 1;
} else {
List<BookListModel>? bookList = model.bookList;
int i = 0;
for (BookListModel book in bookList!) {
if (book.rating == 0) {
i++;
}
}
// 全部已评价
if (i == 0) {
return 0;
}
// 全部未评价
if (model.bookList!.length == i) {
return 1;
} else { // 部分未评价
return 2;
}
}
}
}
......@@ -206,7 +206,10 @@ class _UserOrderCompletedState extends State<UserOrderCompletedPage> {
left: 10.w, right: 10.w, top: 6.w, bottom: 13.w),
height: 1.w,
),
Align(
Visibility(
visible: controller.judgeComments() ==0?false:true,
// visible: true,
child: Align(
alignment: Alignment.centerRight,
child: Padding(
padding: EdgeInsets.only(right: 15.2),
......@@ -219,12 +222,13 @@ class _UserOrderCompletedState extends State<UserOrderCompletedPage> {
color: Colours.cC31F4C, width: 0.5.w)),
child: Center(
child: GestureDetector(
onTap: () {
// print("保存昵称");
context.pushNamed(Routes.orderEvaluate,extra:controller.model,queryParameters: {'orderNum':controller.model.ordersnum});
onTap: () async {
final result = await context.pushNamed(Routes.orderEvaluate,extra:controller.model,
queryParameters: {'orderNum':controller.model.ordersnum});
if (result == true) {
controller.getOrderInfo(); }
},
child: Text(
'去评价',
child: Text(controller.judgeComments() ==1?'去评价':"继续评价",
style: TextStyle(
fontSize: 12.w, color: Colours.cC31F4C),
)),
......@@ -232,6 +236,8 @@ class _UserOrderCompletedState extends State<UserOrderCompletedPage> {
),
),
),
),
SizedBox(
height: 14.5.w,
),
......
part of user_order_evaluate;
/// 订单评价
class UserOrderEvaluateController extends GetxController {
late OrderInfoModel orderInfoModel = OrderInfoModel();
String orderNum;
UserOrderEvaluateController(this.orderNum); // 已完成订单
TextEditingController commentsInput = TextEditingController();
late List<TextEditingController> _commentsControllers;
final FocusNode _focusNode = FocusNode();
late List<num?> ratings;
late List<FocusNode?> focusNodes;
// final FocusNode _focusNode = FocusNode();
// 按钮是否可用
bool _enable = false;
bool get enable => _enable;
@override
......@@ -24,39 +28,63 @@ class UserOrderEvaluateController extends GetxController {
orderInfoModel = await MineAPI.getOrderInfo(orderNum: orderNum);
_commentsControllers = List.generate(
orderInfoModel.bookList!.length,
(index) => TextEditingController(text: orderInfoModel.bookList![index].comments.toString()),
(index) => TextEditingController(
text: orderInfoModel.bookList![index].comments.toString()),
);
ratings = List.generate(
orderInfoModel.bookList!.length,
(index) => orderInfoModel.bookList![index].rating,
);
focusNodes = List.generate(
orderInfoModel.bookList!.length,
(index) => FocusNode(),
);
update();
}
/// 上传评价
void UpOrderEvaluate(String evaluate) async {
Future<bool> UpOrderEvaluate(String evaluate) async {
final result = await MineAPI.UpOrderEvaluate(evaluate: evaluate);
if (result) {
Toast.show('评价成功');
update();
_enable = false;
getOrderInfo();
}
return result;
}
void setCanClick({num double=0}){
if (double > 0){
_enable = true;
/// 判断图书是否已评价,评价返回false,未评价返回true
bool judgeComments(BookListModel bookListModel) {
// 无图书
if (bookListModel.rating == 0) {
return true;
}
return false;
}
else{
void setCanClick({num double = 0}) {
if (double > 0) {
_enable = true;
} else {
_enable = false;
}
update();
}
void updateText(String text){
commentsInput =TextEditingController(text: text);
void updateText(String text) {
commentsInput = TextEditingController(text: text);
// update();
}
@override
void onClose() {
commentsInput.dispose();
_focusNode.dispose();
for(TextEditingController controller in _commentsControllers){
controller.dispose();
}
for(int i=0;i<focusNodes.length;i++){
focusNodes[i]!.dispose();
}
super.onClose();
}
}
......@@ -11,6 +11,7 @@ import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:get/get_state_manager/src/simple/get_controllers.dart';
import 'package:get/get_state_manager/src/simple/get_state.dart';
import 'package:go_router/go_router.dart';
import '../../apis/index.dart';
import '../../models/index.dart';
......
......@@ -16,23 +16,25 @@ class UserOrderEvaluatePage extends StatefulWidget {
}
class _UserOrderEvaluatePageState extends State<UserOrderEvaluatePage> with AutomaticKeepAliveClientMixin{
// late UserOrderEvaluateController myController;
// TextEditingController commentsInput = TextEditingController();
List<OrderEvaluate> orderEvaluates = [];
List<double> ratings = [];
int _index = 0;
// late FocusNode _focusNode;
@override
void initState() {
// myController = Get.put(UserOrderEvaluateController(widget.orderNum));
super.initState();
}
@override
Widget build(BuildContext context) {
// super.build(context);
return
GetBuilder<UserOrderEvaluateController>(
return WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child:GetBuilder<UserOrderEvaluateController>(
init: UserOrderEvaluateController(widget.orderNum),
builder: (controller) => Scaffold(
appBar: AppBar(
......@@ -42,7 +44,7 @@ class _UserOrderEvaluatePageState extends State<UserOrderEvaluatePage> with Auto
body:
GestureDetector(
onTap: () {
controller._focusNode.unfocus();
controller.focusNodes[_index]!.unfocus();
},
child: (controller.orderInfoModel==null ||controller.orderInfoModel.bookList==null)?
Container(
......@@ -58,7 +60,7 @@ class _UserOrderEvaluatePageState extends State<UserOrderEvaluatePage> with Auto
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext context, int index) {
_index = index;
return listItem(
controller.orderInfoModel.bookList![index],index,controller
/*orderEvaluates,*//*controllers*/);
......@@ -78,7 +80,7 @@ class _UserOrderEvaluatePageState extends State<UserOrderEvaluatePage> with Auto
text: '提交评价',
isEnabled: controller.enable,
onPressed: () {
controller._focusNode.unfocus();
controller.focusNodes[_index]!.unfocus();
for(int i=0;i<orderEvaluates.length;i++){
// orderEvaluates[i].comments=controllers[i].text.toString();
}
......@@ -93,19 +95,17 @@ class _UserOrderEvaluatePageState extends State<UserOrderEvaluatePage> with Auto
],
),
),
),);
),),);
}
Widget listItem(BookListModel bookListModel,int index,UserOrderEvaluateController myController) {
// myController.updateText(bookListModel.comments.toString());
// _focusNode = myController.focusNodes[index]!;
int indexToUpdate = orderEvaluates.indexWhere((obj) => obj.recordId == bookListModel.recordId);
if(indexToUpdate==-1){
if(indexToUpdate==-1 && myController.judgeComments(bookListModel)){
OrderEvaluate evaluate = OrderEvaluate(recordId: bookListModel.recordId,rating: bookListModel.rating,comments: bookListModel.comments);
orderEvaluates.add(evaluate);
indexToUpdate = orderEvaluates.length-1;
}
return Container(
margin:
......@@ -206,7 +206,7 @@ class _UserOrderEvaluatePageState extends State<UserOrderEvaluatePage> with Auto
emptyColor: Colours.cE2,
),
onRating: (double) {
orderEvaluates[index].rating=double;
orderEvaluates[indexToUpdate].rating=double;
myController.setCanClick(double: double);
print(double);
},
......@@ -229,12 +229,12 @@ class _UserOrderEvaluatePageState extends State<UserOrderEvaluatePage> with Auto
fontSize: 14.w, height: 1.5, color: Colours.c6)),
maxLines: 5,
onChanged: (text){
orderEvaluates[index].comments=myController._commentsControllers[index].text;
myController.setCanClick(double:orderEvaluates[index].rating??0);
orderEvaluates[indexToUpdate].comments=myController._commentsControllers[index].text;
myController.setCanClick(double:orderEvaluates[indexToUpdate].rating??0);
},
focusNode: myController._focusNode,
focusNode: myController.focusNodes[index],
controller: myController._commentsControllers[index],
enabled: myController._commentsControllers[index].text.isEmpty,
enabled: myController.ratings[index]!>0?false:true,
onTap: () {
// 在文本框获取焦点时,将光标移动到文本末尾
myController._commentsControllers[index].selection = TextSelection.fromPosition(
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论