Commit 1f7931e273428cc9354f5a559b34e227f3ae7c0a

Authored by 常守达
1 parent bcb75660

feat(today):选择日期限制

... ... @@ -737,7 +737,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = "Runner/Runner-Debug.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = " 80";
CURRENT_PROJECT_VERSION = " 81";
DEVELOPMENT_TEAM = ZRPLMC329K;
ENABLE_PREVIEWS = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
... ... @@ -816,7 +816,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = " 80";
CURRENT_PROJECT_VERSION = " 81";
DEVELOPMENT_TEAM = ZRPLMC329K;
ENABLE_PREVIEWS = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
... ...
... ... @@ -79,7 +79,9 @@ class TodayController extends GetMaterialController {
UserStateService get userStateService => _userStateService;
late final DateTime firstSelectableDay;
Rx<DateTime> firstSelectableDay = DateTime(
DateTime.now().year, DateTime.now().month - 6, DateTime.now().day)
.obs;
late final DateTime lastSelectableDay;
final selectedDate = DateTime.now().obs;
final focusedDay = DateTime.now().obs;
... ... @@ -136,7 +138,9 @@ class TodayController extends GetMaterialController {
super.onInit();
targetFriendInfo.value = _initialFriendInfo;
final today = DateUtils.dateOnly(DateTime.now());
firstSelectableDay = DateTime(today.year - 1);
firstSelectableDay.value = DateUtils.dateOnly(
DateTime(today.year, today.month - 6, today.day),
);
lastSelectableDay = today;
selectedDate.value = today;
focusedDay.value = today;
... ... @@ -198,13 +202,19 @@ class TodayController extends GetMaterialController {
void changeDate(DateTime date, {DateTime? focused}) {
final normalizedDate = _clampDate(date);
if (!DateUtils.isSameDay(date, lastSelectableDay) &&
!_userStateService.isVip) {
toPremiumPage();
return;
}
selectedDate.value = normalizedDate;
focusedDay.value = _clampDate(focused ?? normalizedDate);
}
DateTime _clampDate(DateTime date) {
final normalizedDate = DateUtils.dateOnly(date);
if (normalizedDate.isBefore(firstSelectableDay)) return firstSelectableDay;
if (normalizedDate.isBefore(firstSelectableDay.value))
return firstSelectableDay.value;
if (normalizedDate.isAfter(lastSelectableDay)) return lastSelectableDay;
return normalizedDate;
}
... ... @@ -406,6 +416,12 @@ class TodayController extends GetMaterialController {
v2ActivityTarget.value = null;
}
}
// Future.delayed(const Duration(milliseconds: 5000), () {
// firstSelectableDay.value = DateUtils.dateOnly(
// DateTime(
// DateTime.now().year, DateTime.now().month, DateTime.now().day - 1),
// );
// });
}
void _clearRealTimeData() {
... ... @@ -536,7 +552,7 @@ class TodayController extends GetMaterialController {
final PlatformHostApi _platformHostApi = PlatformHostApi();
Future<void> getProductList() async {
final result = await _payApi.getProductList(10);
final result = await _payApi.getProductList();
if (result is! AppSuccess<PayProductListResponse>) return;
final products = (result.data.productList ?? const <PayProduct>[])
... ... @@ -601,8 +617,12 @@ class TodayController extends GetMaterialController {
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
checkAddFriendVisible();
checkHrvAdBannerVisible();
checkHealthDataAuthCardVisible();
if (state == AppLifecycleState.resumed) {
checkAddFriendVisible();
checkHrvAdBannerVisible();
checkHealthDataAuthCardVisible();
unawaited(loadDataForDate(selectedDate.value));
}
}
}
... ...
... ... @@ -323,7 +323,7 @@ class TodayTabBody extends StatelessWidget {
daysOfWeekHeight: _weekRowsHeight / 2,
rowHeight: _weekRowsHeight / 2,
focusedDay: controller.focusedDay.value,
firstDay: controller.firstSelectableDay,
firstDay: controller.firstSelectableDay.value,
lastDay: controller.lastSelectableDay,
currentDay: controller.lastSelectableDay,
locale: Localizations.localeOf(context).toString(),
... ... @@ -370,11 +370,17 @@ class TodayTabBody extends StatelessWidget {
const SizedBox(width: 12),
GestureDetector(
onTap: () async {
if (!Get.find<UserStateService>().isVip) {
controller.toPremiumPage();
return;
}
final picked = await showReportDatePickerSheet(
context: context,
period: ReportPeriod.day,
selectedDate: controller.selectedDate.value,
weekStart: controller.selectedDate.value,
maxDate: controller.lastSelectableDay,
minDate: controller.firstSelectableDay.value,
);
if (picked != null) {
controller.changeDate(picked);
... ...
... ... @@ -168,7 +168,7 @@ class MembershipOfferController extends GetxController {
final yearlyProductAppleInfo = Rxn<AppleProductInfo>();
Future<void> getProductList() async {
final result = await _payApi.getProductList(10);
final result = await _payApi.getProductList();
if (result is! AppSuccess<PayProductListResponse>) return;
final products = (result.data.productList ?? const <PayProduct>[])
... ...
... ... @@ -143,7 +143,7 @@ class PurchaseController extends GetxController {
plans.clear();
selectedIndex.value = 0;
try {
final result = await _payApi.getProductList(1);
final result = await _payApi.getProductList();
if (result is! AppSuccess<PayProductListResponse>) return;
final products = (result.data.productList ?? const <PayProduct>[])
... ...
... ... @@ -11,13 +11,13 @@ class PayApi {
final DioClient _dioClient;
Future<AppResult<PayProductListResponse>> getProductList(int productType) {
Future<AppResult<PayProductListResponse>> getProductList({int? productType}) {
return safeCall(
call: () async {
final response = await _dioClient.dio.get(
ApiPaths.paymentProducts,
queryParameters: {
'product_type': productType,
'product_type': productType ?? 1,
'product_channel': 2,
},
);
... ...