diff --git a/ln_jq_app/android/app/src/main/AndroidManifest.xml b/ln_jq_app/android/app/src/main/AndroidManifest.xml index de6a7dc..6c8fcbe 100644 --- a/ln_jq_app/android/app/src/main/AndroidManifest.xml +++ b/ln_jq_app/android/app/src/main/AndroidManifest.xml @@ -19,7 +19,7 @@ + android:icon="@mipmap/logo"> const QrCodePage()); + if (scanResult == true) { + getUserBindCarInfo(); + refreshAppui(); + } + } void getUserBindCarInfo() async { if (StorageService.to.hasVehicleInfo) { diff --git a/ln_jq_app/lib/pages/c_page/car_info/view.dart b/ln_jq_app/lib/pages/c_page/car_info/view.dart index 35ab41e..9022169 100644 --- a/ln_jq_app/lib/pages/c_page/car_info/view.dart +++ b/ln_jq_app/lib/pages/c_page/car_info/view.dart @@ -173,12 +173,7 @@ class CarInfoPage extends GetView { isButton ? GestureDetector( onTap: () async { - //判断是否绑定成功 - var scanResult = await Get.to(() => const QrCodePage()); - if (scanResult == true) { - controller.getUserBindCarInfo(); - refreshAppui(); - } + controller.doQrCode(); }, child: Container( margin: EdgeInsetsGeometry.only(left: 10.w), diff --git a/ln_jq_app/lib/pages/c_page/reservation/controller.dart b/ln_jq_app/lib/pages/c_page/reservation/controller.dart index 4383105..da3ac1e 100644 --- a/ln_jq_app/lib/pages/c_page/reservation/controller.dart +++ b/ln_jq_app/lib/pages/c_page/reservation/controller.dart @@ -9,6 +9,7 @@ import 'package:ln_jq_app/common/model/base_model.dart'; import 'package:ln_jq_app/common/model/station_model.dart'; import 'package:ln_jq_app/common/model/vehicle_info.dart'; import 'package:ln_jq_app/pages/b_page/site/controller.dart'; +import 'package:ln_jq_app/pages/qr_code/view.dart'; import 'package:ln_jq_app/storage_service.dart'; import '../../../common/styles/theme.dart'; @@ -304,7 +305,7 @@ class C_ReservationController extends GetxController with BaseControllerMixin { showToast("请先选择加氢站"); return; } - // 将选择的日期和时间组合成一个完整的 DateTime 对象 + // 将选择的日期和时间组合成一个完整的 DateTime 对象 final reservationStartDateTime = DateTime( selectedDate.value.year, selectedDate.value.month, @@ -353,6 +354,11 @@ class C_ReservationController extends GetxController with BaseControllerMixin { var result = BaseModel.fromJson(responseData.data); if (result.code == 0) { showSuccessToast("预约成功"); + + //打开预约列表 + Future.delayed(const Duration(milliseconds: 800), () { + getReservationList(); + }); } else { showErrorToast(result.message); } @@ -606,6 +612,14 @@ class C_ReservationController extends GetxController with BaseControllerMixin { } } + void doQrCode() async { + var scanResult = await Get.to(() => const QrCodePage()); + if (scanResult == true) { + getUserBindCarInfo(); + refreshAppui(); + } + } + void getJqinfo() async { try { HttpService.to.setBaseUrl(AppTheme.test_service_url); @@ -707,6 +721,22 @@ class C_ReservationController extends GetxController with BaseControllerMixin { dismissLoading(); HttpService.to.setBaseUrl(AppTheme.test_service_url); HttpService.to.dio.options.headers = originalHeaders; + + // 如果未绑定车辆,且本次会话尚未提示过,则弹出提示 + if (!StorageService.to.hasShownBindVehicleDialog) { + Future.delayed(const Duration(milliseconds: 500), () { + DialogX.to.showConfirmDialog( + title: '当前尚未绑定车辆', + confirmText: "去绑定", + cancelText: "稍后", + onConfirm: () { + doQrCode(); + }, + ); + // 标记为已显示,本次会话不再提示 + StorageService.to.markBindVehicleDialogAsShown(); + }); + } } } diff --git a/ln_jq_app/lib/pages/c_page/reservation/view.dart b/ln_jq_app/lib/pages/c_page/reservation/view.dart index fec144b..b2a45ae 100644 --- a/ln_jq_app/lib/pages/c_page/reservation/view.dart +++ b/ln_jq_app/lib/pages/c_page/reservation/view.dart @@ -201,12 +201,7 @@ class ReservationPage extends GetView { isButton ? GestureDetector( onTap: () async { - //判断是否绑定成功 - var scanResult = await Get.to(() => const QrCodePage()); - if (scanResult == true) { - controller.getUserBindCarInfo(); - refreshAppui(); - } + controller.doQrCode(); }, child: Container( margin: EdgeInsetsGeometry.only(left: 10.w), diff --git a/ln_jq_app/lib/storage_service.dart b/ln_jq_app/lib/storage_service.dart index 44f8634..06df618 100644 --- a/ln_jq_app/lib/storage_service.dart +++ b/ln_jq_app/lib/storage_service.dart @@ -20,9 +20,10 @@ class StorageService extends GetxService { static const String _phoneKey = 'user_phone'; static const String _idCardKey = 'user_id_card'; static const String _vehicleInfoKey = 'vehicle_info'; - // 加氢站登录凭证的键名 static const String _stationAccountKey = 'station_account'; static const String _stationPasswordKey = 'station_password'; + // 新增:用于标记“绑定车辆”弹窗是否已在本会话中显示过 + static const String _bindDialogShownKey = 'bind_vehicle_dialog_shown'; static StorageService get to => Get.find(); @@ -41,10 +42,13 @@ class StorageService extends GetxService { String? get idCard => _box.read(_idCardKey); bool get hasVehicleInfo => _box.hasData(_vehicleInfoKey); - // 记住密码:获取加氢站账号和密码 String? get stationAccount => _box.read(_stationAccountKey); String? get stationPassword => _box.read(_stationPasswordKey); + // 新增:获取“绑定车辆”弹窗是否已显示的标志 + bool get hasShownBindVehicleDialog => _box.read(_bindDialogShownKey) ?? false; + + VehicleInfo? get vehicleInfo { final vehicleJson = _box.read(_vehicleInfoKey); if (vehicleJson != null) { @@ -84,17 +88,21 @@ class StorageService extends GetxService { await _box.write(_vehicleInfoKey, vehicleInfoToJson(data)); } - // 保存加氢站登录凭证 Future saveStationCredentials(String account, String password) async { await _box.write(_stationAccountKey, account); await _box.write(_stationPasswordKey, password); } + // 新增:标记“绑定车辆”弹窗已显示 + Future markBindVehicleDialogAsShown() async { + await _box.write(_bindDialogShownKey, true); + } + + Future clearVehicleInfo() async { await _box.remove(_vehicleInfoKey); } - // 清除加氢站登录凭证 Future clearStationCredentials() async { await _box.remove(_stationAccountKey); await _box.remove(_stationPasswordKey); @@ -108,6 +116,7 @@ class StorageService extends GetxService { await _box.remove(_phoneKey); await _box.remove(_idCardKey); await clearVehicleInfo(); - // 注意:登出时我们不清除“记住的密码”,以便下次用户登录时仍然可以回填 + // 登出时,清除“绑定车辆”弹窗的显示记录,以便下次登录时可以再次弹出 + await _box.remove(_bindDialogShownKey); } }