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
Hide whitespace changes
Inline
Side-by-side
lib/
screen
/electric_payment/models/electric_payment_response_model.g.dart
→
lib/
features
/electric_payment/models/electric_payment_response_model.g.dart
View file @
6b980613
File moved
lib/
screen
/faqs/faq_detail_screen.dart
→
lib/
features
/faqs/faq_detail_screen.dart
View file @
6b980613
File moved
lib/
screen
/faqs/faqs_model.dart
→
lib/
features
/faqs/faqs_model.dart
View file @
6b980613
File moved
lib/
screen
/faqs/faqs_model.g.dart
→
lib/
features
/faqs/faqs_model.g.dart
View file @
6b980613
File moved
lib/
screen
/faqs/faqs_screen.dart
→
lib/
features
/faqs/faqs_screen.dart
View file @
6b980613
import
'package:flutter/gestures.dart'
;
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/screen/pageDetail/campaign_detail_screen.dart'
;
import
'package:mypoint_flutter_app/widgets/back_button.dart'
;
import
'package:mypoint_flutter_app/widgets/custom_toast_message.dart'
;
import
'../../base/base_screen.dart'
;
import
'../../base/basic_state.dart'
;
import
'../../configs/constants.dart'
;
import
'../../resources/base_color.dart'
;
import
'package:mypoint_flutter_app/shared/widgets/custom_toast_message.dart'
;
import
'../../shared/widgets/base_view/base_screen.dart'
;
import
'../../shared/widgets/base_view/basic_state.dart'
;
import
'../../app/config/constants.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
'faqs_viewmodel.dart'
;
class
FAQScreen
extends
BaseScreen
{
...
...
lib/
screen
/faqs/faqs_viewmodel.dart
→
lib/
features
/faqs/faqs_viewmodel.dart
View file @
6b980613
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/network
ing
/api/website_api.dart'
deferred
as
website_api
;
import
'../../network
ing
/restful_api_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
core/
network/api/website_api.dart'
deferred
as
website_api
;
import
'../../
core/
network/restful_api_viewmodel.dart'
;
import
'faqs_model.dart'
;
class
FAQViewModel
extends
RestfulApiViewModel
{
...
...
lib/
screen
/flash_sale/flash_sale_screen.dart
→
lib/
features
/flash_sale/flash_sale_screen.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/
base
/base_screen.dart'
;
import
'package:mypoint_flutter_app/
base
/basic_state.dart'
;
import
'package:mypoint_flutter_app/extensions/num_extension.dart'
;
import
'package:mypoint_flutter_app/
screen
/flash_sale/flash_sale_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
screen
/flash_sale/models/flash_sale_category_model.dart'
;
import
'package:mypoint_flutter_app/
screen
/voucher/models/product_model.dart'
;
import
'package:mypoint_flutter_app/widgets/custom_empty_widget.dart'
;
import
'package:mypoint_flutter_app/widgets/image_loader.dart'
;
import
'package:mypoint_flutter_app/
shared/widgets/base_view
/base_screen.dart'
;
import
'package:mypoint_flutter_app/
shared/widgets/base_view
/basic_state.dart'
;
import
'package:mypoint_flutter_app/
core/utils/
extensions/num_extension.dart'
;
import
'package:mypoint_flutter_app/
features
/flash_sale/flash_sale_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
features
/flash_sale/models/flash_sale_category_model.dart'
;
import
'package:mypoint_flutter_app/
features
/voucher/models/product_model.dart'
;
import
'package:mypoint_flutter_app/
shared/
widgets/custom_empty_widget.dart'
;
import
'package:mypoint_flutter_app/
shared/
widgets/image_loader.dart'
;
import
'../../shared/router_gage.dart'
;
import
'../../widgets/custom_navigation_bar.dart'
;
import
'../../
shared/
widgets/custom_navigation_bar.dart'
;
class
FlashSaleScreen
extends
BaseScreen
{
const
FlashSaleScreen
({
super
.
key
});
...
...
@@ -143,7 +143,10 @@ class _FlashSaleScreenState extends BaseState<FlashSaleScreen> with BasicState {
Widget
_buildProductSliver
()
{
final
products
=
_viewModel
.
products
;
if
(
products
.
isEmpty
)
{
return
const
SliverFillRemaining
(
hasScrollBody:
false
,
child:
EmptyWidget
());
return
SliverFillRemaining
(
hasScrollBody:
false
,
child:
EmptyWidget
(
isLoading:
_viewModel
.
isLoading
.
value
),
);
}
final
double
screenWidth
=
MediaQuery
.
of
(
context
).
size
.
width
;
final
double
itemWidth
=
(
screenWidth
-
36
)
/
2
;
...
...
lib/
screen
/flash_sale/flash_sale_viewmodel.dart
→
lib/
features
/flash_sale/flash_sale_viewmodel.dart
View file @
6b980613
import
'dart:async'
;
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/network
ing
/restful_api_client_all_request.dart'
;
import
'package:mypoint_flutter_app/network
ing
/restful_api_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
screen
/flash_sale/models/flash_sale_category_model.dart'
;
import
'package:mypoint_flutter_app/
screen
/flash_sale/models/flash_sale_detail_response.dart'
;
import
'package:mypoint_flutter_app/
screen
/voucher/models/product_model.dart'
;
import
'package:mypoint_flutter_app/
core/
network/restful_api_client_all_request.dart'
;
import
'package:mypoint_flutter_app/
core/
network/restful_api_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
features
/flash_sale/models/flash_sale_category_model.dart'
;
import
'package:mypoint_flutter_app/
features
/flash_sale/models/flash_sale_detail_response.dart'
;
import
'package:mypoint_flutter_app/
features
/voucher/models/product_model.dart'
;
class
FlashSaleViewModel
extends
RestfulApiViewModel
{
final
String
groupId
;
...
...
lib/
screen
/flash_sale/models/flash_sale_category_model.dart
→
lib/
features
/flash_sale/models/flash_sale_category_model.dart
View file @
6b980613
import
'package:json_annotation/json_annotation.dart'
;
part
'flash_sale_category_model.g.dart'
;
@JsonSerializable
()
class
FlashSaleCategoryModel
{
@JsonKey
(
name:
'_id'
)
...
...
lib/
screen
/flash_sale/models/flash_sale_category_model.g.dart
→
lib/
features
/flash_sale/models/flash_sale_category_model.g.dart
View file @
6b980613
File moved
lib/
screen
/flash_sale/models/flash_sale_detail_response.dart
→
lib/
features
/flash_sale/models/flash_sale_detail_response.dart
View file @
6b980613
import
'package:json_annotation/json_annotation.dart'
;
import
'package:mypoint_flutter_app/
screen
/flash_sale/models/preview_flash_sale_model.dart'
;
import
'package:mypoint_flutter_app/
screen
/voucher/models/product_model.dart'
;
import
'package:mypoint_flutter_app/
features
/flash_sale/models/preview_flash_sale_model.dart'
;
import
'package:mypoint_flutter_app/
features
/voucher/models/product_model.dart'
;
part
'flash_sale_detail_response.g.dart'
;
@JsonSerializable
()
class
FlashSaleDetailResponse
{
final
int
?
id
;
...
...
lib/
screen
/flash_sale/models/flash_sale_detail_response.g.dart
→
lib/
features
/flash_sale/models/flash_sale_detail_response.g.dart
View file @
6b980613
File moved
lib/
screen/hom
e/models/flash_sale_model.dart
→
lib/
features/flash_sal
e/models/flash_sale_model.dart
View file @
6b980613
import
'package:json_annotation/json_annotation.dart'
;
import
'
../../flash_sale/models/
preview_flash_sale_model.dart'
;
import
'preview_flash_sale_model.dart'
;
import
'../../voucher/models/product_model.dart'
;
part
'flash_sale_model.g.dart'
;
@JsonSerializable
()
class
FlashSaleModel
{
final
int
id
;
...
...
@@ -33,7 +32,7 @@ class FlashSaleModel {
PreviewFlashSale
get
info
{
final
info
=
products
?.
first
?.
previewFlashSale
??
products
?.
first
OrNull
?.
previewFlashSale
??
PreviewFlashSale
(
id:
id
,
countdownSecond:
countdownSecond
,
...
...
lib/
screen/hom
e/models/flash_sale_model.g.dart
→
lib/
features/flash_sal
e/models/flash_sale_model.g.dart
View file @
6b980613
File moved
lib/
screen
/flash_sale/models/preview_flash_sale_model.dart
→
lib/
features
/flash_sale/models/preview_flash_sale_model.dart
View file @
6b980613
...
...
@@ -2,7 +2,6 @@ import 'package:json_annotation/json_annotation.dart';
import
'package:intl/intl.dart'
;
part
'preview_flash_sale_model.g.dart'
;
@JsonSerializable
()
class
PreviewFlashSale
{
final
int
?
id
;
...
...
lib/
screen
/flash_sale/models/preview_flash_sale_model.g.dart
→
lib/
features
/flash_sale/models/preview_flash_sale_model.g.dart
View file @
6b980613
File moved
lib/
screen
/game/game_cards/game_card_screen.dart
→
lib/
features
/game/game_cards/game_card_screen.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:get/get_core/src/get_main.dart'
;
import
'../../../base/base_screen.dart'
;
import
'../../../base/basic_state.dart'
;
import
'../../../shared/widgets/base_view/base_screen.dart'
;
import
'../../../shared/widgets/base_view/basic_state.dart'
;
import
'../../../main.dart'
;
import
'../../../widgets/back_button.dart'
;
import
'../../../
shared/
widgets/back_button.dart'
;
import
'../models/game_bundle_item_model.dart'
;
import
'../models/game_card_item_model.dart'
;
import
'game_card_viewmodel.dart'
;
...
...
@@ -55,7 +54,7 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro
};
_viewModel
.
getGameDetailSuccess
=
()
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
{
final
popup
=
_viewModel
.
data
?
.
value
?.
popup
;
final
popup
=
_viewModel
.
data
.
value
?.
popup
;
if
(
popup
==
null
)
return
;
showPopup
(
data:
popup
);
});
...
...
@@ -94,7 +93,7 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro
if
(
data
==
null
)
{
return
const
SizedBox
();
}
final
cards
=
data
?
.
options
??
[];
final
cards
=
data
.
options
??
[];
final
screenHeight
=
MediaQuery
.
of
(
context
).
size
.
height
;
final
startTop
=
screenHeight
*
560
/
1920
;
...
...
@@ -103,8 +102,8 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro
Container
(
decoration:
BoxDecoration
(
image:
data
?
.
background
!=
null
?
DecorationImage
(
image:
NetworkImage
(
data
?
.
background
??
''
),
fit:
BoxFit
.
cover
)
data
.
background
!=
null
?
DecorationImage
(
image:
NetworkImage
(
data
.
background
??
''
),
fit:
BoxFit
.
cover
)
:
null
,
color:
Colors
.
green
[
100
],
),
...
...
@@ -128,7 +127,7 @@ class _GameCardScreenState extends BaseState<GameCardScreen> with BasicState, Ro
itemBuilder:
(
context
,
index
)
{
final
card
=
cards
[
index
];
return
GameCardItem
(
card:
card
,
onTapCard:
()
{
_viewModel
.
submitGameCard
(
data
?
.
id
??
""
,
card
.
id
??
0
);
_viewModel
.
submitGameCard
(
data
.
id
??
""
,
card
.
id
??
0
);
});
},
),
...
...
lib/
screen
/game/game_cards/game_card_viewmodel.dart
→
lib/
features
/game/game_cards/game_card_viewmodel.dart
View file @
6b980613
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/network
ing
/api/game_api.dart'
deferred
as
game_api
;
import
'../../../config
s
/constants.dart'
;
import
'../../../network
ing
/restful_api_viewmodel.dart'
;
import
'../../../widgets/alert/popup_data_model.dart'
;
import
'package:mypoint_flutter_app/
core/
network/api/game_api.dart'
deferred
as
game_api
;
import
'../../../
app/
config/constants.dart'
;
import
'../../../
core/
network/restful_api_viewmodel.dart'
;
import
'../../../
shared/
widgets/alert/popup_data_model.dart'
;
import
'../models/game_bundle_item_model.dart'
;
class
GameCardViewModel
extends
RestfulApiViewModel
{
...
...
@@ -27,7 +27,7 @@ class GameCardViewModel extends RestfulApiViewModel {
return
api
.
submitGameCard
(
gameId
,
itemId
.
toString
());
},
onSuccess:
(
data
,
_
)
{
final
popupData
=
data
?
.
popup
;
final
popupData
=
data
.
popup
;
if
(
popupData
!=
null
)
{
submitGameCardSuccess
?.
call
(
popupData
);
}
else
{
...
...
@@ -51,7 +51,7 @@ class GameCardViewModel extends RestfulApiViewModel {
this
.
data
.
value
=
data
;
getGameDetailSuccess
?.
call
();
},
onFailure:
(
msg
,
_
,
_
_
)
async
{
onFailure:
(
msg
,
_
,
_
)
async
{
onShowAlertError
?.
call
(
msg
,
true
);
},
);
...
...
lib/
screen
/game/game_tab_screen.dart
→
lib/
features
/game/game_tab_screen.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:flutter/foundation.dart'
;
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/widgets/image_loader.dart'
;
import
'../../
base
/base_screen.dart'
;
import
'../../
base
/basic_state.dart'
;
import
'../../
directional
/directional_action_type.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
'../../
app/routing
/directional_action_type.dart'
;
import
'../../shared/router_gage.dart'
;
import
'../../widgets/back_button.dart'
;
import
'../../widgets/custom_empty_widget.dart'
;
import
'../../widgets/custom_navigation_bar.dart'
;
import
'../../
shared/
widgets/back_button.dart'
;
import
'../../
shared/
widgets/custom_empty_widget.dart'
;
import
'../../
shared/
widgets/custom_navigation_bar.dart'
;
import
'../popup_manager/popup_runner_helper.dart'
;
import
'game_tab_viewmodel.dart'
;
...
...
@@ -87,7 +87,7 @@ class _GameTabScreenState extends BaseState<GameTabScreen> with BasicState, Popu
if
(
games
.
isEmpty
)
{
return
SizedBox
(
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.8
,
child:
const
Center
(
child:
EmptyWidget
()),
child:
Center
(
child:
EmptyWidget
(
isLoading:
_viewModel
.
isLoading
.
value
)),
);
}
if
(
index
==
0
)
{
...
...
lib/
screen
/game/game_tab_viewmodel.dart
→
lib/
features
/game/game_tab_viewmodel.dart
View file @
6b980613
import
'package:get/get_rx/src/rx_types/rx_types.dart'
;
import
'package:mypoint_flutter_app/network
ing
/api/game_api.dart'
deferred
as
game_api
;
import
'package:mypoint_flutter_app/
screen
/game/models/game_bundle_item_model.dart'
;
import
'../../network
ing
/restful_api_viewmodel.dart'
;
import
'package:mypoint_flutter_app/
core/
network/api/game_api.dart'
deferred
as
game_api
;
import
'package:mypoint_flutter_app/
features
/game/models/game_bundle_item_model.dart'
;
import
'../../
core/
network/restful_api_viewmodel.dart'
;
import
'models/game_bundle_response.dart'
;
class
GameTabViewModel
extends
RestfulApiViewModel
{
...
...
Prev
1
…
5
6
7
8
9
10
11
12
13
…
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