diff --git a/ios/fastlane/metadata/ko/release_notes.txt b/ios/fastlane/metadata/ko/release_notes.txt index 5c4038e..40c6ef3 100644 --- a/ios/fastlane/metadata/ko/release_notes.txt +++ b/ios/fastlane/metadata/ko/release_notes.txt @@ -1,2 +1,4 @@ 여러분들의 편리한 학교 생활을 위해, 아래와 같은 수정이 이루어졌습니다. - - \ No newline at end of file + - 로그아웃이 안되던 버그 수정 + - 등록된 결제수단이 없는 경우 PIN을 요구하지 않도록 수정 + - 기타 버그 수정 및 UI 개선 diff --git a/ios/fastlane/metadata/review_information/notes.txt b/ios/fastlane/metadata/review_information/notes.txt index 29498c5..1fcd925 100644 --- a/ios/fastlane/metadata/review_information/notes.txt +++ b/ios/fastlane/metadata/review_information/notes.txt @@ -1,8 +1,5 @@ -"디미고 구글 계정으로 로그인" 버튼을 길게(꾹) 눌러 "Email"과 "Password"로 로그인 할 수 있는 페이지로 진입 후, 로그인 해주세요. -Please log in to the page where you can log in to "Email" and "Password" by "Long Press"(press and hold) the "디미고 구글 계정으로 로그인" button. - -Email: testacc@dimipay.io -Password: test1234 +"디미고 구글 계정으로 로그인" 버튼을 길게(꾹) 눌러 "이메일"과 "비밀번호"로 로그인 할 수 있는 페이지로 진입 후, 로그인 해주세요. +Please log in to the page where you can log in to "이메일" and "비밀번호" by "Long Press"(press and hold) the "디미고 구글 계정으로 로그인" button. "카드 등록"은 결제를 위해 필요한 과정이며, 필수가 아닙니다. "나중에 할래요" 버튼을 통해 건너뛸 수 있습니다. "카드 등록" is a necessary process for payment, and it is not required. You can skip it through the "나중에 할래요" button. \ No newline at end of file diff --git a/lib/app/pages/home/controller.dart b/lib/app/pages/home/controller.dart index 9d54fc7..58b80c6 100644 --- a/lib/app/pages/home/controller.dart +++ b/lib/app/pages/home/controller.dart @@ -129,6 +129,15 @@ class HomePageController extends GetxController { Future prefetchAuthAndQR() async { await Future.delayed(const Duration(milliseconds: 200)); + + while (paymentService.paymentMethods == null) { + await Future.delayed(const Duration(milliseconds: 100)); + } + + if (paymentService.paymentMethods!.isEmpty) { + return; + } + if (authService.bioKey.key == null) { await biometricAuth(); } @@ -147,6 +156,14 @@ class HomePageController extends GetxController { } Future requestAuthAndQR() async { + while (paymentService.paymentMethods == null) { + await Future.delayed(const Duration(milliseconds: 100)); + } + + if (paymentService.paymentMethods!.isEmpty) { + return; + } + if (_selectedPaymentMethod.value == null) { return; } diff --git a/lib/app/services/push/repository.dart b/lib/app/services/push/repository.dart index 6f7ff1a..64194f2 100644 --- a/lib/app/services/push/repository.dart +++ b/lib/app/services/push/repository.dart @@ -6,14 +6,7 @@ import 'package:hive_flutter/hive_flutter.dart'; class PushRepository { final ApiProvider api; final String _hiveBoxName = 'pushService'; - late final Box _hiveBox; - - Future _initHiveBox() async { - if (Hive.isBoxOpen(_hiveBoxName)) { - return; - } - _hiveBox = await Hive.openBox(_hiveBoxName); - } + Box? _hiveBox; PushRepository({ApiProvider? api}) : api = api ?? Get.find(); @@ -21,6 +14,15 @@ class PushRepository { await _initHiveBox(); } + Future _initHiveBox() async { + if (_hiveBox != null) return; + if (!Hive.isBoxOpen(_hiveBoxName)) { + _hiveBox = await Hive.openBox(_hiveBoxName); + } else { + _hiveBox = Hive.box(_hiveBoxName); + } + } + Future updateFcmTokenToServer(String token) async { String url = "/fcm"; Map data = {'token': token}; @@ -28,14 +30,17 @@ class PushRepository { } Future getTokenLastUpdated() async { - return await _hiveBox.get('pushTokenLastUpdated'); + await _initHiveBox(); + return _hiveBox?.get('pushTokenLastUpdated'); } Future setTokenLastUpdated(DateTime tokenLastUpdated) async { - await _hiveBox.put('pushTokenLastUpdated', tokenLastUpdated); + await _initHiveBox(); + await _hiveBox?.put('pushTokenLastUpdated', tokenLastUpdated); } Future deleteTokenLastUpdated() async { - await _hiveBox.delete('pushTokenLastUpdated'); + await _initHiveBox(); + await _hiveBox?.delete('pushTokenLastUpdated'); } -} +} \ No newline at end of file diff --git a/lib/app/widgets/snackbar.dart b/lib/app/widgets/snackbar.dart index 29e38fe..e3f0c28 100644 --- a/lib/app/widgets/snackbar.dart +++ b/lib/app/widgets/snackbar.dart @@ -9,6 +9,8 @@ class DPSnackBar { DPColors colorTheme = Theme.of(context).extension()!; DPTypography textTheme = Theme.of(context).extension()!; HapticHelper.feedback(HapticPatterns.success, hapticType: HapticType.heavy); + + if (Get.isSnackbarOpen) Get.closeCurrentSnackbar(); Get.rawSnackbar( titleText: Center( child: Text( @@ -17,10 +19,12 @@ class DPSnackBar { textAlign: TextAlign.center, ), ), + icon: Icon(Icons.info_outline_rounded, color: borderColor ?? colorTheme.primaryBrand,), messageText: Container(), backgroundColor: colorTheme.grayscale100, borderColor: borderColor ?? colorTheme.primaryBrand, borderRadius: 9999, + snackPosition: SnackPosition.TOP, padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), margin: const EdgeInsets.symmetric(horizontal: 24, vertical: 24), animationDuration: const Duration(milliseconds: 500), diff --git a/pubspec.yaml b/pubspec.yaml index 8c39bc9..3734728 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 2.0.4+48 +version: 2.0.5+49 environment: sdk: ">=3.2.3 <4.0.0"