Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Hoàng Văn Đạt
mypoint_flutter_app
Commits
6b980613
Commit
6b980613
authored
Nov 14, 2025
by
DatHV
Browse files
update project structure
parent
bfff9e47
Changes
507
Show whitespace changes
Inline
Side-by-side
lib/
screen
/notification/models/notification_list_data_model.dart
→
lib/
features
/notification/models/notification_list_data_model.dart
View file @
6b980613
File moved
lib/
screen
/notification/models/notification_list_data_model.g.dart
→
lib/
features
/notification/models/notification_list_data_model.g.dart
View file @
6b980613
File moved
lib/
screen/home
/models/notification_unread_model.dart
→
lib/
features/notification
/models/notification_unread_model.dart
View file @
6b980613
File moved
lib/
screen
/notification/notification_detail_screen.dart
→
lib/
features
/notification/notification_detail_screen.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/extensions/string_extension.dart'
;
import
'package:mypoint_flutter_app/widgets/custom_app_bar.dart'
;
import
'../../
base
/base_screen.dart'
;
import
'../../
base
/basic_state.dart'
;
import
'../../widgets/image_loader.dart'
;
import
'package:mypoint_flutter_app/
core/utils/
extensions/string_extension.dart'
;
import
'package:mypoint_flutter_app/
shared/
widgets/custom_app_bar.dart'
;
import
'../../
shared/widgets/base_view
/base_screen.dart'
;
import
'../../
shared/widgets/base_view
/basic_state.dart'
;
import
'../../
shared/
widgets/image_loader.dart'
;
import
'models/notification_detail_model.dart'
;
import
'notification_detail_viewmodel.dart'
;
...
...
lib/
screen
/notification/notification_detail_viewmodel.dart
→
lib/
features
/notification/notification_detail_viewmodel.dart
View file @
6b980613
import
'package:get/get_rx/src/rx_types/rx_types.dart'
;
import
'package:mypoint_flutter_app/network
ing
/api/notification_api.dart'
deferred
as
notification_api
;
import
'../../config
s
/constants.dart'
;
import
'../../network
ing
/restful_api_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
core/
network/api/notification_api.dart'
deferred
as
notification_api
;
import
'../../
app/
config/constants.dart'
;
import
'../../
core/
network/restful_api_viewmodel.dart'
;
import
'models/notification_detail_model.dart'
;
class
NotificationDetailViewModel
extends
RestfulApiViewModel
{
...
...
@@ -26,7 +26,7 @@ class NotificationDetailViewModel extends RestfulApiViewModel {
request:
()
async
{
await
_ensureNotificationApiLoaded
();
final
api
=
notification_api
.
NotificationApi
(
client
);
return
api
.
getNotificationDetail
(
id
??
''
);
return
api
.
getNotificationDetail
(
id
);
},
onSuccess:
(
data
,
_
)
{
final
notify
=
data
.
notification
;
...
...
lib/
screen
/notification/notification_screen.dart
→
lib/
features
/notification/notification_screen.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:get/get.dart'
;
import
'../../
base
/base_screen.dart'
;
import
'../../
base
/basic_state.dart'
;
import
'../../
resources
/base_color.dart'
;
import
'../../widgets/alert/data_alert_model.dart'
;
import
'../../widgets/custom_empty_widget.dart'
;
import
'../../widgets/custom_navigation_bar.dart'
;
import
'../../widgets/image_loader.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/alert/data_alert_model.dart'
;
import
'../../
shared/
widgets/custom_empty_widget.dart'
;
import
'../../
shared/
widgets/custom_navigation_bar.dart'
;
import
'../../
shared/
widgets/image_loader.dart'
;
import
'models/notification_item_model.dart'
;
import
'notification_viewmodel.dart'
;
...
...
@@ -30,7 +29,7 @@ class _NotificationScreenState extends BaseState<NotificationScreen> with BasicS
void
initState
()
{
super
.
initState
();
_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
);
}
});
...
...
@@ -61,7 +60,7 @@ class _NotificationScreenState extends BaseState<NotificationScreen> with BasicS
_buildNotificationCategory
(),
const
Divider
(
height:
1
),
if
(
items
.
isEmpty
)
const
Expanded
(
child:
EmptyWidget
())
Expanded
(
child:
EmptyWidget
(
isLoading:
_viewModel
.
isLoading
.
value
))
else
Expanded
(
child:
Container
(
...
...
lib/
screen
/notification/notification_viewmodel.dart
→
lib/
features
/notification/notification_viewmodel.dart
View file @
6b980613
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/network
ing
/api/notification_api.dart'
deferred
as
notification_api
;
import
'../../
base
/base_response_model.dart'
;
import
'../../network
ing
/restful_api_viewmodel.dart'
;
import
'../../preference/data_preference.dart'
;
import
'package:mypoint_flutter_app/
core/
network/api/notification_api.dart'
deferred
as
notification_api
;
import
'../../
shared/widgets/base_view
/base_response_model.dart'
;
import
'../../
core/
network/restful_api_viewmodel.dart'
;
import
'../../
shared/
preference
s
/data_preference.dart'
;
import
'../../shared/router_gage.dart'
;
import
'models/category_notify_item_model.dart'
;
import
'models/notification_detail_model.dart'
;
import
'models/notification_item_model.dart'
;
import
'models/notification_list_data_model.dart'
;
import
'notification_detail_screen.dart'
;
class
NotificationViewModel
extends
RestfulApiViewModel
{
final
RxList
<
CategoryNotifyItemModel
>
categories
=
<
CategoryNotifyItemModel
>[].
obs
;
final
RxList
<
NotificationItemModel
>
notifications
=
<
NotificationItemModel
>[].
obs
;
final
RxBool
isLoading
=
false
.
obs
;
final
_pageLimit
=
10
;
var
_notificationIndex
=
0
;
void
Function
(
String
message
)?
onShowAlertError
;
...
...
@@ -48,11 +46,13 @@ class NotificationViewModel extends RestfulApiViewModel {
onSuccess:
(
data
,
_
)
{
if
(
data
.
isNotEmpty
)
data
[
0
].
isSelected
=
true
;
categories
.
assignAll
(
data
);
fetchNotifications
(
refresh:
true
);
},
onFailure:
(
msg
,
_
,
_
)
async
{
onShowAlertError
?.
call
(
msg
);
},
onComplete:
()
{
fetchNotifications
(
refresh:
true
);
},
);
}
...
...
lib/
screen
/onboarding/model/check_phone_response_model.dart
→
lib/
features
/onboarding/model/check_phone_response_model.dart
View file @
6b980613
File moved
lib/
screen
/onboarding/model/check_phone_response_model.g.dart
→
lib/
features
/onboarding/model/check_phone_response_model.g.dart
View file @
6b980613
File moved
lib/
screen
/onboarding/model/onboarding_info_model.dart
→
lib/
features
/onboarding/model/onboarding_info_model.dart
View file @
6b980613
File moved
lib/
screen
/onboarding/model/onboarding_info_model.g.dart
→
lib/
features
/onboarding/model/onboarding_info_model.g.dart
View file @
6b980613
File moved
lib/
screen
/onboarding/onboarding_screen.dart
→
lib/
features
/onboarding/onboarding_screen.dart
View file @
6b980613
...
...
@@ -4,10 +4,10 @@ import 'package:flutter/services.dart';
import
'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart'
;
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/shared/router_gage.dart'
;
import
'package:mypoint_flutter_app/widgets/image_loader.dart'
;
import
'../../
base
/base_screen.dart'
;
import
'../../
base
/basic_state.dart'
;
import
'../../
resources
/base_color.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/theme
/base_color.dart'
;
import
'../faqs/faqs_screen.dart'
;
import
'../pageDetail/model/detail_page_rule_type.dart'
;
import
'onboarding_viewmodel.dart'
;
...
...
lib/
screen
/onboarding/onboarding_viewmodel.dart
→
lib/
features
/onboarding/onboarding_viewmodel.dart
View file @
6b980613
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/extensions/string_extension.dart'
;
import
'package:mypoint_flutter_app/network
ing
/restful_api_client_all_request.dart'
;
import
'../../network
ing
/restful_api_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
core/utils/
extensions/string_extension.dart'
;
import
'package:mypoint_flutter_app/
core/
network/restful_api_client_all_request.dart'
;
import
'../../
core/
network/restful_api_viewmodel.dart'
;
import
'../../shared/router_gage.dart'
;
import
'../otp/otp_screen.dart'
;
import
'../otp/verify_otp_repository.dart'
;
...
...
@@ -14,12 +14,9 @@ class OnboardingViewModel extends RestfulApiViewModel {
final
_info
=
Rxn
<
OnboardingInfoModel
>();
var
checkPhoneRes
=
Rxn
<
CheckPhoneResponseModel
>();
void
Function
(
String
message
)?
onShowAlertError
;
bool
get
isButtonEnabled
=>
isChecked
.
value
&&
phoneNumber
.
value
.
isPhoneValid
();
String
get
content
=>
_info
?.
value
?.
content
??
""
;
String
get
url
=>
_info
?.
value
?.
url
??
""
;
String
get
content
=>
_info
.
value
?.
content
??
""
;
String
get
url
=>
_info
.
value
?.
url
??
""
;
void
updatePhoneNumber
(
String
value
)
{
phoneNumber
.
value
=
value
;
...
...
lib/
screen
/order_menu/order_menu_screen.dart
→
lib/
features
/order_menu/order_menu_screen.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:mypoint_flutter_app/widgets/custom_app_bar.dart'
;
import
'../../directional/directional_screen.dart'
;
import
'../../widgets/custom_navigation_bar.dart'
;
import
'../../shared/navigation/directional_screen.dart'
;
import
'../../shared/widgets/custom_navigation_bar.dart'
;
class
_OrderMenuItem
{
final
String
title
;
...
...
@@ -28,7 +26,7 @@ class OrderMenuScreen extends StatelessWidget {
color:
Colors
.
white
,
child:
ListView
.
separated
(
itemCount:
items
.
length
,
separatorBuilder:
(
_
,
_
_
)
=>
const
Divider
(
height:
1
),
separatorBuilder:
(
_
,
_
)
=>
const
Divider
(
height:
1
),
itemBuilder:
(
context
,
index
)
{
final
item
=
items
[
index
];
return
InkWell
(
...
...
lib/
screen
/otp/delete_account_otp_repository.dart
→
lib/
features
/otp/delete_account_otp_repository.dart
View file @
6b980613
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/network
ing
/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
'../../
base
/base_response_model.dart'
;
import
'../../network
ing
/restful_api_viewmodel.dart'
;
import
'../../config
s
/constants.dart'
;
import
'../../preference/data_preference.dart'
;
import
'../../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
'../../
shared/
preference
s
/data_preference.dart'
;
import
'../../
shared/
widgets/custom_toast_message.dart'
;
import
'otp_viewmodel.dart'
;
class
DeleteAccountOtpRepository
extends
RestfulApiViewModel
implements
IOtpRepository
{
...
...
lib/
screen
/otp/forgot_pass_otp_repository.dart
→
lib/
features
/otp/forgot_pass_otp_repository.dart
View file @
6b980613
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_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
'../../networking/restful_api_viewmodel.dart'
;
import
'../splash/splash_screen_viewmodel.dart'
;
import
'package:mypoint_flutter_app/shared/widgets/base_view/base_response_model.dart'
;
import
'package:mypoint_flutter_app/core/network/restful_api_client_all_request.dart'
;
import
'package:mypoint_flutter_app/features/create_pass/create_pass_screen.dart'
;
import
'package:mypoint_flutter_app/features/create_pass/reset_create_password_repository.dart'
;
import
'../../core/network/restful_api_viewmodel.dart'
;
import
'otp_viewmodel.dart'
;
class
ForgotPassOTPRepository
extends
RestfulApiViewModel
implements
IOtpRepository
{
...
...
lib/
screen
/otp/model/create_otp_response_model.dart
→
lib/
features
/otp/model/create_otp_response_model.dart
View file @
6b980613
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'
;
@JsonSerializable
()
...
...
lib/
screen
/otp/model/create_otp_response_model.g.dart
→
lib/
features
/otp/model/create_otp_response_model.g.dart
View file @
6b980613
File moved
lib/
screen
/otp/model/otp_claim_verify_response_model.dart
→
lib/
features
/otp/model/otp_claim_verify_response_model.dart
View file @
6b980613
File moved
lib/
screen
/otp/model/otp_claim_verify_response_model.g.dart
→
lib/
features
/otp/model/otp_claim_verify_response_model.g.dart
View file @
6b980613
File moved
Prev
1
…
11
12
13
14
15
16
17
18
19
…
26
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment