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
fda33894
Commit
fda33894
authored
Jun 06, 2025
by
DatHV
Browse files
cap nhat giao dien
parent
75178f29
Changes
86
Show whitespace changes
Inline
Side-by-side
lib/screen/vplay_game_center/vplay_game_center_viewmodel.dart
0 → 100644
View file @
fda33894
lib/screen/webview/web_view_screen.dart
View file @
fda33894
import
'package:flutter/foundation.dart'
;
import
'package:flutter/gestures.dart'
;
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/widgets/back_button.dart'
;
import
'package:webview_flutter/webview_flutter.dart'
;
import
'package:webview_flutter/webview_flutter.dart'
;
import
'../../base/base_screen.dart'
;
import
'../../base/basic_state.dart'
;
class
BaseWebViewInput
{
class
BaseWebViewInput
{
final
String
?
title
;
final
String
?
title
;
final
String
url
;
final
String
url
;
final
bool
isFullScreen
;
final
bool
isFullScreen
;
const
BaseWebViewInput
({
const
BaseWebViewInput
({
this
.
title
,
required
this
.
url
,
this
.
isFullScreen
=
false
});
this
.
title
,
required
this
.
url
,
this
.
isFullScreen
=
false
,
});
}
}
class
BaseWebViewScreen
extends
StatefulWidget
{
class
BaseWebViewScreen
extends
BaseScreen
{
const
BaseWebViewScreen
({
super
.
key
});
const
BaseWebViewScreen
({
super
.
key
});
@override
@override
State
<
BaseWebViewScreen
>
createState
()
=>
_BaseWebViewScreenState
();
State
<
BaseWebViewScreen
>
createState
()
=>
_BaseWebViewScreenState
();
}
}
class
_BaseWebViewScreenState
extends
State
<
BaseWebViewScreen
>
{
class
_BaseWebViewScreenState
extends
Base
State
<
BaseWebViewScreen
>
with
BasicState
{
late
final
BaseWebViewInput
input
;
late
final
BaseWebViewInput
input
;
late
final
WebViewController
_controller
;
late
final
WebViewController
_controller
;
String
?
_dynamicTitle
;
String
?
_dynamicTitle
;
...
@@ -29,16 +30,19 @@ class _BaseWebViewScreenState extends State<BaseWebViewScreen> {
...
@@ -29,16 +30,19 @@ class _BaseWebViewScreenState extends State<BaseWebViewScreen> {
@override
@override
void
initState
()
{
void
initState
()
{
super
.
initState
();
super
.
initState
();
final
args
=
Get
.
arguments
;
final
args
=
Get
.
arguments
;
if
(
args
is
BaseWebViewInput
)
{
if
(
args
is
BaseWebViewInput
)
{
input
=
args
;
input
=
args
;
}
else
{
}
else
{
throw
Exception
(
'BaseWebViewInput is required in arguments'
);
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
{
Get
.
back
();
});
return
;
}
}
_controller
=
_controller
=
WebViewController
()
WebViewController
()
..
setJavaScriptMode
(
JavaScriptMode
.
unrestricted
)
..
setJavaScriptMode
(
JavaScriptMode
.
unrestricted
)
..
setBackgroundColor
(
Colors
.
transparent
)
..
setNavigationDelegate
(
..
setNavigationDelegate
(
NavigationDelegate
(
NavigationDelegate
(
onPageFinished:
(
_
)
async
{
onPageFinished:
(
_
)
async
{
...
@@ -47,58 +51,46 @@ class _BaseWebViewScreenState extends State<BaseWebViewScreen> {
...
@@ -47,58 +51,46 @@ class _BaseWebViewScreenState extends State<BaseWebViewScreen> {
_dynamicTitle
=
title
;
_dynamicTitle
=
title
;
});
});
},
},
onWebResourceError:
(
_
)
{
onWebResourceError:
(
error
)
{
_showWebErrorDialog
(
);
showAlertError
(
content:
error
.
description
);
},
},
),
),
)
)
..
loadRequest
(
Uri
.
parse
(
input
.
url
));
..
loadRequest
(
Uri
.
parse
(
input
.
url
));
_clearCookies
();
_clearCookies
();
}
}
Future
<
void
>
_clearCookies
()
async
{
final
cookieManager
=
WebViewCookieManager
();
await
cookieManager
.
clearCookies
();
}
void
_showWebErrorDialog
()
{
showDialog
(
context:
context
,
builder:
(
_
)
=>
AlertDialog
(
title:
const
Text
(
"Lỗi"
),
content:
const
Text
(
"Không thể tải nội dung. Vui lòng thử lại sau."
),
actions:
[
TextButton
(
onPressed:
()
=>
Navigator
.
pop
(
context
),
child:
const
Text
(
"Đóng"
),
)
],
),
);
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
createBody
(
)
{
return
Scaffold
(
return
Scaffold
(
appBar:
input
.
isFullScreen
appBar:
input
.
isFullScreen
?
null
?
null
:
AppBar
(
:
AppBar
(
title:
Text
(
title:
Text
(
input
.
title
??
_dynamicTitle
??
Uri
.
parse
(
input
.
url
).
host
,
input
.
title
??
_dynamicTitle
??
Uri
.
parse
(
input
.
url
).
host
,
style:
const
TextStyle
(
fontSize:
16
),
style:
const
TextStyle
(
fontSize:
16
),
),
),
leading:
IconButton
(
leading:
CustomBackButton
(
onPressed:
_handleBack
),
icon:
const
Icon
(
Icons
.
arrow_back
),
onPressed:
_handleBack
,
),
),
),
body:
SafeArea
(
body:
SafeArea
(
child:
WebViewWidget
(
controller:
_controller
),
child:
WebViewWidget
(
controller:
_controller
,
gestureRecognizers:
const
<
Factory
<
OneSequenceGestureRecognizer
>>{
Factory
<
VerticalDragGestureRecognizer
>(
VerticalDragGestureRecognizer
.
new
,
),
},
),
),
),
);
);
}
}
Future
<
void
>
_clearCookies
()
async
{
final
cookieManager
=
WebViewCookieManager
();
await
cookieManager
.
clearCookies
();
}
void
_handleBack
()
async
{
void
_handleBack
()
async
{
if
(
await
_controller
.
canGoBack
())
{
if
(
await
_controller
.
canGoBack
())
{
_controller
.
goBack
();
_controller
.
goBack
();
...
...
lib/shared/router_gage.dart
View file @
fda33894
import
'package:get/get_navigation/src/routes/get_route.dart'
;
import
'package:flutter/cupertino.dart'
;
import
'package:get/get.dart'
;
import
'package:mypoint_flutter_app/screen/news/news_list_screen.dart'
;
import
'../screen/achievement/achievement_list_screen.dart'
;
import
'../screen/game/game_cards/game_card_screen.dart'
;
import
'../screen/game/game_cards/game_card_screen.dart'
;
import
'../screen/login/login_screen.dart'
;
import
'../screen/login/login_screen.dart'
;
import
'../screen/main_tab_screen/main_tab_screen.dart'
;
import
'../screen/main_tab_screen/main_tab_screen.dart'
;
import
'../screen/notification/notification_screen.dart'
;
import
'../screen/notification/notification_screen.dart'
;
import
'../screen/onboarding/onboarding_screen.dart'
;
import
'../screen/onboarding/onboarding_screen.dart'
;
import
'../screen/pageDetail/campaign_detail_screen.dart'
;
import
'../screen/register_campaign/register_form_input_screen.dart'
;
import
'../screen/register_campaign/register_form_input_screen.dart'
;
import
'../screen/setting/setting_screen.dart'
;
import
'../screen/setting/setting_screen.dart'
;
import
'../screen/splash/splash_screen.dart'
;
import
'../screen/splash/splash_screen.dart'
;
...
@@ -12,6 +16,7 @@ import '../screen/transaction/history/transaction_history_detail_screen.dart';
...
@@ -12,6 +16,7 @@ import '../screen/transaction/history/transaction_history_detail_screen.dart';
import
'../screen/transaction/transaction_detail_screen.dart'
;
import
'../screen/transaction/transaction_detail_screen.dart'
;
import
'../screen/voucher/detail/voucher_detail_screen.dart'
;
import
'../screen/voucher/detail/voucher_detail_screen.dart'
;
import
'../screen/voucher/voucher_list/voucher_list_screen.dart'
;
import
'../screen/voucher/voucher_list/voucher_list_screen.dart'
;
import
'../screen/vplay_game_center/vplay_game_center_screen.dart'
;
import
'../screen/webview/payment_web_view_screen.dart'
;
import
'../screen/webview/payment_web_view_screen.dart'
;
import
'../screen/webview/web_view_screen.dart'
;
import
'../screen/webview/web_view_screen.dart'
;
...
@@ -30,6 +35,10 @@ const paymentWebViewScreen = '/paymentWebViewScreen';
...
@@ -30,6 +35,10 @@ const paymentWebViewScreen = '/paymentWebViewScreen';
const
transactionHistoryDetailScreen
=
'/transactionHistoryDetailScreen'
;
const
transactionHistoryDetailScreen
=
'/transactionHistoryDetailScreen'
;
const
supportScreen
=
'/supportScreen'
;
const
supportScreen
=
'/supportScreen'
;
const
notificationScreen
=
'/notificationScreen'
;
const
notificationScreen
=
'/notificationScreen'
;
const
campaignDetailScreen
=
'/campaignDetailScreen'
;
const
newsListScreen
=
'/newsListScreen'
;
const
achievementListScreen
=
'/achievementListScreen'
;
const
vplayGameCenterScreen
=
'/vplayGameCenterScreen'
;
class
RouterPage
{
class
RouterPage
{
static
List
<
GetPage
>
pages
()
{
static
List
<
GetPage
>
pages
()
{
...
@@ -40,21 +49,39 @@ class RouterPage {
...
@@ -40,21 +49,39 @@ class RouterPage {
static
List
<
GetPage
>
_pages
()
{
static
List
<
GetPage
>
_pages
()
{
return
[
return
[
GetPage
(
name:
splashScreen
,
page:
()
=>
const
SplashScreen
()),
GetPage
(
name:
splashScreen
,
page:
()
=>
SplashScreen
()),
GetPage
(
name:
onboardingScreen
,
page:
()
=>
const
OnboardingScreen
()),
GetPage
(
name:
onboardingScreen
,
page:
()
=>
OnboardingScreen
()),
GetPage
(
name:
loginScreen
,
page:
()
=>
const
LoginScreen
()),
GetPage
(
name:
loginScreen
,
page:
()
=>
LoginScreen
()),
GetPage
(
name:
mainScreen
,
page:
()
=>
const
MainTabScreen
()),
GetPage
(
name:
mainScreen
,
page:
()
=>
MainTabScreen
(),
customTransition:
NoSwipeBackTransition
()),
GetPage
(
name:
settingScreen
,
page:
()
=>
const
SettingScreen
()),
GetPage
(
name:
settingScreen
,
page:
()
=>
SettingScreen
()),
GetPage
(
name:
vouchersScreen
,
page:
()
=>
VoucherListScreen
(),),
GetPage
(
name:
vouchersScreen
,
page:
()
=>
VoucherListScreen
()),
GetPage
(
name:
voucherDetailScreen
,
page:
()
=>
VoucherDetailScreen
(),),
GetPage
(
name:
voucherDetailScreen
,
page:
()
=>
VoucherDetailScreen
()),
GetPage
(
name:
gameCardScreen
,
page:
()
=>
GameCardScreen
(),),
GetPage
(
name:
gameCardScreen
,
page:
()
=>
GameCardScreen
()),
GetPage
(
name:
registerFormInputScreen
,
page:
()
=>
RegisterFormInputScreen
(),),
GetPage
(
name:
registerFormInputScreen
,
page:
()
=>
RegisterFormInputScreen
()),
GetPage
(
name:
transactionDetailScreen
,
page:
()
=>
TransactionDetailScreen
(),),
GetPage
(
name:
transactionDetailScreen
,
page:
()
=>
TransactionDetailScreen
()),
GetPage
(
name:
baseWebViewScreen
,
page:
()
=>
BaseWebViewScreen
(),),
GetPage
(
name:
baseWebViewScreen
,
page:
()
=>
BaseWebViewScreen
()),
GetPage
(
name:
paymentWebViewScreen
,
page:
()
=>
PaymentWebViewScreen
(),),
GetPage
(
name:
paymentWebViewScreen
,
page:
()
=>
PaymentWebViewScreen
()),
GetPage
(
name:
transactionHistoryDetailScreen
,
page:
()
=>
TransactionHistoryDetailScreen
(),),
GetPage
(
name:
transactionHistoryDetailScreen
,
page:
()
=>
TransactionHistoryDetailScreen
()),
GetPage
(
name:
supportScreen
,
page:
()
=>
SupportScreen
(),),
GetPage
(
name:
supportScreen
,
page:
()
=>
SupportScreen
()),
GetPage
(
name:
notificationScreen
,
page:
()
=>
NotificationScreen
(),),
GetPage
(
name:
notificationScreen
,
page:
()
=>
NotificationScreen
()),
GetPage
(
name:
campaignDetailScreen
,
page:
()
=>
CampaignDetailScreen
()),
GetPage
(
name:
newsListScreen
,
page:
()
=>
NewsListScreen
()),
GetPage
(
name:
achievementListScreen
,
page:
()
=>
AchievementListScreen
()),
GetPage
(
name:
vplayGameCenterScreen
,
page:
()
=>
VplayGameCenterScreen
()),
];
];
}
}
}
}
class
NoSwipeBackTransition
extends
CustomTransition
{
@override
Widget
buildTransition
(
BuildContext
context
,
Curve
?
curve
,
Alignment
?
alignment
,
Animation
<
double
>
animation
,
Animation
<
double
>
secondaryAnimation
,
Widget
child
,
)
{
return
child
;
}
}
\ No newline at end of file
lib/widgets/alert/button_config_model.dart
View file @
fda33894
...
@@ -43,12 +43,9 @@ class ButtonConfigModel {
...
@@ -43,12 +43,9 @@ class ButtonConfigModel {
Map
<
String
,
dynamic
>
toJson
()
=>
_$ButtonConfigModelToJson
(
this
);
Map
<
String
,
dynamic
>
toJson
()
=>
_$ButtonConfigModelToJson
(
this
);
DirectionalScreen
?
get
directionScreen
{
DirectionalScreen
?
get
directionScreen
{
if
(
clickActionType
!=
null
||
clickActionParam
!=
null
)
{
DirectionalScreen
.
build
(
return
DirectionalScreen
(
clickActionType:
clickActionType
,
clickActionType:
clickActionType
,
clickActionParam:
clickActionParam
,
clickActionParam:
clickActionParam
,
);
);
}
}
return
null
;
}
}
}
lib/widgets/back_button.dart
View file @
fda33894
...
@@ -37,12 +37,13 @@ class CustomBackButton extends StatelessWidget {
...
@@ -37,12 +37,13 @@ class CustomBackButton extends StatelessWidget {
onPressed:
onPressed:
onPressed
??
onPressed
??
()
{
()
{
if
(
Navigator
.
canPop
(
context
))
{
Get
.
back
();
Navigator
.
pop
(
context
);
// if (Navigator.canPop(context)) {
}
else
{
// Navigator.pop(context);
DataPreference
.
instance
.
clearData
();
// } else {
Get
.
offAllNamed
(
onboardingScreen
);
// DataPreference.instance.clearData();
}
// Get.offAllNamed(onboardingScreen);
// }
},
},
),
),
),
),
...
...
pubspec.yaml
View file @
fda33894
...
@@ -51,6 +51,7 @@ dependencies:
...
@@ -51,6 +51,7 @@ dependencies:
webview_flutter
:
^4.2.2
webview_flutter
:
^4.2.2
qr_flutter
:
^4.0.0
qr_flutter
:
^4.0.0
barcode_widget
:
^2.0.1
barcode_widget
:
^2.0.1
infinite_carousel
:
^1.0.3
game_miniapp
:
game_miniapp
:
path
:
../mini_app/game_miniapp
path
:
../mini_app/game_miniapp
dev_dependencies
:
dev_dependencies
:
...
...
Prev
1
2
3
4
5
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