Commit fda33894 authored by DatHV's avatar DatHV
Browse files

cap nhat giao dien

parent 75178f29
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:mypoint_flutter_app/widgets/back_button.dart';
import 'package:webview_flutter/webview_flutter.dart';
import '../../base/base_screen.dart';
import '../../base/basic_state.dart';
class BaseWebViewInput {
final String? title;
final String url;
final bool isFullScreen;
const BaseWebViewInput({
this.title,
required this.url,
this.isFullScreen = false,
});
const BaseWebViewInput({this.title, required this.url, this.isFullScreen = false});
}
class BaseWebViewScreen extends StatefulWidget {
class BaseWebViewScreen extends BaseScreen {
const BaseWebViewScreen({super.key});
@override
State<BaseWebViewScreen> createState() => _BaseWebViewScreenState();
}
class _BaseWebViewScreenState extends State<BaseWebViewScreen> {
class _BaseWebViewScreenState extends BaseState<BaseWebViewScreen> with BasicState {
late final BaseWebViewInput input;
late final WebViewController _controller;
String? _dynamicTitle;
......@@ -29,16 +30,19 @@ class _BaseWebViewScreenState extends State<BaseWebViewScreen> {
@override
void initState() {
super.initState();
final args = Get.arguments;
if (args is BaseWebViewInput) {
input = args;
} else {
throw Exception('BaseWebViewInput is required in arguments');
WidgetsBinding.instance.addPostFrameCallback((_) {
Get.back();
});
return;
}
_controller = WebViewController()
_controller =
WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(Colors.transparent)
..setNavigationDelegate(
NavigationDelegate(
onPageFinished: (_) async {
......@@ -47,58 +51,46 @@ class _BaseWebViewScreenState extends State<BaseWebViewScreen> {
_dynamicTitle = title;
});
},
onWebResourceError: (_) {
_showWebErrorDialog();
onWebResourceError: (error) {
showAlertError(content: error.description);
},
),
)
..loadRequest(Uri.parse(input.url));
_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
Widget build(BuildContext context) {
Widget createBody() {
return Scaffold(
appBar: input.isFullScreen
appBar:
input.isFullScreen
? null
: AppBar(
title: Text(
input.title ?? _dynamicTitle ?? Uri.parse(input.url).host,
style: const TextStyle(fontSize: 16),
),
leading: IconButton(
icon: const Icon(Icons.arrow_back),
onPressed: _handleBack,
),
leading: CustomBackButton(onPressed: _handleBack),
),
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 {
if (await _controller.canGoBack()) {
_controller.goBack();
......
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/login/login_screen.dart';
import '../screen/main_tab_screen/main_tab_screen.dart';
import '../screen/notification/notification_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/setting/setting_screen.dart';
import '../screen/splash/splash_screen.dart';
......@@ -12,6 +16,7 @@ import '../screen/transaction/history/transaction_history_detail_screen.dart';
import '../screen/transaction/transaction_detail_screen.dart';
import '../screen/voucher/detail/voucher_detail_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/web_view_screen.dart';
......@@ -30,6 +35,10 @@ const paymentWebViewScreen = '/paymentWebViewScreen';
const transactionHistoryDetailScreen = '/transactionHistoryDetailScreen';
const supportScreen = '/supportScreen';
const notificationScreen = '/notificationScreen';
const campaignDetailScreen = '/campaignDetailScreen';
const newsListScreen = '/newsListScreen';
const achievementListScreen = '/achievementListScreen';
const vplayGameCenterScreen = '/vplayGameCenterScreen';
class RouterPage {
static List<GetPage> pages() {
......@@ -40,21 +49,39 @@ class RouterPage {
static List<GetPage> _pages() {
return [
GetPage(name: splashScreen, page: () => const SplashScreen()),
GetPage(name: onboardingScreen, page: () => const OnboardingScreen()),
GetPage(name: loginScreen, page: () => const LoginScreen()),
GetPage(name: mainScreen, page: () => const MainTabScreen()),
GetPage(name: settingScreen, page: () => const SettingScreen()),
GetPage(name: vouchersScreen, page: () => VoucherListScreen(),),
GetPage(name: voucherDetailScreen, page: () => VoucherDetailScreen(),),
GetPage(name: gameCardScreen, page: () => GameCardScreen(),),
GetPage(name: registerFormInputScreen, page: () => RegisterFormInputScreen(),),
GetPage(name: transactionDetailScreen, page: () => TransactionDetailScreen(),),
GetPage(name: baseWebViewScreen, page: () => BaseWebViewScreen(),),
GetPage(name: paymentWebViewScreen, page: () => PaymentWebViewScreen(),),
GetPage(name: transactionHistoryDetailScreen, page: () => TransactionHistoryDetailScreen(),),
GetPage(name: supportScreen, page: () => SupportScreen(),),
GetPage(name: notificationScreen, page: () => NotificationScreen(),),
GetPage(name: splashScreen, page: () => SplashScreen()),
GetPage(name: onboardingScreen, page: () => OnboardingScreen()),
GetPage(name: loginScreen, page: () => LoginScreen()),
GetPage(name: mainScreen, page: () => MainTabScreen(), customTransition: NoSwipeBackTransition()),
GetPage(name: settingScreen, page: () => SettingScreen()),
GetPage(name: vouchersScreen, page: () => VoucherListScreen()),
GetPage(name: voucherDetailScreen, page: () => VoucherDetailScreen()),
GetPage(name: gameCardScreen, page: () => GameCardScreen()),
GetPage(name: registerFormInputScreen, page: () => RegisterFormInputScreen()),
GetPage(name: transactionDetailScreen, page: () => TransactionDetailScreen()),
GetPage(name: baseWebViewScreen, page: () => BaseWebViewScreen()),
GetPage(name: paymentWebViewScreen, page: () => PaymentWebViewScreen()),
GetPage(name: transactionHistoryDetailScreen, page: () => TransactionHistoryDetailScreen()),
GetPage(name: supportScreen, page: () => SupportScreen()),
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
......@@ -43,12 +43,9 @@ class ButtonConfigModel {
Map<String, dynamic> toJson() => _$ButtonConfigModelToJson(this);
DirectionalScreen? get directionScreen {
if (clickActionType != null || clickActionParam != null) {
return DirectionalScreen(
DirectionalScreen.build(
clickActionType: clickActionType,
clickActionParam: clickActionParam,
);
}
return null;
}
}
......@@ -37,12 +37,13 @@ class CustomBackButton extends StatelessWidget {
onPressed:
onPressed ??
() {
if (Navigator.canPop(context)) {
Navigator.pop(context);
} else {
DataPreference.instance.clearData();
Get.offAllNamed(onboardingScreen);
}
Get.back();
// if (Navigator.canPop(context)) {
// Navigator.pop(context);
// } else {
// DataPreference.instance.clearData();
// Get.offAllNamed(onboardingScreen);
// }
},
),
),
......
......@@ -51,6 +51,7 @@ dependencies:
webview_flutter: ^4.2.2
qr_flutter: ^4.0.0
barcode_widget: ^2.0.1
infinite_carousel: ^1.0.3
game_miniapp:
path: ../mini_app/game_miniapp
dev_dependencies:
......
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