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/vplay_game_center/vplay_game_center_viewmodel.dart
deleted
100644 → 0
View file @
bfff9e47
lib/
direc
tion
al
/directional_screen.dart
→
lib/
shared/naviga
tion/directional_screen.dart
View file @
6b980613
...
...
@@ -2,24 +2,24 @@ import 'package:flutter/foundation.dart';
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:in_app_review/in_app_review.dart'
;
import
'package:mypoint_flutter_app/extensions/string_extension.dart'
;
import
'package:mypoint_flutter_app/network
ing
/restful_api_client_all_request.dart'
;
import
'package:mypoint_flutter_app/preference/data_preference.dart'
;
import
'package:mypoint_flutter_app/widgets/alert/popup_data_model.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
'package:mypoint_flutter_app/
shared/
preference
s
/data_preference.dart'
;
import
'package:mypoint_flutter_app/
shared/
widgets/alert/popup_data_model.dart'
;
import
'package:permission_handler/permission_handler.dart'
;
import
'package:url_launcher/url_launcher.dart'
;
import
'package:uuid/uuid.dart'
;
import
'../config
s
/constants.dart'
;
import
'../
base
/app_navigator.dart'
;
import
'../network
ing
/restful_api_viewmodel.dart'
;
import
'../
resources
/base_color.dart'
;
import
'../
screen
/pageDetail/model/detail_page_rule_type.dart'
;
import
'../
screen
/pipi/pipi_detail_screen.dart'
;
import
'../
screen
/webview/web_view_screen.dart'
;
import
'../services/logout_service.dart'
;
import
'../
shared/
router_gage.dart'
;
import
'../
../app/
config/constants.dart'
;
import
'../
../app/routing
/app_navigator.dart'
;
import
'../
../core/
network/restful_api_viewmodel.dart'
;
import
'../
../core/theme
/base_color.dart'
;
import
'../
../features
/pageDetail/model/detail_page_rule_type.dart'
;
import
'../
../features
/pipi/pipi_detail_screen.dart'
;
import
'../
../features
/webview/web_view_screen.dart'
;
import
'../
../core/
services/logout_service.dart'
;
import
'../router_gage.dart'
;
import
'../widgets/alert/data_alert_model.dart'
;
import
'directional_action_type.dart'
;
import
'
../../app/routing/
directional_action_type.dart'
;
class
Defines
{
static
const
String
actionType
=
'click_action_type'
;
...
...
lib/preference/data_preference.dart
→
lib/
shared/
preference
s
/data_preference.dart
View file @
6b980613
import
'dart:convert'
;
import
'package:flutter/foundation.dart'
;
import
'package:shared_preferences/shared_preferences.dart'
;
import
'../model
/auth
/login_token_response_model.dart'
;
import
'../model
/auth
/profile_response_model.dart'
;
import
'../
screen
/popup_manager/popup_manager_viewmodel.dart'
;
import
'../web/web_helper.dart'
;
import
'../
../features/login/
model/login_token_response_model.dart'
;
import
'../
../features/personal/
model/profile_response_model.dart'
;
import
'../
../features
/popup_manager/popup_manager_viewmodel.dart'
;
import
'../
../core/services/
web/web_helper.dart'
;
class
DataPreference
{
static
final
DataPreference
_instance
=
DataPreference
.
_internal
();
...
...
lib/model
/auth
/customer_balance_model.dart
→
lib/
shared/preferences/point/
model/customer_balance_model.dart
View file @
6b980613
import
'package:json_annotation/json_annotation.dart'
;
part
'customer_balance_model.g.dart'
;
@JsonSerializable
()
class
CustomerBalanceModel
{
@JsonKey
(
name:
'amount_active'
)
...
...
lib/model
/auth
/customer_balance_model.g.dart
→
lib/
shared/preferences/point/
model/customer_balance_model.g.dart
View file @
6b980613
File moved
lib/preference/point/point_manager.dart
→
lib/
shared/
preference
s
/point/point_manager.dart
View file @
6b980613
import
'package:get/get.dart'
;
import
'../../screen/home/header_home_viewmodel.dart'
;
import
'../../../features/home/header_home_viewmodel.dart'
;
class
UserPointManager
{
UserPointManager
.
_
();
...
...
lib/resources/button_style.dart
→
lib/
shared/
resources/button_style.dart
View file @
6b980613
File moved
lib/resources/define_image.dart
→
lib/
shared/
resources/define_image.dart
View file @
6b980613
const
module
=
'assets/images'
;
const
String
icClose
=
'
$module
/ic_close.svg'
;
const
String
icLogo
=
'
$module
/ic_logo.png'
;
const
String
bgAlertHeader
=
'
$module
/bg_alert_header.svg'
;
\ No newline at end of file
lib/resources/text_style.dart
→
lib/
shared/
resources/text_style.dart
View file @
6b980613
File moved
lib/shared/router_gage.dart
View file @
6b980613
import
'package:get/get.dart'
;
import
'../
deferred
/deferred_routes.dart'
;
import
'../
screen
/game/game_cards/game_card_screen.dart'
;
import
'../
screen
/game/game_tab_screen.dart'
;
import
'../
screen
/login/login_screen.dart'
;
import
'../
screen
/main_tab_screen/main_tab_screen.dart'
;
import
'../
screen
/notification/notification_detail_screen.dart'
;
import
'../
screen
/notification/notification_screen.dart'
;
import
'../
screen
/onboarding/onboarding_screen.dart'
;
import
'../
screen
/pageDetail/campaign_detail_screen.dart'
;
import
'../
screen
/personal/personal_edit_screen.dart'
;
import
'../
screen
/register_campaign/register_form_input_screen.dart'
;
import
'../
screen
/setting/setting_screen.dart'
;
import
'../
screen
/splash/splash_screen.dart'
;
import
'../
screen
/voucher/voucher_list/voucher_list_screen.dart'
;
import
'../
screen
/webview/web_view_screen.dart'
;
import
'../
app/routing
/deferred_routes.dart'
;
import
'../
features
/game/game_cards/game_card_screen.dart'
;
import
'../
features
/game/game_tab_screen.dart'
;
import
'../
features
/login/login_screen.dart'
;
import
'../
features
/main_tab_screen/main_tab_screen.dart'
;
import
'../
features
/notification/notification_detail_screen.dart'
;
import
'../
features
/notification/notification_screen.dart'
;
import
'../
features
/onboarding/onboarding_screen.dart'
;
import
'../
features
/pageDetail/campaign_detail_screen.dart'
;
import
'../
features
/personal/personal_edit_screen.dart'
;
import
'../
features
/register_campaign/register_form_input_screen.dart'
;
import
'../
features
/setting/setting_screen.dart'
;
import
'../
features
/splash/splash_screen.dart'
;
import
'../
features
/voucher/voucher_list/voucher_list_screen.dart'
;
import
'../
features
/webview/web_view_screen.dart'
;
const
splashScreen
=
'/splash'
;
const
onboardingScreen
=
'/onboarding'
;
const
loginScreen
=
'/login'
;
...
...
lib/widgets/alert/button_config_model.dart
→
lib/
shared/
widgets/alert/button_config_model.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:json_annotation/json_annotation.dart'
;
import
'package:mypoint_flutter_app/directional/directional_action_type.dart'
;
import
'package:mypoint_flutter_app/extensions/color_extension.dart'
;
import
'package:mypoint_flutter_app/extensions/string_extension.dart'
;
import
'../../directional/directional_screen.dart'
;
import
'package:mypoint_flutter_app/core/utils/extensions/color_extension.dart'
;
import
'package:mypoint_flutter_app/core/utils/extensions/string_extension.dart'
;
import
'../../navigation/directional_screen.dart'
;
import
'data_alert_model.dart'
;
part
'button_config_model.g.dart'
;
@JsonSerializable
()
class
ButtonConfigModel
{
final
String
?
text
;
...
...
lib/widgets/alert/button_config_model.g.dart
→
lib/
shared/
widgets/alert/button_config_model.g.dart
View file @
6b980613
File moved
lib/widgets/alert/custom_alert_dialog.dart
→
lib/
shared/
widgets/alert/custom_alert_dialog.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart'
;
import
'package:get/get.dart'
;
import
'../../
resources
/base_color.dart'
;
import
'../../
../core/theme
/base_color.dart'
;
import
'../image_loader.dart'
;
import
'data_alert_model.dart'
;
...
...
@@ -88,13 +88,13 @@ class CustomAlertDialog extends StatelessWidget {
child:
loadNetworkImage
(
url:
alertData
.
urlHeaderImage
,
fit:
BoxFit
.
fill
,
placeholderAsset:
"assets/images/ic_pipi_0
6
.png"
,
placeholderAsset:
"assets/images/ic_pipi_0
3
.png"
,
),
),
);
}
final
localHeaderImage
=
(
alertData
.
localHeaderImage
??
""
);
final
localImage
=
localHeaderImage
.
isNotEmpty
?
localHeaderImage
:
"assets/images/ic_pipi_0
6
.png"
;
final
localImage
=
localHeaderImage
.
isNotEmpty
?
localHeaderImage
:
"assets/images/ic_pipi_0
3
.png"
;
return
ClipRRect
(
borderRadius:
BorderRadius
.
circular
(
12
),
child:
Image
.
asset
(
localImage
));
}
...
...
@@ -109,14 +109,14 @@ class CustomAlertDialog extends StatelessWidget {
padding:
const
EdgeInsets
.
symmetric
(
vertical:
4
),
child:
ElevatedButton
(
style:
ElevatedButton
.
styleFrom
(
backgroundColor:
btn
?
.
bgColor
,
backgroundColor:
btn
.
bgColor
,
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
24
)),
minimumSize:
const
Size
(
double
.
infinity
,
48
),
),
onPressed:
btn
?
.
onPressed
,
onPressed:
btn
.
onPressed
,
child:
Text
(
btn
?
.
text
??
""
,
style:
TextStyle
(
color:
btn
?
.
textColor
,
fontSize:
14
,
fontWeight:
FontWeight
.
bold
),
btn
.
text
,
style:
TextStyle
(
color:
btn
.
textColor
,
fontSize:
14
,
fontWeight:
FontWeight
.
bold
),
),
),
),
...
...
@@ -135,14 +135,14 @@ class CustomAlertDialog extends StatelessWidget {
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
4
),
child:
ElevatedButton
(
style:
ElevatedButton
.
styleFrom
(
backgroundColor:
btn
?
.
bgColor
,
backgroundColor:
btn
.
bgColor
,
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
24
)),
minimumSize:
const
Size
(
100
,
48
),
),
onPressed:
btn
?
.
onPressed
,
onPressed:
btn
.
onPressed
,
child:
Text
(
btn
?
.
text
??
""
,
style:
TextStyle
(
color:
btn
?
.
textColor
,
fontSize:
14
,
fontWeight:
FontWeight
.
bold
),
btn
.
text
,
style:
TextStyle
(
color:
btn
.
textColor
,
fontSize:
14
,
fontWeight:
FontWeight
.
bold
),
),
),
),
...
...
lib/widgets/alert/data_alert_model.dart
→
lib/
shared/
widgets/alert/data_alert_model.dart
View file @
6b980613
File moved
lib/widgets/alert/popup_data_model.dart
→
lib/
shared/
widgets/alert/popup_data_model.dart
View file @
6b980613
File moved
lib/widgets/alert/popup_data_model.g.dart
→
lib/
shared/
widgets/alert/popup_data_model.g.dart
View file @
6b980613
File moved
lib/widgets/back_button.dart
→
lib/
shared/
widgets/back_button.dart
View file @
6b980613
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:get/get_core/src/get_main.dart'
;
import
'package:mypoint_flutter_app/preference/data_preference.dart'
;
import
'package:mypoint_flutter_app/shared/preferences/data_preference.dart'
;
import
'package:mypoint_flutter_app/shared/router_gage.dart'
;
import
'../resources/base_color.dart'
;
import
'../../core/theme/base_color.dart'
;
class
CustomBackButton
extends
StatelessWidget
{
final
VoidCallback
?
onPressed
;
...
...
lib/
base
/base_response_model.dart
→
lib/
shared/widgets/base_view
/base_response_model.dart
View file @
6b980613
import
'package:json_annotation/json_annotation.dart'
;
part
'base_response_model.g.dart'
;
part
'base_response_model.g.dart'
;
@JsonSerializable
(
genericArgumentFactories:
true
)
class
BaseResponseModel
<
T
>
{
final
int
?
code
;
...
...
lib/
base
/base_response_model.g.dart
→
lib/
shared/widgets/base_view
/base_response_model.g.dart
View file @
6b980613
File moved
lib/
base
/base_screen.dart
→
lib/
shared/widgets/base_view
/base_screen.dart
View file @
6b980613
import
'package:flutter/foundation.dart'
;
import
'package:flutter/material.dart'
;
import
'package:mypoint_flutter_app/
base
/app_navigator.dart'
;
import
'package:mypoint_flutter_app/
app/routing
/app_navigator.dart'
;
import
'package:mypoint_flutter_app/main.dart'
show
routeObserver
;
import
'../
widgets/
alert/custom_alert_dialog.dart'
;
import
'../
widgets/
alert/data_alert_model.dart'
;
import
'../
widgets/
alert/popup_data_model.dart'
;
import
'../alert/custom_alert_dialog.dart'
;
import
'../alert/data_alert_model.dart'
;
import
'../alert/popup_data_model.dart'
;
abstract
class
BaseScreen
extends
StatefulWidget
{
const
BaseScreen
({
super
.
key
});
}
abstract
class
BaseState
<
Screen
extends
BaseScreen
>
extends
State
<
Screen
>
with
WidgetsBindingObserver
,
RouteAware
{
abstract
class
BaseState
<
Screen
extends
BaseScreen
>
extends
State
<
Screen
>
with
RouteAware
{
ModalRoute
<
dynamic
>?
_route
;
@override
void
initState
()
{
super
.
initState
();
WidgetsBinding
.
instance
.
addObserver
(
this
);
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
=>
onInit
());
}
@override
void
dispose
()
{
WidgetsBinding
.
instance
.
removeObserver
(
this
);
if
(
_route
!=
null
)
{
routeObserver
.
unsubscribe
(
this
);
}
...
...
@@ -31,21 +27,6 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
super
.
dispose
();
}
@override
void
didChangeAppLifecycleState
(
AppLifecycleState
state
)
{
super
.
didChangeAppLifecycleState
(
state
);
switch
(
state
)
{
case
AppLifecycleState
.
resumed
:
onAppResumed
();
break
;
case
AppLifecycleState
.
paused
:
onAppPaused
();
break
;
default
:
break
;
}
}
@override
void
didChangeDependencies
()
{
super
.
didChangeDependencies
();
...
...
@@ -61,7 +42,6 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
}
// MARK: - Core Lifecycle Methods
/// Called when the widget is first inserted into the tree.
/// Use this to initialize data, setup listeners, etc.
void
onInit
()
{
...
...
@@ -75,13 +55,6 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
}
// MARK: - Route Visibility Methods
/// Called when the route is about to become visible (push or uncovered).
/// Use this to prepare data, start animations, etc.
void
onRouteWillAppear
()
{
debugPrint
(
"onRouteWillAppear:
$runtimeType
"
);
}
/// Called when the route has become visible.
/// Use this to start timers, refresh data, etc.
void
onRouteDidAppear
()
{
...
...
@@ -94,26 +67,6 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
debugPrint
(
"onRouteWillDisappear:
$runtimeType
"
);
}
/// Called when the route has been covered or popped.
/// Use this to stop timers, cleanup temporary resources, etc.
void
onRouteDidDisappear
()
{
debugPrint
(
"onRouteDidDisappear:
$runtimeType
"
);
}
// MARK: - App Lifecycle Methods
/// Called when the app becomes active (foreground).
/// Use this to resume operations, refresh data, etc.
void
onAppResumed
()
{
debugPrint
(
"onAppResumed:
$runtimeType
"
);
}
/// Called when the app becomes inactive (background).
/// Use this to pause operations, save state, etc.
void
onAppPaused
()
{
debugPrint
(
"onAppPaused:
$runtimeType
"
);
}
// MARK: - UI Helper Methods
/// Shows a popup dialog with custom data
void
showPopup
({
...
...
@@ -138,10 +91,10 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
ButtonsDirection
direction
=
ButtonsDirection
.
column
,
})
{
AppNavigator
.
showAlert
(
data:
data
,
barrierDismissible:
barrierDismissible
,
showCloseButton:
showCloseButton
,
direction:
direction
data:
data
,
barrierDismissible:
barrierDismissible
,
showCloseButton:
showCloseButton
,
direction:
direction
,
);
}
...
...
@@ -170,11 +123,11 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
// MARK: - RouteAware Implementation
@override
void
didPush
()
{
_handle
RouteAppear
();
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
=>
on
Route
Did
Appear
()
)
;
}
@override
void
didPopNext
()
=>
_handle
RouteAppear
();
void
didPopNext
()
=>
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
=>
on
Route
Did
Appear
()
)
;
@override
void
didPushNext
()
=>
_handleRouteDisappear
();
...
...
@@ -182,13 +135,7 @@ abstract class BaseState<Screen extends BaseScreen> extends State<Screen>
@override
void
didPop
()
=>
_handleRouteDisappear
();
void
_handleRouteAppear
()
{
onRouteWillAppear
();
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
=>
onRouteDidAppear
());
}
void
_handleRouteDisappear
()
{
onRouteWillDisappear
();
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
=>
onRouteDidDisappear
());
}
}
Prev
1
…
20
21
22
23
24
25
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