mod: 图标&样式&网页登录

This commit is contained in:
guozhigq
2023-05-08 10:17:35 +08:00
parent a66bb08ca8
commit 89766a72d9
59 changed files with 449 additions and 149 deletions

View File

@ -0,0 +1,69 @@
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:pilipala/http/constants.dart';
import 'package:pilipala/http/user.dart';
import 'package:pilipala/utils/cookie.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();
@override
void onInit() {
super.onInit();
url = Get.parameters['url']!;
type = Get.parameters['type']!;
pageTitle = Get.parameters['pageTitle']!;
webviewInit();
}
webviewInit() {
controller
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setNavigationDelegate(
NavigationDelegate(
// 页面加载
onProgress: (int progress) {
// Update loading bar.
},
onPageStarted: (String url) {},
// 加载完成
onPageFinished: (String url) async {
if (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);
var result = await UserHttp.userInfo();
bool isLogin = result['data']['isLogin'];
if (isLogin) {
SmartDialog.showToast('登录成功');
Get.back();
}
} catch (e) {
print(e);
}
}
},
onWebResourceError: (WebResourceError error) {},
onNavigationRequest: (NavigationRequest request) {
if (request.url.startsWith('https://www.youtube.com/')) {
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
),
)
..loadRequest(Uri.parse(url));
}
}

View File

@ -0,0 +1,4 @@
library webview;
export './controller.dart';
export './view.dart';

View File

@ -0,0 +1,29 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'controller.dart';
import 'package:webview_flutter/webview_flutter.dart';
class WebviewPage extends StatefulWidget {
const WebviewPage({super.key});
@override
State<WebviewPage> createState() => _WebviewPageState();
}
class _WebviewPageState extends State<WebviewPage> {
final WebviewController _webviewController = Get.put(WebviewController());
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: false,
title: Text(
_webviewController.pageTitle,
style: Theme.of(context).textTheme.titleMedium,
),
),
body: WebViewWidget(controller: _webviewController.controller),
);
}
}