Commit 6b980613 authored by DatHV's avatar DatHV
Browse files

update project structure

parent bfff9e47
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/screen/daily_checkin/daily_checkin_models.dart';
import '../../base/base_screen.dart';
import '../../base/basic_state.dart';
import '../../extensions/num_extension.dart';
import '../../preference/point/point_manager.dart';
import '../../resources/base_color.dart';
import '../../widgets/custom_navigation_bar.dart';
import 'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/features/daily_checkin/daily_checkin_models.dart';
import '../../shared/widgets/base_view/base_screen.dart';
import '../../shared/widgets/base_view/basic_state.dart';
import '../../core/utils/extensions/num_extension.dart';
import '../../shared/preferences/point/point_manager.dart';
import '../../core/theme/base_color.dart';
import '../../shared/widgets/custom_navigation_bar.dart';
import 'daily_checkin_viewmodel.dart';
class DailyCheckInScreen extends BaseScreen {
......@@ -40,7 +40,7 @@ class _DailyCheckInScreenState extends BaseState<DailyCheckInScreen> with BasicS
return Scaffold(
appBar: CustomNavigationBar(title: "Check-in nhận quà"),
body: Obx(() {
int point = _viewModel.submitData.value?.customerBalance?.amountActive?.toInt() ?? UserPointManager().point ?? 0;
int point = _viewModel.submitData.value?.customerBalance?.amountActive?.toInt() ?? UserPointManager().point;
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
......@@ -96,7 +96,7 @@ class _DailyCheckInScreenState extends BaseState<DailyCheckInScreen> with BasicS
Widget _buildCheckInList() {
final dailyCounters = _viewModel.checkInData.value?.dailyCounter?.values ?? [];
final current = _viewModel.checkInData.value?.currentCounter?.values?.firstOrNull;
final current = _viewModel.checkInData.value?.currentCounter?.values.firstOrNull;
final checkedCounter = int.tryParse(current?.counterValue ?? '') ?? 0;
final days = List.generate(dailyCounters.length, (index) {
final isChecked = index < checkedCounter;
......
import 'package:get/get_rx/src/rx_types/rx_types.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart';
import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import '../../core/network/restful_api_viewmodel.dart';
import 'daily_checkin_models.dart';
class DailyCheckInViewModel extends RestfulApiViewModel {
......@@ -27,7 +27,7 @@ class DailyCheckInViewModel extends RestfulApiViewModel {
onSuccess: (data, _) {
checkInData.value = data;
},
onFailure: (msg, _, __) async {
onFailure: (msg, _, _) async {
onShowAlertError?.call(msg, true);
},
);
......@@ -41,7 +41,7 @@ class DailyCheckInViewModel extends RestfulApiViewModel {
submitDataResponse?.call(data);
_rewardOpportunityGetList(); // Refresh data after successful check-in
},
onFailure: (msg, _, __) async {
onFailure: (msg, _, _) async {
onShowAlertError?.call(msg, false);
},
);
......
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/extensions/num_extension.dart';
import 'package:mypoint_flutter_app/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/screen/data_network_service/product_network_data_model.dart';
import 'package:mypoint_flutter_app/widgets/custom_empty_widget.dart';
import 'package:mypoint_flutter_app/widgets/custom_navigation_bar.dart';
import 'package:mypoint_flutter_app/widgets/image_loader.dart';
import '../../base/base_screen.dart';
import '../../base/basic_state.dart';
import '../../extensions/debouncer.dart';
import '../../preference/data_preference.dart';
import '../../preference/point/point_manager.dart';
import '../../resources/base_color.dart';
import '../../widgets/alert/custom_alert_dialog.dart';
import '../../widgets/alert/data_alert_model.dart';
import 'package:mypoint_flutter_app/core/utils/extensions/num_extension.dart';
import 'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/features/data_network_service/product_network_data_model.dart';
import 'package:mypoint_flutter_app/shared/widgets/custom_empty_widget.dart';
import 'package:mypoint_flutter_app/shared/widgets/custom_navigation_bar.dart';
import 'package:mypoint_flutter_app/shared/widgets/image_loader.dart';
import '../../shared/widgets/base_view/base_screen.dart';
import '../../shared/widgets/base_view/basic_state.dart';
import '../../core/utils/debouncer.dart';
import '../../shared/preferences/data_preference.dart';
import '../../shared/preferences/point/point_manager.dart';
import '../../core/theme/base_color.dart';
import '../../shared/widgets/alert/custom_alert_dialog.dart';
import '../../shared/widgets/alert/data_alert_model.dart';
import '../contacts/contacts_picker.dart';
import '../topup/brand_select_sheet_widget.dart';
import 'data_network_service_viewmodel.dart';
......@@ -59,7 +58,8 @@ class _DataNetworkServiceScreenState extends BaseState<DataNetworkServiceScreen>
_buildHeaderPhone(),
Container(height: 6, color: Colors.grey.shade200),
const Divider(height: 8),
if (_viewModel.topUpNetworkData.isEmpty) Expanded(child: EmptyWidget()),
if (_viewModel.topUpNetworkData.isEmpty)
Expanded(child: EmptyWidget(isLoading: _viewModel.isLoading.value)),
if (_viewModel.topUpNetworkData.isNotEmpty)
Expanded(
child: ListView.builder(
......@@ -258,7 +258,7 @@ class _DataNetworkServiceScreenState extends BaseState<DataNetworkServiceScreen>
selectedBrand: _viewModel.selectedBrand.value,
onSelected: (brand) {
Navigator.pop(context);
if (brand == null && brand.id != _viewModel.selectedBrand.value?.id) return;
if (brand.id != _viewModel.selectedBrand.value?.id) return;
_viewModel.selectedProduct.value = null;
_viewModel.selectedBrand.value = brand;
_viewModel.getTelcoDetail();
......@@ -302,7 +302,7 @@ class _DataNetworkServiceScreenState extends BaseState<DataNetworkServiceScreen>
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.symmetric(horizontal: 8),
itemCount: histories.length,
separatorBuilder: (_, __) => const SizedBox(width: 8),
separatorBuilder: (_, _) => const SizedBox(width: 8),
itemBuilder: (_, index) {
final phone = histories[index];
final myPhone = DataPreference.instance.phone ?? '';
......@@ -360,4 +360,4 @@ class _DataNetworkServiceScreenState extends BaseState<DataNetworkServiceScreen>
);
}
}
}
\ No newline at end of file
}
import 'package:get/get.dart';
import 'package:get/get_rx/src/rx_types/rx_types.dart';
import 'package:mypoint_flutter_app/networking/api/product_api.dart' deferred as product_api;
import 'package:mypoint_flutter_app/preference/data_preference.dart';
import 'package:mypoint_flutter_app/screen/data_network_service/product_network_data_model.dart';
import 'package:mypoint_flutter_app/widgets/custom_toast_message.dart';
import '../../base/base_response_model.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../../configs/constants.dart';
import '../../preference/contact_storage_service.dart';
import '../../preference/point/point_manager.dart';
import 'package:mypoint_flutter_app/core/network/api/product_api.dart' deferred as product_api;
import 'package:mypoint_flutter_app/shared/preferences/data_preference.dart';
import 'package:mypoint_flutter_app/features/data_network_service/product_network_data_model.dart';
import 'package:mypoint_flutter_app/shared/widgets/custom_toast_message.dart';
import '../../shared/widgets/base_view/base_response_model.dart';
import '../../core/network/restful_api_viewmodel.dart';
import '../../app/config/constants.dart';
import '../../core/services/contact_storage_service.dart';
import '../../shared/preferences/point/point_manager.dart';
import '../topup/models/brand_network_model.dart';
import '../voucher/models/product_brand_model.dart';
......
// delete_account_dialog.dart
import 'package:flutter/material.dart';
import 'package:flutter/gestures.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/extensions/num_extension.dart';
import 'package:mypoint_flutter_app/preference/data_preference.dart';
import 'package:mypoint_flutter_app/resources/base_color.dart';
import '../../preference/point/point_manager.dart';
import '../../resources/button_style.dart';
import '../../resources/text_style.dart';
import 'package:mypoint_flutter_app/core/utils/extensions/num_extension.dart';
import 'package:mypoint_flutter_app/shared/preferences/data_preference.dart';
import 'package:mypoint_flutter_app/core/theme/base_color.dart';
import '../../shared/preferences/point/point_manager.dart';
import '../../shared/resources/button_style.dart';
import '../../shared/resources/text_style.dart';
import '../../shared/router_gage.dart';
import '../pageDetail/campaign_detail_screen.dart';
import '../pageDetail/model/detail_page_rule_type.dart';
import 'delete_account_viewmodel.dart';
......
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/preference/data_preference.dart';
import 'package:mypoint_flutter_app/widgets/custom_toast_message.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../../configs/constants.dart';
import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/shared/preferences/data_preference.dart';
import 'package:mypoint_flutter_app/shared/widgets/custom_toast_message.dart';
import '../../core/network/restful_api_viewmodel.dart';
import '../../app/config/constants.dart';
import '../otp/delete_account_otp_repository.dart';
import '../otp/model/create_otp_response_model.dart';
import '../otp/otp_screen.dart';
......
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/widgets/custom_empty_widget.dart';
import '../../base/base_screen.dart';
import '../../base/basic_state.dart';
import '../../widgets/bottom_sheet_helper.dart';
import '../../widgets/custom_navigation_bar.dart';
import 'package:mypoint_flutter_app/shared/widgets/custom_empty_widget.dart';
import '../../shared/widgets/base_view/base_screen.dart';
import '../../shared/widgets/base_view/basic_state.dart';
import '../../shared/widgets/bottom_sheet_helper.dart';
import '../../shared/widgets/custom_navigation_bar.dart';
import 'device_info_popup.dart';
import 'device_manager_model.dart';
import 'device_manager_viewmodel.dart';
......@@ -37,7 +37,7 @@ class _DeviceManagerScreenState extends BaseState<DeviceManagerScreen> with Basi
appBar: CustomNavigationBar(title: 'Quản lý thiết bị đăng nhập'),
body: Obx(() {
final logoutDevices = _viewModel.logoutDevicesResponse.value?.devices ?? [];
final logoutDisplayDevices = logoutDevices.take(3).toList() ?? [];
final logoutDisplayDevices = logoutDevices.take(3).toList();
final currentDevice = _viewModel.currentDevice.value;
return RefreshIndicator(
onRefresh: () async => _refresh(),
......
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_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart';
import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import '../../core/network/restful_api_viewmodel.dart';
import 'device_manager_model.dart';
class DeviceManagerViewModel extends RestfulApiViewModel {
......
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/widgets/custom_empty_widget.dart';
import '../../base/base_screen.dart';
import '../../base/basic_state.dart';
import '../../widgets/bottom_sheet_helper.dart';
import '../../widgets/custom_navigation_bar.dart';
import 'package:mypoint_flutter_app/shared/widgets/custom_empty_widget.dart';
import '../../shared/widgets/base_view/base_screen.dart';
import '../../shared/widgets/base_view/basic_state.dart';
import '../../shared/widgets/bottom_sheet_helper.dart';
import '../../shared/widgets/custom_navigation_bar.dart';
import 'device_info_popup.dart';
import 'device_manager_model.dart';
import 'device_manager_screen.dart';
......@@ -37,16 +37,33 @@ class _LoggedOutDeviceScreenState extends BaseState<LoggedOutDeviceScreen> with
appBar: CustomNavigationBar(title: 'Các thiết bị đã đăng xuất'),
body: Obx(() {
final logoutDevices = _viewModel.logoutDevicesResponse.value?.devices ?? [];
if (logoutDevices.isEmpty) {
return RefreshIndicator(
onRefresh: () async => _refresh(),
child: CustomScrollView(
physics: const AlwaysScrollableScrollPhysics(),
slivers: [
SliverFillRemaining(
hasScrollBody: false,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Center(
child: EmptyWidget(content: 'Chưa có thiết bị đã đăng xuất gần đây'),
),
),
),
],
),
);
}
return RefreshIndicator(
onRefresh: () async => _refresh(),
child: ListView(
padding: EdgeInsets.zero,
physics: const AlwaysScrollableScrollPhysics(),
children: [
const SizedBox(height: 12),
if (logoutDevices.isEmpty)
EmptyWidget(content: 'Chưa có thiết bị đã đăng xuất gần đây')
else
...logoutDevices.map((e) => DeviceItemWidget(item: e, onMore: () => _showMore(e))),
...logoutDevices.map((e) => DeviceItemWidget(item: e, onMore: () => _showMore(e))),
const SizedBox(height: 32),
],
),
......
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/extensions/num_extension.dart';
import 'package:mypoint_flutter_app/widgets/image_loader.dart';
import '../../resources/base_color.dart';
import 'package:mypoint_flutter_app/core/utils/extensions/num_extension.dart';
import 'package:mypoint_flutter_app/shared/widgets/image_loader.dart';
import '../../core/theme/base_color.dart';
import '../../shared/router_gage.dart';
import '../../widgets/custom_navigation_bar.dart';
import '../../shared/widgets/custom_navigation_bar.dart';
import '../transaction/model/payment_method_model.dart';
import '../webview/payment_web_view_screen.dart';
import 'models/customer_contract_object_model.dart';
......@@ -28,15 +28,15 @@ class _ElectricPaymentBillScreenState extends State<ElectricPaymentBillScreen> {
Get.toNamed(
paymentWebViewScreen,
arguments: PaymentWebViewInput(
url: data?.vitapayData ?? "",
url: data.vitapayData ?? "",
isContract: false,
orderId: data?.requestId ?? "",
orderId: data.requestId ?? "",
showAlertBack: false,
callback: (result) {
if (result == PaymentProcess.success) {
Get.offNamed(
transactionHistoryDetailScreen,
arguments: {"orderId": data?.requestId ?? "", "canBack": true},
arguments: {"orderId": data.requestId ?? "", "canBack": true},
);
}
},
......
import 'package:get/get_rx/src/rx_types/rx_types.dart';
import 'package:mypoint_flutter_app/extensions/collection_extension.dart';
import 'package:mypoint_flutter_app/networking/api/product_api.dart' deferred as product_api;
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart';
import 'package:mypoint_flutter_app/core/utils/extensions/collection_extension.dart';
import 'package:mypoint_flutter_app/core/network/api/product_api.dart' deferred as product_api;
import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import '../../core/network/restful_api_viewmodel.dart';
import '../transaction/model/payment_method_model.dart';
import 'models/customer_contract_object_model.dart';
import 'models/electric_payment_response_model.dart';
import '../../base/base_response_model.dart';
import '../../shared/widgets/base_view/base_response_model.dart';
class ElectricPaymentBillViewModel extends RestfulApiViewModel {
final RxList<PaymentMethodModel> paymentMethods = <PaymentMethodModel>[].obs;
......
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/extensions/num_extension.dart';
import 'package:mypoint_flutter_app/widgets/custom_empty_widget.dart';
import '../../resources/base_color.dart';
import 'package:mypoint_flutter_app/core/utils/extensions/num_extension.dart';
import 'package:mypoint_flutter_app/shared/widgets/custom_empty_widget.dart';
import '../../core/theme/base_color.dart';
import '../../shared/router_gage.dart';
import '../../widgets/custom_navigation_bar.dart';
import '../../shared/widgets/custom_navigation_bar.dart';
import 'models/customer_contract_object_model.dart';
import 'electric_payment_bill_screen.dart';
import 'electric_payment_viewmodel.dart';
......@@ -115,7 +114,7 @@ class _ElectricPaymentHistoryScreenState extends State<ElectricPaymentHistoryScr
const SizedBox(height: 8),
Obx(() {
return (_viewModel.billContracts.value.isEmpty)
? Expanded(child: Center(child: EmptyWidget()))
? Expanded(child: Center(child: EmptyWidget(isLoading: _viewModel.isLoading.value)))
: Expanded(
child: ListView.builder(
itemCount: _viewModel.billContracts.value.length,
......
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../base/base_screen.dart';
import '../../base/basic_state.dart';
import '../../resources/base_color.dart';
import '../../widgets/custom_navigation_bar.dart';
import '../../shared/widgets/base_view/base_screen.dart';
import '../../shared/widgets/base_view/basic_state.dart';
import '../../core/theme/base_color.dart';
import '../../shared/widgets/custom_navigation_bar.dart';
import 'electric_payment_viewmodel.dart';
class ElectricPaymentScreen extends BaseScreen {
......
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart';
import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import '../../core/network/restful_api_viewmodel.dart';
import 'electric_payment_bill_screen.dart';
import 'models/customer_contract_object_model.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