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

update project structure

parent bfff9e47
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/extensions/string_extension.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/widgets/custom_app_bar.dart'; import 'package:mypoint_flutter_app/shared/widgets/custom_app_bar.dart';
import '../../base/base_screen.dart'; import '../../shared/widgets/base_view/base_screen.dart';
import '../../base/basic_state.dart'; import '../../shared/widgets/base_view/basic_state.dart';
import '../../widgets/image_loader.dart'; import '../../shared/widgets/image_loader.dart';
import 'models/notification_detail_model.dart'; import 'models/notification_detail_model.dart';
import 'notification_detail_viewmodel.dart'; import 'notification_detail_viewmodel.dart';
......
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/api/notification_api.dart' deferred as notification_api; import 'package:mypoint_flutter_app/core/network/api/notification_api.dart' deferred as notification_api;
import '../../configs/constants.dart'; import '../../app/config/constants.dart';
import '../../networking/restful_api_viewmodel.dart'; import '../../core/network/restful_api_viewmodel.dart';
import 'models/notification_detail_model.dart'; import 'models/notification_detail_model.dart';
class NotificationDetailViewModel extends RestfulApiViewModel { class NotificationDetailViewModel extends RestfulApiViewModel {
...@@ -26,7 +26,7 @@ class NotificationDetailViewModel extends RestfulApiViewModel { ...@@ -26,7 +26,7 @@ class NotificationDetailViewModel extends RestfulApiViewModel {
request: () async { request: () async {
await _ensureNotificationApiLoaded(); await _ensureNotificationApiLoaded();
final api = notification_api.NotificationApi(client); final api = notification_api.NotificationApi(client);
return api.getNotificationDetail(id ?? ''); return api.getNotificationDetail(id);
}, },
onSuccess: (data, _) { onSuccess: (data, _) {
final notify = data.notification; final notify = data.notification;
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../base/base_screen.dart'; import '../../shared/widgets/base_view/base_screen.dart';
import '../../base/basic_state.dart'; import '../../shared/widgets/base_view/basic_state.dart';
import '../../resources/base_color.dart'; import '../../core/theme/base_color.dart';
import '../../widgets/alert/data_alert_model.dart'; import '../../shared/widgets/alert/data_alert_model.dart';
import '../../widgets/custom_empty_widget.dart'; import '../../shared/widgets/custom_empty_widget.dart';
import '../../widgets/custom_navigation_bar.dart'; import '../../shared/widgets/custom_navigation_bar.dart';
import '../../widgets/image_loader.dart'; import '../../shared/widgets/image_loader.dart';
import 'models/notification_item_model.dart'; import 'models/notification_item_model.dart';
import 'notification_viewmodel.dart'; import 'notification_viewmodel.dart';
...@@ -30,7 +29,7 @@ class _NotificationScreenState extends BaseState<NotificationScreen> with BasicS ...@@ -30,7 +29,7 @@ class _NotificationScreenState extends BaseState<NotificationScreen> with BasicS
void initState() { void initState() {
super.initState(); super.initState();
_scrollController.addListener(() { _scrollController.addListener(() {
if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent - 100) { if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent - 100 && !_viewModel.isLoading.value) {
_viewModel.fetchNotifications(refresh: false); _viewModel.fetchNotifications(refresh: false);
} }
}); });
...@@ -61,7 +60,7 @@ class _NotificationScreenState extends BaseState<NotificationScreen> with BasicS ...@@ -61,7 +60,7 @@ class _NotificationScreenState extends BaseState<NotificationScreen> with BasicS
_buildNotificationCategory(), _buildNotificationCategory(),
const Divider(height: 1), const Divider(height: 1),
if (items.isEmpty) if (items.isEmpty)
const Expanded(child: EmptyWidget()) Expanded(child: EmptyWidget(isLoading: _viewModel.isLoading.value))
else else
Expanded( Expanded(
child: Container( child: Container(
......
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/api/notification_api.dart' deferred as notification_api; import 'package:mypoint_flutter_app/core/network/api/notification_api.dart' deferred as notification_api;
import '../../base/base_response_model.dart'; import '../../shared/widgets/base_view/base_response_model.dart';
import '../../networking/restful_api_viewmodel.dart'; import '../../core/network/restful_api_viewmodel.dart';
import '../../preference/data_preference.dart'; import '../../shared/preferences/data_preference.dart';
import '../../shared/router_gage.dart'; import '../../shared/router_gage.dart';
import 'models/category_notify_item_model.dart'; import 'models/category_notify_item_model.dart';
import 'models/notification_detail_model.dart'; import 'models/notification_detail_model.dart';
import 'models/notification_item_model.dart'; import 'models/notification_item_model.dart';
import 'models/notification_list_data_model.dart'; import 'models/notification_list_data_model.dart';
import 'notification_detail_screen.dart';
class NotificationViewModel extends RestfulApiViewModel { class NotificationViewModel extends RestfulApiViewModel {
final RxList<CategoryNotifyItemModel> categories = <CategoryNotifyItemModel>[].obs; final RxList<CategoryNotifyItemModel> categories = <CategoryNotifyItemModel>[].obs;
final RxList<NotificationItemModel> notifications = <NotificationItemModel>[].obs; final RxList<NotificationItemModel> notifications = <NotificationItemModel>[].obs;
final RxBool isLoading = false.obs;
final _pageLimit = 10; final _pageLimit = 10;
var _notificationIndex = 0; var _notificationIndex = 0;
void Function(String message)? onShowAlertError; void Function(String message)? onShowAlertError;
...@@ -48,11 +46,13 @@ class NotificationViewModel extends RestfulApiViewModel { ...@@ -48,11 +46,13 @@ class NotificationViewModel extends RestfulApiViewModel {
onSuccess: (data, _) { onSuccess: (data, _) {
if (data.isNotEmpty) data[0].isSelected = true; if (data.isNotEmpty) data[0].isSelected = true;
categories.assignAll(data); categories.assignAll(data);
fetchNotifications(refresh: true);
}, },
onFailure: (msg, _, _) async { onFailure: (msg, _, _) async {
onShowAlertError?.call(msg); onShowAlertError?.call(msg);
}, },
onComplete: () {
fetchNotifications(refresh: true);
},
); );
} }
......
...@@ -4,10 +4,10 @@ import 'package:flutter/services.dart'; ...@@ -4,10 +4,10 @@ import 'package:flutter/services.dart';
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart'; import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/shared/router_gage.dart'; import 'package:mypoint_flutter_app/shared/router_gage.dart';
import 'package:mypoint_flutter_app/widgets/image_loader.dart'; import 'package:mypoint_flutter_app/shared/widgets/image_loader.dart';
import '../../base/base_screen.dart'; import '../../shared/widgets/base_view/base_screen.dart';
import '../../base/basic_state.dart'; import '../../shared/widgets/base_view/basic_state.dart';
import '../../resources/base_color.dart'; import '../../core/theme/base_color.dart';
import '../faqs/faqs_screen.dart'; import '../faqs/faqs_screen.dart';
import '../pageDetail/model/detail_page_rule_type.dart'; import '../pageDetail/model/detail_page_rule_type.dart';
import 'onboarding_viewmodel.dart'; import 'onboarding_viewmodel.dart';
......
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/extensions/string_extension.dart'; import 'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import '../../networking/restful_api_viewmodel.dart'; import '../../core/network/restful_api_viewmodel.dart';
import '../../shared/router_gage.dart'; import '../../shared/router_gage.dart';
import '../otp/otp_screen.dart'; import '../otp/otp_screen.dart';
import '../otp/verify_otp_repository.dart'; import '../otp/verify_otp_repository.dart';
...@@ -14,12 +14,9 @@ class OnboardingViewModel extends RestfulApiViewModel { ...@@ -14,12 +14,9 @@ class OnboardingViewModel extends RestfulApiViewModel {
final _info = Rxn<OnboardingInfoModel>(); final _info = Rxn<OnboardingInfoModel>();
var checkPhoneRes = Rxn<CheckPhoneResponseModel>(); var checkPhoneRes = Rxn<CheckPhoneResponseModel>();
void Function(String message)? onShowAlertError; void Function(String message)? onShowAlertError;
bool get isButtonEnabled => isChecked.value && phoneNumber.value.isPhoneValid(); bool get isButtonEnabled => isChecked.value && phoneNumber.value.isPhoneValid();
String get content => _info.value?.content ?? "";
String get content => _info?.value?.content ?? ""; String get url => _info.value?.url ?? "";
String get url => _info?.value?.url ?? "";
void updatePhoneNumber(String value) { void updatePhoneNumber(String value) {
phoneNumber.value = value; phoneNumber.value = value;
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mypoint_flutter_app/widgets/custom_app_bar.dart'; import '../../shared/navigation/directional_screen.dart';
import '../../shared/widgets/custom_navigation_bar.dart';
import '../../directional/directional_screen.dart';
import '../../widgets/custom_navigation_bar.dart';
class _OrderMenuItem { class _OrderMenuItem {
final String title; final String title;
...@@ -28,7 +26,7 @@ class OrderMenuScreen extends StatelessWidget { ...@@ -28,7 +26,7 @@ class OrderMenuScreen extends StatelessWidget {
color: Colors.white, color: Colors.white,
child: ListView.separated( child: ListView.separated(
itemCount: items.length, itemCount: items.length,
separatorBuilder: (_, __) => const Divider(height: 1), separatorBuilder: (_, _) => const Divider(height: 1),
itemBuilder: (context, index) { itemBuilder: (context, index) {
final item = items[index]; final item = items[index];
return InkWell( return InkWell(
......
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/shared/router_gage.dart'; import 'package:mypoint_flutter_app/shared/router_gage.dart';
import '../../base/base_response_model.dart'; import '../../shared/widgets/base_view/base_response_model.dart';
import '../../networking/restful_api_viewmodel.dart'; import '../../core/network/restful_api_viewmodel.dart';
import '../../configs/constants.dart'; import '../../app/config/constants.dart';
import '../../preference/data_preference.dart'; import '../../shared/preferences/data_preference.dart';
import '../../widgets/custom_toast_message.dart'; import '../../shared/widgets/custom_toast_message.dart';
import 'otp_viewmodel.dart'; import 'otp_viewmodel.dart';
class DeleteAccountOtpRepository extends RestfulApiViewModel implements IOtpRepository { class DeleteAccountOtpRepository extends RestfulApiViewModel implements IOtpRepository {
......
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart'; import 'package:mypoint_flutter_app/shared/widgets/base_view/base_response_model.dart';
import 'package:mypoint_flutter_app/base/base_response_model.dart'; import 'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart';
import 'package:mypoint_flutter_app/networking/restful_api_client_all_request.dart'; import 'package:mypoint_flutter_app/features/create_pass/create_pass_screen.dart';
import 'package:mypoint_flutter_app/screen/create_pass/create_pass_screen.dart'; import 'package:mypoint_flutter_app/features/create_pass/reset_create_password_repository.dart';
import 'package:mypoint_flutter_app/screen/create_pass/reset_create_password_repository.dart'; import '../../core/network/restful_api_viewmodel.dart';
import '../../networking/restful_api_viewmodel.dart';
import '../splash/splash_screen_viewmodel.dart';
import 'otp_viewmodel.dart'; import 'otp_viewmodel.dart';
class ForgotPassOTPRepository extends RestfulApiViewModel implements IOtpRepository { class ForgotPassOTPRepository extends RestfulApiViewModel implements IOtpRepository {
......
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import '../../../base/base_response_model.dart'; import '../../../shared/widgets/base_view/base_response_model.dart';
part 'create_otp_response_model.g.dart'; part 'create_otp_response_model.g.dart';
@JsonSerializable() @JsonSerializable()
......
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