Commit f7713ffe7677afb7660f1a14a432efc9c9e68be7

Authored by wdn127929
1 parent 48c1d68d

订座详情页修改金额和人数键盘上方自定义 完成 按钮 方法里没有让输入框失去焦点,导致获得焦点方法重复执行

... ... @@ -87,7 +87,8 @@ class NotebookDetailPageSim extends StatefulWidget {
}
}
class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
class NotebookDetailPageSimState extends State<NotebookDetailPageSim>
with WidgetsBindingObserver {
NotebookDetailModel? detailModel;
late NotebookDetail detailEntity;
... ... @@ -142,6 +143,10 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
List<UploadImgModel> remarkImgs = [];
OverlayEntry? overlayEntry;
// bool hasAuthority = true; //
bool isback = false;
@override
void initState() {
// TODO: implement initState
... ... @@ -192,6 +197,35 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
}
_cancelState(() {});
});
WidgetsBinding.instance.addObserver(this);
// if (Platform.isIOS) {
pnumF.addListener(() async {
if (pnumF.hasFocus) {
showOverlay(context);
} else {
//人数
bool sucess = await detailModel!
.upReserveInfo(context, widget.rid, actualPum: pnumC.text);
if (sucess) {
bus.emit("refresh_book_list"); //刷新已预订列表
EventBus().emit("refresh_tablemanager"); //刷新桌位
await _getReserveDetail(isShowLoading: false, showCicle: true);
}
removeOverlay();
}
});
priceF.addListener(() {
if (priceF.hasFocus) {
showOverlay(context);
} else {
// 失去焦点时候的操作
_updateMoney();
}
});
_depositNode.addListener(() {
if (_depositNode.hasFocus) {
... ... @@ -212,7 +246,7 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
_cancelState(() {});
});
bus.on("refresh_detail", (args) {
_getReserveDetail();
_getReserveDetail(isShowLoading: false, showCicle: true);
});
bus.on("refresh_detail_deposit", (args) {
_getReserveDepositByRid(); //刷新订金数据
... ... @@ -226,6 +260,123 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
});
}
showOverlay(BuildContext? context) {
if (overlayEntry != null) return;
OverlayState overlayState = Overlay.of(context!);
overlayEntry = OverlayEntry(builder: (context) {
return Positioned(
bottom: MediaQuery.of(context).viewInsets.bottom,
right: 0.0,
left: 0.0,
child: InputDoneView(
callback: () {
removeOverlay();
if (pnumF.hasFocus) {
pnumF.unfocus();
}
if (priceF.hasFocus) {
priceF.unfocus();
}
// _updateMoney();
},
));
});
overlayState.insert(overlayEntry!);
}
removeOverlay() {
if (overlayEntry != null) {
overlayEntry!.remove();
overlayEntry = null;
// 当前是安卓系统并且在焦点聚焦的情况下
// if ( widget.focusNode!.hasFocus) {
// if (isKeyboardActived) {
// isKeyboardActived = false;
// // 使输入框失去焦点
// if (pnumF.hasFocus) {
// pnumF.unfocus();
// }
// // 使输入框失去焦点
// if (priceF.hasFocus) {
// priceF.unfocus();
// }
// // return;
// }
}
}
@override
void didChangeMetrics() {
super.didChangeMetrics();
WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) {
print(
'MediaQuery.of(context).viewInsets.bottom ${MediaQuery.of(context).viewInsets.bottom}');
if (MediaQuery.of(context).viewInsets.bottom > 0) {
//关闭键盘
showOverlay(context);
} else {
//显示键盘
removeOverlay();
// (pnumF.hasFocus || priceF.hasFocus)
}
}
});
}
/// 修改金额
_updateMoney() async {
if (detailModel!.prestrTF == null || detailModel!.prestrTF == "") {
if (detailModel!.numController.text.trim().length > 0) {
//修改之前无内容,不弹框
detailModel!.prestrTF = detailModel!.numController.text;
await detailModel!.upReserveInfo(context, widget.rid,
conAmount: detailModel!.prestrTF);
if (isback) {
Navigator.of(context).pop();
} else {
bus.emit("refresh_detail");
}
}
} else {
//修改之前有内容,则弹框
DialogUtil.cupertinoAlertDialog(context,
title: "是否修改",
content: "金额已修改,是否保存为新修改的金额",
lTitle: "不保存",
rTitle: "确认修改", lCallback: () {
print("取消");
if (isback) {
Navigator.of(context).pop();
} else {
detailModel!.numController.text =
detailModel!.prestrTF == null ? "" : detailModel!.prestrTF!;
detailModel!.strTF = detailModel!.numController.text;
}
}, rCallback: () async {
print("确定");
detailModel!.prestrTF = detailModel!.numController.text;
await detailModel!.upReserveInfo(context, widget.rid,
conAmount: detailModel!.prestrTF);
if (isback) {
Navigator.of(context).pop();
} else {
bus.emit("refresh_detail");
}
});
}
removeOverlay();
}
///获取七牛云token
///
_getQiniuInfo() async {
... ... @@ -348,7 +499,7 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
// if (beginMinute == 15) {
// beginMinute = 30;
// } else
if (beginMinute == 45) {
if (beginMinute == 45) {
beginHour++;
beginMinute = 0;
}
... ... @@ -543,15 +694,15 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
// detailModel.selectIndex = detailEntity.actual_pum != null
// ? personNumList.indexOf(detailEntity.actual_pum)
// : null;
pnumC.text = detailEntity.actual_pum??'';
pnumC.text = detailEntity.actual_pum ?? '';
if (detailEntity.con_amount != null) {
detailModel!.prestrTF = detailEntity.con_amount;
detailModel!.numController.text = detailEntity.con_amount??"";
detailModel!.numController.text = detailEntity.con_amount ?? "";
}
if (detailEntity.con_amount != null) {
detailModel!.prestrTF = detailEntity.con_amount;
detailModel!.strTF = detailEntity.con_amount;
detailModel!.numController.text = detailEntity.con_amount??"";
detailModel!.numController.text = detailEntity.con_amount ?? "";
}
// cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
... ... @@ -1587,7 +1738,7 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
if (contact != null) {
setState(() {
String? fullName =
contact.fullName?.replaceAll(new RegExp(r"\s+\b|\b\s"), "")??'';
contact.fullName?.replaceAll(new RegExp(r"\s+\b|\b\s"), "") ?? '';
// String? phone =
// contact.phoneNumbers![0].replaceAll(new RegExp(r"\s+\b|\b\s"), "");
// if (fullName.compareTo(phone) == 0) {
... ... @@ -1596,7 +1747,8 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
// fullName = contact.fullName!;
// }
detailModel!.phoneController.text =
contact.selectedPhoneNumber?.replaceAll(new RegExp(r"\s+"), "") ?? '';
contact.selectedPhoneNumber?.replaceAll(new RegExp(r"\s+"), "") ??
'';
nameStr = fullName;
// _homeEnterModel.nameController.text = fullName + _nameSuffix();
_addNameSuffix(fullName, _nameSuffix());
... ... @@ -1628,7 +1780,7 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
detailModel!.nameController.text.endsWith(suffix!)) {
return;
}
detailModel!.nameController.text = (name??"") + (suffix??"");
detailModel!.nameController.text = (name ?? "") + (suffix ?? "");
}
//姓名后缀
... ... @@ -2367,7 +2519,12 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
if (widget.fromNotify) {
NavigatorUtil.goHomePageSim(context, initialIndex: 0);
} else {
Navigator.of(context).pop();
if (priceF.hasFocus) {
isback = true;
priceF.unfocus();
} else {
Navigator.of(context).pop();
}
}
},
),
... ... @@ -2642,24 +2799,24 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
focusNode: pnumF,
uid: widget.uid,
callback: () async {
bool sucess =
await detailModel!
.upReserveInfo(
context,
widget.rid,
actualPum:
pnumC
.text);
if (sucess) {
bus.emit(
"refresh_book_list"); //刷新已预订列表
EventBus().emit(
"refresh_tablemanager"); //刷新桌位
await _getReserveDetail(
showCicle: false);
}
// bool sucess =
// await detailModel!
// .upReserveInfo(
// context,
// widget.rid,
// actualPum:
// pnumC
// .text);
// if (sucess) {
// bus.emit(
// "refresh_book_list"); //刷新已预订列表
// EventBus().emit(
// "refresh_tablemanager"); //刷新桌位
// await _getReserveDetail(
// showCicle: false);
// }
})),
HEmptyView(60),
Expanded(
... ... @@ -5034,6 +5191,11 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
NavigatorUtil.goHomePageSim(context, initialIndex: 0);
return true;
}
if (priceF.hasFocus) {
isback = true;
priceF.unfocus();
return false;
}
Navigator.of(context).pop();
return true;
},
... ... @@ -5151,6 +5313,7 @@ class TitleAndBtn extends StatelessWidget {
}
class TitleAndTextfield extends StatefulWidget {
final BuildContext? context;
final String? title;
final String? bookNum;
final List<String>? pnumlist;
... ... @@ -5165,6 +5328,7 @@ class TitleAndTextfield extends StatefulWidget {
const TitleAndTextfield(
{Key? key,
this.context,
this.title,
this.bookNum,
this.pnumlist,
... ... @@ -5181,11 +5345,15 @@ class TitleAndTextfield extends StatefulWidget {
_TitleAndTextfieldState createState() => _TitleAndTextfieldState();
}
class _TitleAndTextfieldState extends State<TitleAndTextfield>
with WidgetsBindingObserver {
class _TitleAndTextfieldState extends State<TitleAndTextfield> {
// with WidgetsBindingObserver {
// FocusNode numberFocusNode = new FocusNode();
OverlayEntry? overlayEntry;
// bool hasAuthority = true; //
// OverlayEntry? overlayEntry;
// // bool hasAuthority = true; //
// // 当前键盘是否是激活状态
// bool isKeyboardActived = false;
@override
void initState() {
super.initState();
... ... @@ -5203,73 +5371,90 @@ class _TitleAndTextfieldState extends State<TitleAndTextfield>
// hasAuthority = false;
// }
WidgetsBinding.instance.addObserver(this);
// if (Platform.isIOS) {
widget.focusNode!.addListener(() {
if (widget.focusNode!.hasFocus && mounted) {
showOverlay(context);
} else {
if (widget.isPrice) {
_updateMoney();
} else {
//人数
widget.callback!();
}
removeOverlay();
}
});
// WidgetsBinding.instance.addObserver(this);
// // if (Platform.isIOS) {
// widget.focusNode!.addListener(() {
// if (widget.focusNode!.hasFocus) {
// showOverlay(widget.context);
// } else {
// // 失去焦点时候的操作
// isKeyboardActived = false;
// if (widget.isPrice) {
// _updateMoney();
// } else {
// //人数
// widget.callback!();
// }
// removeOverlay();
// }
// });
// }
}
@override
void dispose() {
removeOverlay();
super.dispose();
WidgetsBinding.instance.removeObserver(this);
}
// @override
// void dispose() {
// removeOverlay();
// super.dispose();
// WidgetsBinding.instance.removeObserver(this);
// }
showOverlay(BuildContext context) {
if (overlayEntry != null) return;
OverlayState overlayState = Overlay.of(context);
overlayEntry = OverlayEntry(builder: (context) {
return Positioned(
bottom: MediaQuery.of(context).viewInsets.bottom,
right: 0.0,
left: 0.0,
child: InputDoneView(
callback: () {
removeOverlay();
// _updateMoney();
},
));
});
// showOverlay(BuildContext? context) {
// if (overlayEntry != null) return;
overlayState.insert(overlayEntry!);
}
// isKeyboardActived = true;
removeOverlay() {
if (overlayEntry != null) {
overlayEntry!.remove();
overlayEntry = null;
}
}
// OverlayState overlayState = Overlay.of(context!);
// overlayEntry = OverlayEntry(builder: (context) {
// return Positioned(
// bottom: MediaQuery.of(context).viewInsets.bottom,
// right: 0.0,
// left: 0.0,
// child: InputDoneView(
// callback: () {
// removeOverlay();
// // _updateMoney();
// },
// ));
// });
// overlayState.insert(overlayEntry!);
// }
// removeOverlay() {
// if (overlayEntry != null) {
// overlayEntry!.remove();
// overlayEntry = null;
// // 当前是安卓系统并且在焦点聚焦的情况下
// // if ( widget.focusNode!.hasFocus) {
// if (isKeyboardActived) {
// isKeyboardActived = false;
// // 使输入框失去焦点
// widget.focusNode!.unfocus();
// // return;
// }
// }
// }
// @override
void didChangeMetrics() {
super.didChangeMetrics();
WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) {
if (MediaQuery.of(context).viewInsets.bottom == 0) {
//关闭键盘
removeOverlay();
} else {
//显示键盘
showOverlay(context);
}
}
});
}
// void didChangeMetrics() {
// super.didChangeMetrics();
// WidgetsBinding.instance.addPostFrameCallback((_) {
// if (mounted) {
// print(
// 'MediaQuery.of(context).viewInsets.bottom ${MediaQuery.of(context).viewInsets.bottom}');
// if (MediaQuery.of(context).viewInsets.bottom == 0) {
// //关闭键盘
// removeOverlay();
// } else {
// //显示键盘
// showOverlay(context);
// }
// }
// });
// }
handlePostFrame(_) {
// if (_scrollController.hasClients) {
... ... @@ -5291,40 +5476,40 @@ class _TitleAndTextfieldState extends State<TitleAndTextfield>
// }
}
/// 修改金额
_updateMoney() async {
removeOverlay();
if (widget.detailModel!.prestrTF == null ||
widget.detailModel!.prestrTF == "") {
if (widget.detailModel!.numController.text.trim().length > 0) {
//修改之前无内容,不弹框
widget.detailModel!.prestrTF = widget.detailModel!.numController.text;
await widget.detailModel!.upReserveInfo(context, widget.rid,
conAmount: widget.detailModel!.prestrTF);
bus.emit("refresh_detail");
}
} else {
//修改之前有内容,则弹框
DialogUtil.cupertinoAlertDialog(context,
title: "是否修改",
content: "金额已修改,是否保存为新修改的金额",
lTitle: "不保存",
rTitle: "确认修改", lCallback: () {
print("取消");
widget.detailModel!.numController.text =
widget.detailModel!.prestrTF == null
? ""
: widget.detailModel!.prestrTF!;
widget.detailModel!.strTF = widget.detailModel!.numController.text;
}, rCallback: () async {
print("确定");
widget.detailModel!.prestrTF = widget.detailModel!.numController.text;
await widget.detailModel!.upReserveInfo(context, widget.rid,
conAmount: widget.detailModel!.prestrTF);
bus.emit("refresh_detail");
});
}
}
// /// 修改金额
// _updateMoney() async {
// removeOverlay();
// if (widget.detailModel!.prestrTF == null ||
// widget.detailModel!.prestrTF == "") {
// if (widget.detailModel!.numController.text.trim().length > 0) {
// //修改之前无内容,不弹框
// widget.detailModel!.prestrTF = widget.detailModel!.numController.text;
// await widget.detailModel!.upReserveInfo(context, widget.rid,
// conAmount: widget.detailModel!.prestrTF);
// bus.emit("refresh_detail");
// }
// } else {
// //修改之前有内容,则弹框
// DialogUtil.cupertinoAlertDialog(context,
// title: "是否修改",
// content: "金额已修改,是否保存为新修改的金额",
// lTitle: "不保存",
// rTitle: "确认修改", lCallback: () {
// print("取消");
// widget.detailModel!.numController.text =
// widget.detailModel!.prestrTF == null
// ? ""
// : widget.detailModel!.prestrTF!;
// widget.detailModel!.strTF = widget.detailModel!.numController.text;
// }, rCallback: () async {
// print("确定");
// widget.detailModel!.prestrTF = widget.detailModel!.numController.text;
// await widget.detailModel!.upReserveInfo(context, widget.rid,
// conAmount: widget.detailModel!.prestrTF);
// bus.emit("refresh_detail");
// });
// }
// }
@override
Widget build(BuildContext context) {
... ...
... ... @@ -183,13 +183,13 @@ class TableManagerModel with ChangeNotifier {
night =
userModel.user!.night!.isEmpty ? "00:00-00:00" : userModel.user!.night;
userModel.user!.morning!.isEmpty
? dailyMap.putIfAbsent("morning", () => "")
? dailyMap.putIfAbsent("morning", () => [])
: dailyMap.putIfAbsent("morning", () => _getHourAndMinute(morning!, 1));
userModel.user!.noon!.isEmpty
? dailyMap.putIfAbsent("noon", () => "")
? dailyMap.putIfAbsent("noon", () => [])
: dailyMap.putIfAbsent("noon", () => _getHourAndMinute(noon!, 2));
userModel.user!.night!.isEmpty
? dailyMap.putIfAbsent("night", () => "")
? dailyMap.putIfAbsent("night", () => [])
: dailyMap.putIfAbsent("night", () => _getHourAndMinute(night!, 3));
if (dateTime.isBefore(DateTime.parse(dateTime.year.toString() +
"-" +
... ... @@ -239,7 +239,13 @@ class TableManagerModel with ChangeNotifier {
currTimeIndex = 3;
} else {
//过了晚市
currTimeIndex = 3;
if (morning != '00:00-00:00') {
currTimeIndex = 1;
} else if (noon != '00:00-00:00') {
currTimeIndex = 2;
} else if (night != '00:00-00:00') {
currTimeIndex = 3;
}
}
selectDateStr = returnDayDateStr(dateTime);
selectWeekAndLunarCalendar = returnWeekAndLunarCalendar(dateTime, context);
... ... @@ -793,7 +799,7 @@ class TableManagerModel with ChangeNotifier {
'edate': '${end}',
// 'ddate_interval': currTimeIndex.toString()
};
(bool, bool) result = await (
(bool, bool) result = await (
_getOldReserve(context, params, showloading, selfDismiss: selfDismiss),
getBanquetByDate(context, banquetmap,
showLoading: showloading, selfDismiss: selfDismiss)
... ... @@ -801,10 +807,9 @@ class TableManagerModel with ChangeNotifier {
if (result.$1 && result.$2) {
return true;
}else{
} else {
return false;
}
}
Future<bool> _getOldReserve(context, params, showloading,
... ... @@ -1379,8 +1384,7 @@ class TableManagerModel with ChangeNotifier {
}
//获取区域数据
Future<List<AreaSunModel>?> getRegionBySellerid(
BuildContext context) async {
Future<List<AreaSunModel>?> getRegionBySellerid(BuildContext context) async {
Map<String, String?> params = {
"sellerid": Provider.of<UserModel>(context, listen: false).user!.sellerid
};
... ...