378 lines
20 KiB
Dart
378 lines
20 KiB
Dart
import 'package:ef/ef.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutterflow_ui/flutterflow_ui.dart';
|
|
import 'package:vbvs_app/common/util/FitTool.dart';
|
|
import 'package:vbvs_app/common/util/MyUtils.dart';
|
|
|
|
import 'package:vbvs_app/controller/mh_controller/my_experience_list_controller.dart';
|
|
import 'package:vbvs_app/pages/common/selectDialog.dart';
|
|
import 'package:vbvs_app/pages/mh_page/app_map_location.dart';
|
|
|
|
import '../../common/color/appFontsize.dart';
|
|
|
|
class MyExperienceWidget extends GetView {
|
|
int index;
|
|
BookExperienceListController bookExperienceListController;
|
|
|
|
MyExperienceWidget(
|
|
{required this.index, required this.bookExperienceListController}) {}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Padding(
|
|
padding: const EdgeInsetsDirectional.fromSTEB(15, 0, 15, 0),
|
|
child: Obx(() {
|
|
Map data = {};
|
|
bookExperienceListController.model.experienceStoreModelList
|
|
.forEach((item) {
|
|
if (item["id"] ==
|
|
bookExperienceListController.model.bookInfoList[index]
|
|
["storeId"]) {
|
|
data = item;
|
|
}
|
|
});
|
|
return Container(
|
|
width: MediaQuery.sizeOf(context).width,
|
|
height: MediaQuery.sizeOf(context).height * 0.187,
|
|
margin: const EdgeInsets.only(bottom: 25),
|
|
constraints: const BoxConstraints(
|
|
minHeight: 170,
|
|
),
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(16),
|
|
),
|
|
child: Padding(
|
|
padding: const EdgeInsetsDirectional.fromSTEB(14, 14, 14, 0),
|
|
child: Container(
|
|
width: MediaQuery.sizeOf(context).width,
|
|
height: MediaQuery.sizeOf(context).height * 0.187,
|
|
decoration: BoxDecoration(),
|
|
child: Container(
|
|
width: MediaQuery.sizeOf(context).width,
|
|
height: MediaQuery.sizeOf(context).height * 0.187,
|
|
decoration: BoxDecoration(),
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.max,
|
|
children: [
|
|
Padding(
|
|
padding:
|
|
const EdgeInsetsDirectional.fromSTEB(0, 0, 0, 17),
|
|
child: Container(
|
|
width: MediaQuery.sizeOf(context).width,
|
|
height: MediaQuery.sizeOf(context).height * 0.018,
|
|
constraints: const BoxConstraints(
|
|
minHeight: 20,
|
|
),
|
|
decoration: BoxDecoration(),
|
|
child: Container(
|
|
width: MediaQuery.sizeOf(context).width,
|
|
height: MediaQuery.sizeOf(context).height * 0.018,
|
|
decoration: BoxDecoration(),
|
|
child: Align(
|
|
alignment: const AlignmentDirectional(0, 0),
|
|
child: Text(
|
|
// widget!.name,
|
|
"体验时间:${DateFormat("yyyy-MM-dd HH:mm").format(DateTime.fromMillisecondsSinceEpoch(int.parse("${bookExperienceListController.model.bookInfoList[index]["bookTimeStart"]}")))}",
|
|
style: TextStyle(
|
|
fontFamily: 'Readex Pro',
|
|
color: const Color(0xFF182B7C),
|
|
fontSize: AppFontsize.title_size,
|
|
letterSpacing: 0,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
Container(
|
|
width: MediaQuery.sizeOf(context).width,
|
|
height: 1.rpx,
|
|
decoration: const BoxDecoration(
|
|
color: Color(0xFFAAAFC0),
|
|
),
|
|
),
|
|
Padding(
|
|
padding:
|
|
const EdgeInsetsDirectional.fromSTEB(0, 10, 0, 0),
|
|
child: Container(
|
|
width: MediaQuery.sizeOf(context).width,
|
|
height: MediaQuery.sizeOf(context).height * 0.034,
|
|
constraints: const BoxConstraints(
|
|
minHeight: 55,
|
|
),
|
|
decoration: BoxDecoration(),
|
|
child: Container(
|
|
width: MediaQuery.sizeOf(context).width,
|
|
height: MediaQuery.sizeOf(context).height * 0.034,
|
|
constraints: const BoxConstraints(
|
|
minHeight: 55,
|
|
),
|
|
decoration: BoxDecoration(),
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.max,
|
|
children: [
|
|
Flexible(
|
|
child: Align(
|
|
alignment:
|
|
const AlignmentDirectional(-1, 0),
|
|
child: Text(
|
|
'门店:${data["name"] ?? ""}',
|
|
style: TextStyle(
|
|
fontFamily: 'Readex Pro',
|
|
color: const Color(0xFF9EA4B7),
|
|
fontSize: AppFontsize.small_text_size,
|
|
letterSpacing: 0,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
Flexible(
|
|
child: Align(
|
|
alignment:
|
|
const AlignmentDirectional(-1, 0),
|
|
child: Text(
|
|
'地址:${data['addressDetail'] ?? ""}',
|
|
style: TextStyle(
|
|
fontFamily: 'Readex Pro',
|
|
color: const Color(0xFF9EA4B7),
|
|
fontSize: AppFontsize.small_text_size,
|
|
letterSpacing: 0,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
Flexible(
|
|
child: Align(
|
|
alignment:
|
|
const AlignmentDirectional(-1, 0),
|
|
child: Text(
|
|
'电话:${data["hotline"]} ',
|
|
style: TextStyle(
|
|
fontFamily: 'Readex Pro',
|
|
color: const Color(0xFF9EA4B7),
|
|
fontSize: AppFontsize.small_text_size,
|
|
letterSpacing: 0,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
Padding(
|
|
padding:
|
|
const EdgeInsetsDirectional.fromSTEB(0, 4, 0, 0),
|
|
child: Container(
|
|
constraints: const BoxConstraints(
|
|
minHeight: 40,
|
|
),
|
|
width: MediaQuery.sizeOf(context).width,
|
|
height: MediaQuery.sizeOf(context).height * 0.038,
|
|
decoration: BoxDecoration(),
|
|
child: Container(
|
|
width: MediaQuery.sizeOf(context).width,
|
|
height: MediaQuery.sizeOf(context).height * 0.038,
|
|
decoration: BoxDecoration(),
|
|
child: // Generated code for this Row Widget...
|
|
Row(
|
|
mainAxisSize: MainAxisSize.max,
|
|
mainAxisAlignment: MainAxisAlignment.end,
|
|
children: [
|
|
Flexible(
|
|
child: InkWell(
|
|
onTap: () {
|
|
if (data["hotline"] != null) {
|
|
MyUtils.makePhoneCall(data["hotline"]);
|
|
}
|
|
},
|
|
child: Container(
|
|
width: MediaQuery.sizeOf(context).width *
|
|
0.105,
|
|
height:
|
|
MediaQuery.sizeOf(context).height *
|
|
0.038,
|
|
constraints: const BoxConstraints(
|
|
maxWidth: 50,
|
|
),
|
|
decoration: BoxDecoration(),
|
|
child: Row(
|
|
mainAxisSize: MainAxisSize.max,
|
|
children: [
|
|
const Flexible(
|
|
child: Icon(
|
|
Icons.phone_in_talk,
|
|
color: Color(0xFFD3B684),
|
|
size: 12,
|
|
),
|
|
),
|
|
Text(
|
|
'咨询',
|
|
style: TextStyle(
|
|
fontFamily: 'Readex Pro',
|
|
// color: Color(0xFF9EA4B7),
|
|
color: const Color(0xFF333333),
|
|
fontSize:
|
|
AppFontsize.small_text_size,
|
|
letterSpacing: 0,
|
|
),
|
|
),
|
|
].divide(const SizedBox(width: 13)),
|
|
),
|
|
),
|
|
)),
|
|
Flexible(
|
|
child: InkWell(
|
|
onTap: () {
|
|
AppMapLocation.checkInstalledApps()
|
|
.then((d) {
|
|
if (AppMapLocation
|
|
.availableMapsToNames.isEmpty) {
|
|
showToast("未检测到导航软件");
|
|
} else {
|
|
showOneSelectionDialog(context,
|
|
title: "选择地图",
|
|
arr: AppMapLocation
|
|
.availableMapsToNames,
|
|
checkChange: (index) {
|
|
AppMapLocation.launchMap(
|
|
index,
|
|
data["name"],
|
|
double.parse(
|
|
"${data["latitude"]}"),
|
|
double.parse(
|
|
"${data["longitude"]}"));
|
|
});
|
|
}
|
|
});
|
|
},
|
|
child: Container(
|
|
width: MediaQuery.sizeOf(context).width *
|
|
0.105,
|
|
height:
|
|
MediaQuery.sizeOf(context).height *
|
|
0.038,
|
|
constraints: const BoxConstraints(
|
|
maxWidth: 50,
|
|
),
|
|
decoration: BoxDecoration(),
|
|
child: Row(
|
|
mainAxisSize: MainAxisSize.max,
|
|
children: [
|
|
const Flexible(
|
|
child: Icon(
|
|
Icons.location_on,
|
|
color: Color(0xFFD3B684),
|
|
size: 12,
|
|
),
|
|
),
|
|
Text(
|
|
'导航',
|
|
style: TextStyle(
|
|
fontFamily: 'Readex Pro',
|
|
// color: Color(0xFF9EA4B7),
|
|
color: const Color(0xFF333333),
|
|
fontSize:
|
|
AppFontsize.small_text_size,
|
|
letterSpacing: 0,
|
|
),
|
|
),
|
|
].divide(const SizedBox(width: 13)),
|
|
),
|
|
),
|
|
)),
|
|
Container(
|
|
width:
|
|
MediaQuery.sizeOf(context).width * 0.22,
|
|
height: MediaQuery.sizeOf(context).height *
|
|
0.038,
|
|
constraints: const BoxConstraints(
|
|
maxWidth: 78,
|
|
maxHeight: 100,
|
|
),
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(16),
|
|
),
|
|
child: FFButtonWidget(
|
|
onPressed: () {
|
|
// if (bookExperienceListController
|
|
// .model.bookInfoList[index]
|
|
// ["status"] ==
|
|
// 2) {
|
|
// showCustomConfirmAndCancelDialog(
|
|
// context, "取消预约")
|
|
// .then((d) {
|
|
// if (d == "confirm") {
|
|
// bookExperienceListController
|
|
// .cancelBook(
|
|
// bookExperienceListController
|
|
// .model
|
|
// .bookInfoList[
|
|
// index]["id"],
|
|
// success: () {
|
|
// var rd = jsonDecode(jsonEncode(
|
|
// bookExperienceListController
|
|
// .model
|
|
// .bookInfoList[index]));
|
|
// rd["status"] = -1;
|
|
// rd["addressDetail"] =
|
|
// data['addressDetail'];
|
|
// rd["name"] = data["name"];
|
|
// bookExperienceListController
|
|
// .messageAdd(rd);
|
|
// });
|
|
// }
|
|
// });
|
|
// }
|
|
},
|
|
text: bookExperienceListController
|
|
.model.bookInfoList[index]
|
|
["status"] ==
|
|
2
|
|
? '取消预约'
|
|
: bookExperienceListController
|
|
.model.bookInfoList[index]
|
|
["statusName"],
|
|
options: FFButtonOptions(
|
|
height: 40,
|
|
padding: const EdgeInsetsDirectional
|
|
.fromSTEB(13, 0, 13, 0),
|
|
iconPadding: const EdgeInsetsDirectional
|
|
.fromSTEB(0, 0, 0, 0),
|
|
color: bookExperienceListController
|
|
.model
|
|
.bookInfoList[index]
|
|
["status"] ==
|
|
2
|
|
? const Color(0xFFD3B684)
|
|
: stringToColor("#D3D3D3"),
|
|
textStyle: TextStyle(
|
|
fontFamily: 'Readex Pro',
|
|
color: Colors.white,
|
|
fontSize: AppFontsize.small_text_size,
|
|
letterSpacing: 0,
|
|
),
|
|
elevation: 0,
|
|
borderSide: const BorderSide(
|
|
color: Colors.transparent,
|
|
width: 1,
|
|
),
|
|
borderRadius: BorderRadius.circular(32),
|
|
),
|
|
),
|
|
),
|
|
].divide(const SizedBox(width: 26)),
|
|
)),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}));
|
|
}
|
|
}
|