Commit 55151ba2 authored by DatHV's avatar DatHV
Browse files

update history point, manager

parent f714cdcc
import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:get/get_rx/src/rx_types/rx_types.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import '../../base/restful_api_viewmodel.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart';
import 'location_address_screen.dart';
import 'models/district_address_model.dart';
import 'models/province_address_model.dart';
......
import 'dart:convert';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/configs/constants.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/screen/otp/forgot_pass_otp_repository.dart';
import 'package:mypoint_flutter_app/screen/otp/otp_screen.dart';
import 'package:mypoint_flutter_app/shared/router_gage.dart';
import '../../base/base_response_model.dart';
import '../../base/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../../model/auth/login_token_response_model.dart';
import '../../permission/biometric_manager.dart';
import '../../preference/data_preference.dart';
......@@ -72,7 +72,7 @@ class LoginViewModel extends RestfulApiViewModel {
final userProfile = value.data;
if (value.isSuccess && userProfile != null) {
await DataPreference.instance.saveUserProfile(userProfile);
Get.toNamed(mainScreen);
Get.offAllNamed(mainScreen);
} else {
DataPreference.instance.clearLoginToken();
final mgs = value.errorMessage ?? Constants.commonError;
......@@ -94,14 +94,12 @@ class LoginViewModel extends RestfulApiViewModel {
showLoading();
client.otpCreateNew(phone).then((value) {
hideLoading();
// TODO: handle error later
if (value.isSuccess) {
if (!value.isSuccess) return;
Get.to(
OtpScreen(
repository: ForgotPassOTPRepository(phone, value.data?.resendAfterSecond ?? Constants.otpTtl),
),
);
}
});
}
......
......@@ -6,6 +6,7 @@ import 'package:mypoint_flutter_app/extensions/string_extension.dart';
import '../../preference/data_preference.dart';
import '../../resources/base_color.dart';
import '../../shared/router_gage.dart';
import '../../widgets/image_loader.dart';
import '../../widgets/measure_size.dart';
import 'models/membership_level_model.dart';
......@@ -95,7 +96,7 @@ class MemberLevelHeaderWidget extends StatelessWidget {
Expanded(
child: GestureDetector(
onTap: () {
Get.toNamed('/pointHistoryScreen');
Get.toNamed(historyPointScreen);
},
behavior: HitTestBehavior.opaque,
child: Column(
......
......@@ -24,7 +24,6 @@ class _MembershipScreenState extends BaseState<MembershipScreen> with BasicState
void initState() {
super.initState();
_viewModel = Get.put(MembershipViewModel());
// _viewModel.getMembershipLevelInfo();
}
@override
......
import 'package:flutter/foundation.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/extensions/collection_extension.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import '../../base/restful_api_viewmodel.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart';
import 'models/membership_info_response.dart';
import 'models/membership_level_model.dart';
import 'models/membership_level_term_and_condition_model.dart';
......@@ -20,7 +21,8 @@ class MembershipViewModel extends RestfulApiViewModel {
if (levels == null || levels!.isEmpty) {
return null;
}
return levels?.safe(selectedTab.value)?.conditions;
final level = levels!.safe(selectedTab.value);
return level?.conditions;
}
@override
......@@ -29,24 +31,42 @@ class MembershipViewModel extends RestfulApiViewModel {
getMembershipLevelInfo();
}
_makeSelectedLevel() {
void _makeSelectedLevel() {
if (levels == null || levels!.isEmpty) {
selectedLevel = null;
return;
}
selectedLevel = levels!.firstWhere((e) => e.levelStartAtDate?.isNotEmpty == true, orElse: () => levels!.first);
try {
selectedLevel = levels!.firstWhere(
(e) => e.levelStartAtDate?.isNotEmpty == true,
orElse: () => levels!.first
);
} catch (e) {
if (kDebugMode) {
print('Failed to select level: $e');
}
selectedLevel = levels!.isNotEmpty ? levels!.first : null;
}
}
getMembershipLevelInfo() async {
Future<void> getMembershipLevelInfo() async {
showLoading();
try {
final response = await client.getMembershipLevelInfo();
if (response.isSuccess && response.data != null) {
membershipInfo.value = response.data;
_makeSelectedLevel();
hideLoading();
} else {
if (kDebugMode) {
print("Failed to get membership info: ${response.errorMessage}");
}
}
} catch (e) {
hideLoading();
if (kDebugMode) {
print("Error fetching membership level info: $e");
}
} finally {
hideLoading();
}
}
}
import 'package:get/get_rx/src/rx_types/rx_types.dart';
import 'package:mypoint_flutter_app/configs/constants.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/screen/mobile_card/models/product_mobile_card_model.dart';
import '../../base/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../../preference/point/point_manager.dart';
import 'models/usable_voucher_model.dart';
......
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import '../../base/restful_api_viewmodel.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../../preference/data_preference.dart';
import '../faqs/faqs_model.dart';
......
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/configs/constants.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import '../../base/restful_api_viewmodel.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../../preference/data_preference.dart';
import 'models/category_notify_item_model.dart';
import 'models/notification_item_model.dart';
......
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../base/base_response_model.dart';
import '../../base/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
import 'model/check_phone_response_model.dart';
import 'model/onboarding_info_model.dart';
......
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/shared/router_gage.dart';
import '../../base/base_response_model.dart';
import '../../base/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../../configs/constants.dart';
import '../../preference/data_preference.dart';
import '../../widgets/custom_toast_message.dart';
......
import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:mypoint_flutter_app/base/base_response_model.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/screen/create_pass/create_pass_screen.dart';
import 'package:mypoint_flutter_app/screen/create_pass/reset_create_password_repository.dart';
import '../../base/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../splash/splash_screen_viewmodel.dart';
import 'otp_viewmodel.dart';
......
// sign_up_otp_repository.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/shared/router_gage.dart';
import '../../base/base_response_model.dart';
import '../../base/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../create_pass/create_pass_screen.dart';
import '../create_pass/signup_create_password_repository.dart';
import '../login/login_screen.dart';
......
import 'package:get/get.dart';
import 'package:flutter/material.dart';
import 'package:mypoint_flutter_app/configs/constants.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../base/base_response_model.dart';
import '../../base/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
import 'model/campaign_detail_model.dart';
import 'model/detail_page_rule_type.dart';
......
......@@ -2,7 +2,7 @@ import 'package:flutter/cupertino.dart';
import 'package:mypoint_flutter_app/extensions/datetime_extensions.dart';
import 'package:mypoint_flutter_app/preference/data_preference.dart';
import 'package:mypoint_flutter_app/screen/personal/personal_gender.dart';
import '../../networking/model_maker.dart';
import '../../configs/callbacks.dart';
import '../location_address/location_address_viewmodel.dart';
enum SectionPersonalEditType {
......
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/screen/personal/personal_edit_item_model.dart';
import 'package:mypoint_flutter_app/screen/personal/personal_gender.dart';
import '../../base/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../../configs/constants.dart';
import '../../preference/data_preference.dart';
import '../../shared/router_gage.dart';
......
......@@ -101,7 +101,10 @@ class _PersonalScreenState extends BaseState<PersonalScreen> with BasicState, Po
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(name, style: const TextStyle(fontSize: 22, fontWeight: FontWeight.bold, color: Colors.white)),
Text(
name,
style: const TextStyle(fontSize: 22, fontWeight: FontWeight.bold, color: Colors.white),
),
if (email.isNotEmpty)
Text(
email,
......@@ -126,12 +129,19 @@ class _PersonalScreenState extends BaseState<PersonalScreen> with BasicState, Po
children: [
Image.asset("assets/images/ic_rank_gray.png", width: 30, height: 30, color: Colors.white),
const SizedBox(width: 4),
Text(level, style: const TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold)),
Text(
level,
style: const TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold),
),
],
),
),
const Spacer(),
Row(
GestureDetector(
onTap: () {
Get.toNamed(historyPointScreen);
},
child: Row(
children: [
Text(
(data.totalPointActive ?? 0).money(CurrencyUnit.point),
......@@ -141,6 +151,7 @@ class _PersonalScreenState extends BaseState<PersonalScreen> with BasicState, Po
const Icon(Icons.chevron_right, color: Colors.white, size: 22),
],
),
),
],
),
],
......@@ -185,16 +196,32 @@ class _PersonalScreenState extends BaseState<PersonalScreen> with BasicState, Po
Widget _buildMenuItems() {
final menuItems = [
{'icon': Icons.monetization_on_outlined, 'title': 'Săn điểm', 'type': 'APP_SCREEN_POINT_HUNTING'},
{
'icon': Icons.monetization_on_outlined,
'assets': 'assets/images/ic_point.png',
'title': 'Săn điểm',
'type': 'APP_SCREEN_POINT_HUNTING',
},
{'icon': Icons.check_box_outlined, 'title': 'Check-in nhận quà', 'type': 'DAILY_CHECKIN'},
{'icon': Icons.emoji_events_outlined, 'title': 'Bảng xếp hạng', 'type': 'APP_SCREEN_LIST_PAYMENT_OF_ELECTRIC'},
{'icon': Icons.border_right, 'title': 'Hoá đơn điện', 'type': 'APP_SCREEN_LIST_PAYMENT_OF_ELECTRIC'},
// {'icon': Icons.emoji_events_outlined, 'title': 'Bảng xếp hạng', 'type': 'APP_SCREEN_LIST_PAYMENT_OF_ELECTRIC'},
{'icon': Icons.gif_box_outlined, 'title': 'Ưu đãi của tôi', 'type': 'APP_SCREEN_MY_PURCHASE_ITEMS'},
{'icon': Icons.receipt_long_outlined, 'title': 'Lịch sử giao dịch', 'sectionDivider': true, 'type': 'APP_SCREEN_TRANSACTION_HISTORIES'},
{'icon': Icons.history_outlined, 'title': 'Lịch sử điểm', 'type': 'APP_SCREEN_SURVERY_APP'},
{'icon': Icons.history_outlined, 'title': 'Lịch sử hoàn điểm', 'type': 'APP_SCREEN_REFUND_HISTORY'},
{
'icon': Icons.receipt_long_outlined,
'title': 'Lịch sử giao dịch',
'sectionDivider': true,
'type': 'APP_SCREEN_TRANSACTION_HISTORIES',
},
{'icon': Icons.history_outlined, 'title': 'Lịch sử điểm', 'type': 'APP_SCREEN_POINT_HISTORY'},
{'icon': Icons.history_edu, 'title': 'Lịch sử hoàn điểm', 'type': 'APP_SCREEN_REFUND_HISTORY'},
{'icon': Icons.account_balance_wallet_outlined, 'title': 'Quản lý tài khoản/thẻ', 'type': 'BANK_ACCOUNT_MANAGER'},
{'icon': Icons.favorite_border, 'title': 'Yêu thích', 'type': 'APP_SCREEN_CATEGORY_TAB_FAVORITE'},
{'icon': Icons.shopping_bag_outlined, 'title': 'Đơn mua', 'sectionDivider': true, 'type': 'APP_SCREEN_ORDER_MENU'},
{
'icon': Icons.shopping_bag_outlined,
'title': 'Đơn mua',
'sectionDivider': true,
'type': 'APP_SCREEN_ORDER_MENU',
},
{'icon': Icons.info_outline, 'title': 'Giới thiệu MyPoint', 'sectionDivider': true, 'type': 'VIEW_WEBSITE_PAGE'},
{'icon': Icons.headset_mic_outlined, 'title': 'Hỗ trợ', 'type': 'APP_SCREEN_CUSTOMER_FEEDBACK'},
{'icon': Icons.settings_outlined, 'title': 'Cài đặt', 'type': 'APP_SCREEN_SETTING'},
......@@ -225,6 +252,13 @@ class _PersonalScreenState extends BaseState<PersonalScreen> with BasicState, Po
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Row(
children: [
if (item['assets'] != null)
Image.asset(
item['assets'] as String,
width: 24,
height: 24,
)
else
Icon(
item['icon'] as IconData,
color: (item['color'] as Color?) ?? Colors.black54,
......
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:mypoint_flutter_app/screen/home/pipi_detail_viewmodel.dart';
import 'package:mypoint_flutter_app/screen/pipi/pipi_detail_viewmodel.dart';
import 'package:mypoint_flutter_app/widgets/image_loader.dart';
import 'models/pipi_detail_model.dart';
import '../home/models/pipi_detail_model.dart';
class PipiDetailScreen extends StatefulWidget {
const PipiDetailScreen({super.key});
......
import 'package:get/get_rx/src/rx_types/rx_types.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import '../../base/restful_api_viewmodel.dart';
import 'models/pipi_detail_model.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../home/models/pipi_detail_model.dart';
class PipiDetailViewModel extends RestfulApiViewModel {
var items = RxList<PipiSupportItemModel>();
......
import 'package:flutter/material.dart';
import '../../widgets/custom_navigation_bar.dart';
class PointHistoryScreen extends StatefulWidget {
const PointHistoryScreen({super.key});
@override
State<PointHistoryScreen> createState() => _PointHistoryScreenState();
}
class _PointHistoryScreenState extends State<PointHistoryScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomNavigationBar(title: "Lịch sử điểm"),
body: SafeArea(
child: Center(child: Text('Point History Screen')),
),
);
}
}
import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/screen/popup_manager/popup_manager_model.dart';
import '../../base/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
class PopupManagerViewModel extends RestfulApiViewModel {
PopupManagerViewModel._();
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment