11import 'package:flutter/foundation.dart' ;
22import 'package:flutter/material.dart' ;
3+ import 'package:flutter_inappwebview/flutter_inappwebview.dart' ;
34import 'package:flutter_spinkit/flutter_spinkit.dart' ;
45import 'package:gsy_github_app_flutter/common/localization/default_localizations.dart' ;
56import 'package:gsy_github_app_flutter/common/style/gsy_style.dart' ;
67import 'package:gsy_github_app_flutter/widget/gsy_common_option_widget.dart' ;
78import 'package:webview_flutter/webview_flutter.dart' ;
89
9- // Import for Android features.
10- import 'package:webview_flutter_android/webview_flutter_android.dart' ;
11-
12- // Import for iOS features.
13- import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart' ;
14-
1510class LoginWebView extends StatefulWidget {
1611 final String url;
1712 final String title;
@@ -25,57 +20,14 @@ class LoginWebView extends StatefulWidget {
2520class _LoginWebViewState extends State <LoginWebView > {
2621 late final WebViewController controller;
2722
23+ final GlobalKey webViewKey = GlobalKey ();
24+
25+ InAppWebViewController ? webViewController;
26+
2827 late final PlatformWebViewControllerCreationParams params;
2928
3029 @override
3130 void initState () {
32- if (WebViewPlatform .instance is WebKitWebViewPlatform ) {
33- params = WebKitWebViewControllerCreationParams (
34- allowsInlineMediaPlayback: true ,
35- mediaTypesRequiringUserAction: const < PlaybackMediaTypes > {},
36- );
37- } else {
38- params = const PlatformWebViewControllerCreationParams ();
39- }
40-
41- controller = WebViewController .fromPlatformCreationParams (params);
42- if (controller.platform is AndroidWebViewController ) {
43- //AndroidWebViewController.enableDebugging(true);
44- (controller.platform as AndroidWebViewController )
45- .setMediaPlaybackRequiresUserGesture (true );
46- }
47- controller
48- ..setJavaScriptMode (JavaScriptMode .unrestricted)
49- ..setBackgroundColor (const Color (0x00000000 ))
50- ..setNavigationDelegate (
51- NavigationDelegate (
52- onProgress: (int progress) {
53- // Update loading bar.
54- },
55- onPageStarted: (String url) {},
56- onPageFinished: (String url) {
57- setState (() {
58- isLoading = false ;
59- });
60- },
61- onWebResourceError: (WebResourceError error) {},
62- onNavigationRequest: (NavigationRequest request) {
63- if (request.url.startsWith ("gsygithubapp://authed" )) {
64- var code = Uri .parse (request.url).queryParameters["code" ];
65- if (kDebugMode) {
66- print ("code $code " );
67- }
68- Navigator .of (context).pop (code);
69- return NavigationDecision .prevent;
70- }
71- return NavigationDecision .navigate;
72- },
73- ),
74- )
75- ..loadRequest (Uri .parse (
76- widget.url,
77- ));
78-
7931 super .initState ();
8032 }
8133
@@ -86,10 +38,10 @@ class _LoginWebViewState extends State<LoginWebView> {
8638 return Row (children: [
8739 Expanded (
8840 child: Text (
89- widget.title,
90- maxLines: 1 ,
91- overflow: TextOverflow .ellipsis,
92- )),
41+ widget.title,
42+ maxLines: 1 ,
43+ overflow: TextOverflow .ellipsis,
44+ )),
9345 GSYCommonOptionWidget (url: widget.url),
9446 ]);
9547 }
@@ -109,8 +61,38 @@ class _LoginWebViewState extends State<LoginWebView> {
10961 TextField (
11062 focusNode: focusNode,
11163 ),
112- WebViewWidget (
113- controller: controller,
64+ InAppWebView (
65+ key: webViewKey,
66+ initialUrlRequest: URLRequest (url: Uri .parse (widget.url)),
67+ onWebViewCreated: (controller) {
68+ webViewController = controller;
69+ webViewController? .loadUrl (
70+ urlRequest: URLRequest (url: Uri .parse (widget.url)));
71+ },
72+ onLoadStart: (controller, url) {
73+ setState (() {
74+ isLoading = true ;
75+ });
76+ },
77+ onLoadStop: (controller, url) async {
78+ setState (() {
79+ isLoading = false ;
80+ });
81+ if (url.toString ().startsWith ("gsygithubapp://authed" )) {
82+ var code = Uri .parse (url.toString ()).queryParameters["code" ];
83+ if (kDebugMode) {
84+ print ("code $code " );
85+ }
86+ Navigator .of (context).pop (code);
87+ }
88+ },
89+ onProgressChanged: (controller, progress) {
90+ if (progress == 100 ) {
91+ setState (() {
92+ isLoading = false ;
93+ });
94+ }
95+ },
11496 ),
11597 if (isLoading)
11698 Center (
@@ -121,11 +103,9 @@ class _LoginWebViewState extends State<LoginWebView> {
121103 child: Row (
122104 mainAxisAlignment: MainAxisAlignment .center,
123105 children: < Widget > [
124- SpinKitDoubleBounce (
125- color: Theme .of (context).primaryColor),
106+ SpinKitDoubleBounce (color: Theme .of (context).primaryColor),
126107 Container (width: 10.0 ),
127- Text (
128- GSYLocalizations .i18n (context)! .loading_text,
108+ Text (GSYLocalizations .i18n (context)! .loading_text,
129109 style: GSYConstant .middleText),
130110 ],
131111 ),
0 commit comments