import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; import 'package:pilipala/http/constants.dart'; import 'package:pilipala/http/init.dart'; import 'package:pilipala/http/user.dart'; import 'package:pilipala/pages/dynamics/index.dart'; import 'package:pilipala/pages/home/index.dart'; import 'package:pilipala/pages/mine/index.dart'; import 'package:pilipala/pages/rcmd/controller.dart'; import 'package:pilipala/utils/cookie.dart'; import 'package:pilipala/utils/storage.dart'; import 'package:webview_cookie_manager/webview_cookie_manager.dart'; import 'package:webview_flutter/webview_flutter.dart'; class WebviewController extends GetxController { String url = ''; String type = ''; String pageTitle = ''; final WebViewController controller = WebViewController(); RxInt loadProgress = 0.obs; RxBool loadShow = true.obs; @override void onInit() { super.onInit(); url = Get.parameters['url']!; type = Get.parameters['type']!; pageTitle = Get.parameters['pageTitle']!; webviewInit(); if (type == 'login') { controller.clearCache(); controller.clearLocalStorage(); WebViewCookieManager().clearCookies(); controller.setUserAgent(Request().headerUa('mob')); } } webviewInit() { controller ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate( NavigationDelegate( // 页面加载 onProgress: (int progress) { // Update loading bar. loadProgress.value = progress; }, onPageStarted: (String url) {}, // 加载完成 onPageFinished: (String url) async { loadShow.value = false; if (type == 'login' && (url.startsWith( 'https://passport.bilibili.com/web/sso/exchange_cookie') || url.startsWith('https://m.bilibili.com/'))) { try { var cookies = await WebviewCookieManager().getCookies(HttpString.baseUrl); var apiCookies = await WebviewCookieManager().getCookies(HttpString.baseUrl); await SetCookie.onSet(cookies, HttpString.baseUrl); await SetCookie.onSet(apiCookies, HttpString.baseApiUrl); await UserHttp.userInfo(); var result = await UserHttp.userInfo(); print('网页登录: $result'); if (result['status'] && result['data'].isLogin) { SmartDialog.showToast('登录成功'); Box user = GStrorage.user; user.put(UserBoxKey.userLogin, true); user.put(UserBoxKey.userName, result['data'].uname); user.put(UserBoxKey.userFace, result['data'].face); user.put(UserBoxKey.userMid, result['data'].mid); Box userInfoCache = GStrorage.userInfo; userInfoCache.put('userInfoCache', result['data']); Get.find().userInfo.value = result['data']; Get.find().onInit(); Get.find().queryRcmdFeed('onRefresh'); Get.find().queryFollowDynamic(); Get.back(); } } catch (e) { print(e); } } }, onWebResourceError: (WebResourceError error) {}, onNavigationRequest: (NavigationRequest request) { if (request.url.startsWith('bilibili://')) { return NavigationDecision.prevent; } return NavigationDecision.navigate; }, ), ) ..loadRequest(Uri.parse(url)); } }