Commit 417358c5 authored by DatHV's avatar DatHV
Browse files

update authen 401, device manager, interestied category

parent efb4662c
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../resouce/base_color.dart'; import '../../../resources/base_color.dart';
import '../model/affiliate_category_model.dart'; import '../model/affiliate_category_model.dart';
class AffiliateCategory extends StatelessWidget { class AffiliateCategory extends StatelessWidget {
......
...@@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; ...@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'package:mypoint_flutter_app/extensions/num_extension.dart'; import 'package:mypoint_flutter_app/extensions/num_extension.dart';
import '../../../base/base_screen.dart'; import '../../../base/base_screen.dart';
import '../../../base/basic_state.dart'; import '../../../base/basic_state.dart';
import '../../resouce/base_color.dart'; import '../../resources/base_color.dart';
import '../../widgets/back_button.dart'; import '../../widgets/back_button.dart';
import '../../widgets/image_loader.dart'; import '../../widgets/image_loader.dart';
import '../../widgets/measure_size.dart'; import '../../widgets/measure_size.dart';
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../resouce/base_color.dart'; import '../../resources/base_color.dart';
import '../../widgets/custom_navigation_bar.dart'; import '../../widgets/custom_navigation_bar.dart';
import '../affiliate/affiliate_popup_brands.dart'; import '../affiliate/affiliate_popup_brands.dart';
import '../affiliate/model/affiliate_category_model.dart'; import '../affiliate/model/affiliate_category_model.dart';
......
...@@ -3,7 +3,7 @@ import 'package:get/get.dart'; ...@@ -3,7 +3,7 @@ import 'package:get/get.dart';
import 'package:local_auth/local_auth.dart'; import 'package:local_auth/local_auth.dart';
import '../../base/base_screen.dart'; import '../../base/base_screen.dart';
import '../../base/basic_state.dart'; import '../../base/basic_state.dart';
import '../../resouce/base_color.dart'; import '../../resources/base_color.dart';
import '../../widgets/alert/data_alert_model.dart'; import '../../widgets/alert/data_alert_model.dart';
import '../main_tab_screen/main_tab_screen.dart'; import '../main_tab_screen/main_tab_screen.dart';
import 'biometric_viewmodel.dart'; import 'biometric_viewmodel.dart';
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import '../../resouce/base_color.dart'; import '../../resources/base_color.dart';
class Campaign7DayGuideDialog extends StatelessWidget { class Campaign7DayGuideDialog extends StatelessWidget {
final String title; final String title;
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import '../../resouce/base_color.dart'; import '../../resources/base_color.dart';
import 'models/campaign_7day_mission_model.dart'; import 'models/campaign_7day_mission_model.dart';
class Campaign7DayMissionInfoDialog extends StatelessWidget { class Campaign7DayMissionInfoDialog extends StatelessWidget {
......
...@@ -3,7 +3,7 @@ import 'package:get/get.dart'; ...@@ -3,7 +3,7 @@ import 'package:get/get.dart';
import 'package:mypoint_flutter_app/widgets/custom_empty_widget.dart'; import 'package:mypoint_flutter_app/widgets/custom_empty_widget.dart';
import '../../base/base_screen.dart'; import '../../base/base_screen.dart';
import '../../base/basic_state.dart'; import '../../base/basic_state.dart';
import '../../resouce/base_color.dart'; import '../../resources/base_color.dart';
import '../../widgets/bottom_sheet_helper.dart'; import '../../widgets/bottom_sheet_helper.dart';
import '../home/custom_widget/hover_view.dart'; import '../home/custom_widget/hover_view.dart';
import 'campaign_7day_guide_dialog.dart'; import 'campaign_7day_guide_dialog.dart';
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mypoint_flutter_app/widgets/image_loader.dart'; import 'package:mypoint_flutter_app/widgets/image_loader.dart';
import '../../../resouce/base_color.dart'; import '../../../resources/base_color.dart';
import '../models/campaign_7day_mission_model.dart'; import '../models/campaign_7day_mission_model.dart';
class Campaign7DayMissionCardItem extends StatelessWidget { class Campaign7DayMissionCardItem extends StatelessWidget {
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../../resouce/base_color.dart'; import '../../../resources/base_color.dart';
import '../models/campaign_7day_reward_model.dart'; import '../models/campaign_7day_reward_model.dart';
class Campaign7DayRewardItem extends StatelessWidget { class Campaign7DayRewardItem extends StatelessWidget {
......
import 'dart:ui'; import 'dart:ui';
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import 'package:mypoint_flutter_app/resouce/base_color.dart'; import '../../../resources/base_color.dart';
part 'campaign_7day_config_model.g.dart'; part 'campaign_7day_config_model.g.dart';
@JsonSerializable() @JsonSerializable()
......
...@@ -4,7 +4,7 @@ import 'package:mypoint_flutter_app/widgets/alert/data_alert_model.dart'; ...@@ -4,7 +4,7 @@ import 'package:mypoint_flutter_app/widgets/alert/data_alert_model.dart';
import '../../base/base_screen.dart'; import '../../base/base_screen.dart';
import '../../base/basic_state.dart'; import '../../base/basic_state.dart';
import '../../preference/data_preference.dart'; import '../../preference/data_preference.dart';
import '../../resouce/base_color.dart'; import '../../resources/base_color.dart';
import '../../shared/router_gage.dart'; import '../../shared/router_gage.dart';
import '../../widgets/back_button.dart'; import '../../widgets/back_button.dart';
import '../../widgets/support_button.dart'; import '../../widgets/support_button.dart';
...@@ -241,7 +241,7 @@ class _ChangePassScreenState extends BaseState<ChangePassScreen> with BasicState ...@@ -241,7 +241,7 @@ class _ChangePassScreenState extends BaseState<ChangePassScreen> with BasicState
final phone = DataPreference.instance.phone; final phone = DataPreference.instance.phone;
if (phone != null) { if (phone != null) {
if (!found) { if (!found) {
Get.offAllNamed(loginScreen, arguments: phone); Get.offAllNamed(loginScreen, arguments: {'phone': phone});
} }
} else { } else {
DataPreference.instance.clearData(); DataPreference.instance.clearData();
......
...@@ -4,7 +4,7 @@ import 'package:get/get.dart'; ...@@ -4,7 +4,7 @@ import 'package:get/get.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import '../../../widgets/custom_empty_widget.dart'; import '../../../widgets/custom_empty_widget.dart';
import '../../../widgets/custom_search_navigation_bar.dart'; import '../../../widgets/custom_search_navigation_bar.dart';
import '../../resouce/base_color.dart'; import '../../resources/base_color.dart';
import '../invite_friend_campaign/invite_friend_campaign_viewmodel.dart'; import '../invite_friend_campaign/invite_friend_campaign_viewmodel.dart';
class ContactsListScreen extends StatefulWidget { class ContactsListScreen extends StatefulWidget {
......
...@@ -2,9 +2,8 @@ import 'package:flutter/material.dart'; ...@@ -2,9 +2,8 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/screen/create_pass/signup_create_password_repository.dart'; import 'package:mypoint_flutter_app/screen/create_pass/signup_create_password_repository.dart';
import 'package:mypoint_flutter_app/screen/onboarding/onboarding_screen.dart';
import 'package:mypoint_flutter_app/widgets/back_button.dart'; import 'package:mypoint_flutter_app/widgets/back_button.dart';
import '../../resouce/base_color.dart'; import '../../resources/base_color.dart';
import 'create_pass_viewmodel.dart'; import 'create_pass_viewmodel.dart';
class CreatePasswordScreen extends StatelessWidget { class CreatePasswordScreen extends StatelessWidget {
......
...@@ -18,8 +18,7 @@ class ResetCreatePasswordRepository extends RestfulApiViewModel implements ICrea ...@@ -18,8 +18,7 @@ class ResetCreatePasswordRepository extends RestfulApiViewModel implements ICrea
return client.accountPasswordReset(phoneNumber, password).then((value) { return client.accountPasswordReset(phoneNumber, password).then((value) {
hideLoading(); hideLoading();
if (value.status == "success" || value.code == 200) { if (value.status == "success" || value.code == 200) {
print("Reset password success"); Get.offNamed(loginScreen, arguments: {'phone': phoneNumber});
Get.offNamed(loginScreen, arguments: phoneNumber);
} }
return value; return value;
}); });
......
...@@ -43,7 +43,7 @@ class SignUpCreatePasswordRepository extends RestfulApiViewModel implements ICre ...@@ -43,7 +43,7 @@ class SignUpCreatePasswordRepository extends RestfulApiViewModel implements ICre
await DataPreference.instance.saveLoginToken(response.data!); await DataPreference.instance.saveLoginToken(response.data!);
_getUserProfile(); _getUserProfile();
} else { } else {
Get.offNamed(loginScreen, arguments: phoneNumber); Get.offNamed(loginScreen, arguments: {'phone': phoneNumber});
} }
}); });
} }
...@@ -62,7 +62,7 @@ class SignUpCreatePasswordRepository extends RestfulApiViewModel implements ICre ...@@ -62,7 +62,7 @@ class SignUpCreatePasswordRepository extends RestfulApiViewModel implements ICre
} }
} else { } else {
DataPreference.instance.clearLoginToken(); DataPreference.instance.clearLoginToken();
Get.offNamed(loginScreen, arguments: phoneNumber); Get.offNamed(loginScreen, arguments: {'phone': phoneNumber});
} }
}); });
} }
......
import 'package:mypoint_flutter_app/screen/quiz_campaign/quiz_campaign_screen.dart';
import '../mobile_card/models/mobile_service_redeem_data.dart'; import '../mobile_card/models/mobile_service_redeem_data.dart';
class CheckInDataModel { class CheckInDataModel {
final String? campaignCode; final String? campaignCode;
final List<Counter>? counters; final List<Counter>? counters;
Counter? get dailyCounter {
return counters?.firstWhereOrNull((counter) => counter.counterName == 'CUSTOMER_CHECKIN_DAILY_TFC');
}
Counter? get currentCounter {
return counters?.firstWhereOrNull((counter) => counter.counterName == 'CUSTOMER_CHECKIN_NE_TFC');
}
CheckInDataModel({this.campaignCode, this.counters}); CheckInDataModel({this.campaignCode, this.counters});
factory CheckInDataModel.fromJson(Map<String, dynamic> json) { factory CheckInDataModel.fromJson(Map<String, dynamic> json) {
return CheckInDataModel( return CheckInDataModel(
campaignCode: json['campaign_code'], campaignCode: json['campaign_code'],
counters: (json['counters'] as List?) counters: (json['counters'] as List?)?.map((e) => Counter.fromJson(e)).toList(),
?.map((e) => Counter.fromJson(e))
.toList(),
); );
} }
} }
...@@ -40,8 +47,7 @@ class Counter { ...@@ -40,8 +47,7 @@ class Counter {
dynamic parsedValues; dynamic parsedValues;
if (rawValues is List) { if (rawValues is List) {
parsedValues = parsedValues = rawValues.map((e) => CounterValue.fromJson(e as Map<String, dynamic>)).toList();
rawValues.map((e) => CounterValue.fromJson(e as Map<String, dynamic>)).toList();
} else if (rawValues is Map<String, dynamic>) { } else if (rawValues is Map<String, dynamic>) {
parsedValues = CounterValue.fromJson(rawValues); parsedValues = CounterValue.fromJson(rawValues);
} }
...@@ -75,27 +81,17 @@ class SubmitCheckInData { ...@@ -75,27 +81,17 @@ class SubmitCheckInData {
final String? message; final String? message;
final CustomerBalance? customerBalance; final CustomerBalance? customerBalance;
SubmitCheckInData({ SubmitCheckInData({this.reward, this.message, this.customerBalance});
this.reward,
this.message,
this.customerBalance,
});
factory SubmitCheckInData.fromJson(Map<String, dynamic> json) { factory SubmitCheckInData.fromJson(Map<String, dynamic> json) {
return SubmitCheckInData( return SubmitCheckInData(
reward: json['reward'] as String?, reward: json['reward'] as String?,
message: json['message'] as String?, message: json['message'] as String?,
customerBalance: json['customer_balance'] != null customerBalance: json['customer_balance'] != null ? CustomerBalance.fromJson(json['customer_balance']) : null,
? CustomerBalance.fromJson(json['customer_balance'])
: null,
); );
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return { return {'reward': reward, 'message': message, 'customer_balance': customerBalance?.toJson()};
'reward': reward,
'message': message,
'customer_balance': customerBalance?.toJson(),
};
} }
} }
\ No newline at end of file
import 'dart:ffi';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/screen/daily_checkin/daily_checkin_models.dart'; import 'package:mypoint_flutter_app/screen/daily_checkin/daily_checkin_models.dart';
import '../../base/base_screen.dart'; import '../../base/base_screen.dart';
import '../../base/basic_state.dart'; import '../../base/basic_state.dart';
import '../../preference/point/point_manager.dart'; import '../../preference/point/point_manager.dart';
import '../../resouce/base_color.dart'; import '../../resources/base_color.dart';
import '../../widgets/custom_navigation_bar.dart'; import '../../widgets/custom_navigation_bar.dart';
import 'daily_checkin_viewmodel.dart'; import 'daily_checkin_viewmodel.dart';
...@@ -38,8 +40,6 @@ class _DailyCheckInScreenState extends BaseState<DailyCheckInScreen> with BasicS ...@@ -38,8 +40,6 @@ class _DailyCheckInScreenState extends BaseState<DailyCheckInScreen> with BasicS
return Scaffold( return Scaffold(
appBar: CustomNavigationBar(title: "Check-in nhận quà"), appBar: CustomNavigationBar(title: "Check-in nhận quà"),
body: Obx(() { body: Obx(() {
print("_viewModel_viewModel${_viewModel.submitData.value?.customerBalance?.amountActive}");
print(UserPointManager().point.toString());
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
...@@ -94,36 +94,32 @@ class _DailyCheckInScreenState extends BaseState<DailyCheckInScreen> with BasicS ...@@ -94,36 +94,32 @@ class _DailyCheckInScreenState extends BaseState<DailyCheckInScreen> with BasicS
} }
Widget _buildCheckInList() { Widget _buildCheckInList() {
final counter = _viewModel.checkInData.value?.counters?.first; final dailyCounters = _viewModel.checkInData.value?.dailyCounter?.values ?? [];
final items = counter?.values ?? []; final current = _viewModel.checkInData.value?.currentCounter?.values?.firstOrNull;
final checkedCounter = int.tryParse(current?.counterValue ?? '') ?? 0;
final days = List.generate(items.length, (index) { final days = List.generate(dailyCounters.length, (index) {
var item = items[index]; final isChecked = index < checkedCounter;
var item = dailyCounters[index];
String label; String label;
String point = '+${item.pointReward?.toString() ?? '0'}'; String point = '+${item.pointReward?.toString() ?? '0'}';
bool isToday = index == 0; bool isToday = index == (checkedCounter - (_viewModel.todayIsChecked ? 1 : 0));
label = 'Ngày ${index + 1}';
if (index == 0) { if (isToday) {
label = 'Hôm nay'; label = 'Hôm nay';
} else if (index == items.length - 1) {
label = 'Ngày 7';
} else {
label = 'Ngày ${index + 1}';
} }
return Column( return Column(
children: [ children: [
Row( Row(
children: [ children: [
SizedBox( SizedBox(
width: 16, width: 12,
child: Divider(color: index == 0 ? Colors.transparent : Colors.grey.shade300, thickness: 4), child: Divider(color: index == 0 ? Colors.transparent : Colors.grey.shade300, thickness: 4),
), ),
isToday isChecked
? Image.asset('assets/images/ic_check_in_success.png', width: 24, fit: BoxFit.cover) ? Image.asset('assets/images/ic_check_in_success.png', width: 32, fit: BoxFit.cover)
: Image.asset('assets/images/ic_point.png', width: 24, fit: BoxFit.cover), : Image.asset('assets/images/ic_point.png', width: 32, fit: BoxFit.cover),
SizedBox( SizedBox(
width: 16, width: 12,
child: Divider(color: index == 6 ? Colors.transparent : Colors.grey.shade300, thickness: 4), child: Divider(color: index == 6 ? Colors.transparent : Colors.grey.shade300, thickness: 4),
), ),
], ],
...@@ -133,8 +129,8 @@ class _DailyCheckInScreenState extends BaseState<DailyCheckInScreen> with BasicS ...@@ -133,8 +129,8 @@ class _DailyCheckInScreenState extends BaseState<DailyCheckInScreen> with BasicS
label, label,
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 12,
color: isToday ? Colors.orange : Colors.black54, color: isChecked ? Colors.orange : Colors.black54,
fontWeight: isToday ? FontWeight.bold : FontWeight.normal, fontWeight: isChecked ? FontWeight.bold : FontWeight.normal,
), ),
), ),
const SizedBox(height: 2), const SizedBox(height: 2),
...@@ -142,7 +138,7 @@ class _DailyCheckInScreenState extends BaseState<DailyCheckInScreen> with BasicS ...@@ -142,7 +138,7 @@ class _DailyCheckInScreenState extends BaseState<DailyCheckInScreen> with BasicS
point, point,
style: TextStyle( style: TextStyle(
fontSize: 13, fontSize: 13,
color: isToday ? Colors.orange : Colors.black87, color: isChecked ? Colors.orange : Colors.black87,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
......
import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:get/get_rx/src/rx_types/rx_types.dart';
import 'package:mypoint_flutter_app/networking/restful_api_request.dart'; import 'package:mypoint_flutter_app/networking/restful_api_request.dart';
import '../../base/restful_api_viewmodel.dart'; import '../../base/restful_api_viewmodel.dart';
import '../../preference/point/point_manager.dart';
import 'daily_checkin_models.dart'; import 'daily_checkin_models.dart';
class DailyCheckInViewModel extends RestfulApiViewModel { class DailyCheckInViewModel extends RestfulApiViewModel {
...@@ -42,6 +41,7 @@ class DailyCheckInViewModel extends RestfulApiViewModel { ...@@ -42,6 +41,7 @@ class DailyCheckInViewModel extends RestfulApiViewModel {
hideLoading(); hideLoading();
submitData.value = response.data; submitData.value = response.data;
submitDataResponse?.call(response.data); submitDataResponse?.call(response.data);
_rewardOpportunityGetList();
} catch (error) { } catch (error) {
hideLoading(); hideLoading();
onShowAlertError?.call("Error fetching product detail: $error"); onShowAlertError?.call("Error fetching product detail: $error");
......
...@@ -10,7 +10,7 @@ import '../../base/base_screen.dart'; ...@@ -10,7 +10,7 @@ import '../../base/base_screen.dart';
import '../../base/basic_state.dart'; import '../../base/basic_state.dart';
import '../../preference/data_preference.dart'; import '../../preference/data_preference.dart';
import '../../preference/point/point_manager.dart'; import '../../preference/point/point_manager.dart';
import '../../resouce/base_color.dart'; import '../../resources/base_color.dart';
import '../../widgets/alert/custom_alert_dialog.dart'; import '../../widgets/alert/custom_alert_dialog.dart';
import '../../widgets/alert/data_alert_model.dart'; import '../../widgets/alert/data_alert_model.dart';
import '../topup/brand_select_sheet_widget.dart'; import '../topup/brand_select_sheet_widget.dart';
......
...@@ -4,8 +4,8 @@ import 'package:flutter/gestures.dart'; ...@@ -4,8 +4,8 @@ import 'package:flutter/gestures.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/preference/data_preference.dart'; import 'package:mypoint_flutter_app/preference/data_preference.dart';
import '../../preference/point/point_manager.dart'; import '../../preference/point/point_manager.dart';
import '../../resouce/button_style.dart'; import '../../resources/button_style.dart';
import '../../resouce/text_style.dart'; import '../../resources/text_style.dart';
import '../../shared/router_gage.dart'; import '../../shared/router_gage.dart';
import '../pageDetail/campaign_detail_screen.dart'; import '../pageDetail/campaign_detail_screen.dart';
import '../pageDetail/model/detail_page_rule_type.dart'; import '../pageDetail/model/detail_page_rule_type.dart';
......
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