import 'dart:developer'; import 'dart:core'; import 'package:wanisclient/config/num_extension.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:percent_indicator/circular_percent_indicator.dart'; import 'package:webview_flutter/webview_flutter.dart'; import '../config/constants/app_constant.dart' as consts; import '../config/custom_text.dart'; import '../config/text_style.dart'; import 'package:wanisclient/config/screen_size.dart'; class OAuthPageView extends StatefulWidget { final String provider; const OAuthPageView({ Key? key, required this.provider, }) : super(key: key); @override State createState() => _OAuthPageViewState(); } class _OAuthPageViewState extends State { int? progress; late WebViewController controller; @override void initState() { super.initState(); controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setBackgroundColor(const Color(0x00000000)) ..setUserAgent('random') ..setNavigationDelegate( NavigationDelegate( onProgress: (int p) { setState(() { progress = p == 100 ? null : p; }); }, onPageStarted: (String url) {}, onPageFinished: (String url) { if (url .startsWith('https://${consts.url}/signin/oauth2/redirect')) {} log(url.toString()); }, onWebResourceError: (WebResourceError error) {}, onNavigationRequest: (NavigationRequest request) { if (request.url .startsWith('https://${consts.url}/signin/oauth2/redirect')) { final responseUrl = Uri.parse(request.url); if (responseUrl.query.contains("error")) { Get.back(); Get.showSnackbar( const GetSnackBar( snackPosition: SnackPosition.TOP, backgroundColor: Color(0xffD72A1D), messageText: Column( children: [ Txt( text: 'Sign in error', style: TextStyle( fontFamily: "Poppins", fontWeight: FontWeight.w500, color: Colors.white, fontSize: 11, ), ), SizedBox(height: 5), Txt( text: "We couldn't sign with google please try another account.", style: TextStyle( fontFamily: "Poppins", fontWeight: FontWeight.w700, color: Colors.white, fontSize: 12, ), ) ], ), duration: Duration(seconds: 3), ), ); } else { final qp = responseUrl.query.split("="); if (qp.length > 1 && qp[1].isNotEmpty) { final token = qp[1]; Navigator.pop(context, token); } } return NavigationDecision.prevent; } return NavigationDecision.navigate; }, ), ) ..loadRequest(Uri.parse( 'https://${consts.url}/oauth2/authorize/google?redirect_uri=https://${consts.url}/signin/oauth2/redirect', )); } @override Widget build(BuildContext context) { ScreenConfiguration().initialize(context); return Scaffold( body: SafeArea( child: Center( child: Stack( children: [ WebViewWidget(controller: controller), // back button Padding( padding: EdgeInsets.only( left: 5.0.w, bottom: 2.0.h, top: 4.5.h, ), child: Container( width: 10.0.w, height: 8.0.h, color: Colors.white, child: IconButton( icon: Icon( Icons.arrow_back_ios, color: Colors.black, size: 7.0.w, ), onPressed: () => Navigator.pop(context), ), ), ), if (progress != null) Center( child: CircularPercentIndicator( radius: 12.0.w, lineWidth: 1.0.w, animation: false, percent: (progress!.clamp(0, 100)) / 100, center: Text( "$progress%", style: tS( 'pop_regular', 2.5.h, FontWeight.normal, Colors.black, ), ), circularStrokeCap: CircularStrokeCap.round, progressColor: const Color(0xffD72A1D), ), ), ], ), ), ), ); } }