mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-28 14:25:55 +08:00
windows webview
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -26,12 +26,17 @@ import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_displaymode/flutter_displaymode.dart';
|
||||
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:media_kit/media_kit.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
WebViewEnvironment? webViewEnvironment;
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
MediaKit.ensureInitialized();
|
||||
@@ -62,6 +67,17 @@ void main() async {
|
||||
]);
|
||||
}
|
||||
|
||||
if (Platform.isWindows) {
|
||||
if (await WebViewEnvironment.getAvailableVersion() != null) {
|
||||
final dir = await getApplicationSupportDirectory();
|
||||
webViewEnvironment = await WebViewEnvironment.create(
|
||||
settings: WebViewEnvironmentSettings(
|
||||
userDataFolder: path.join(dir.path, 'flutter_inappwebview'),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Request();
|
||||
Request.setCookie();
|
||||
RequestUtils.syncHistoryStatus();
|
||||
|
||||
@@ -34,6 +34,7 @@ class _MainAppState extends State<MainApp>
|
||||
with RouteAware, WidgetsBindingObserver, WindowListener, TrayListener {
|
||||
final MainController _mainController = Get.put(MainController());
|
||||
late final _setting = GStorage.setting;
|
||||
static const MethodChannel _channel = MethodChannel('window_control');
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -131,6 +132,14 @@ class _MainAppState extends State<MainApp>
|
||||
void onWindowClose() {
|
||||
if (_mainController.minimizeOnExit) {
|
||||
windowManager.hide();
|
||||
} else {
|
||||
_onClose();
|
||||
}
|
||||
}
|
||||
|
||||
void _onClose() {
|
||||
if (Platform.isWindows) {
|
||||
_channel.invokeMethod('closeWindow');
|
||||
} else {
|
||||
exit(0);
|
||||
}
|
||||
@@ -157,7 +166,7 @@ class _MainAppState extends State<MainApp>
|
||||
case 'show':
|
||||
windowManager.show();
|
||||
case 'exit':
|
||||
exit(0);
|
||||
_onClose();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:PiliPlus/http/ua_type.dart';
|
||||
import 'package:PiliPlus/main.dart';
|
||||
import 'package:PiliPlus/models/common/webview_menu_type.dart';
|
||||
import 'package:PiliPlus/utils/app_scheme.dart';
|
||||
import 'package:PiliPlus/utils/cache_manage.dart';
|
||||
@@ -60,7 +61,7 @@ class _WebviewPageState extends State<WebviewPage> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (Platform.isWindows || Platform.isLinux) {
|
||||
if (Platform.isLinux) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(),
|
||||
body: Center(
|
||||
@@ -156,6 +157,7 @@ class _WebviewPageState extends State<WebviewPage> {
|
||||
),
|
||||
body: SafeArea(
|
||||
child: InAppWebView(
|
||||
webViewEnvironment: webViewEnvironment,
|
||||
initialSettings: InAppWebViewSettings(
|
||||
clearCache: true,
|
||||
javaScriptEnabled: true,
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'dart:io' show Platform;
|
||||
import 'package:PiliPlus/grpc/grpc_req.dart';
|
||||
import 'package:PiliPlus/http/loading_state.dart';
|
||||
import 'package:PiliPlus/http/user.dart';
|
||||
import 'package:PiliPlus/main.dart';
|
||||
import 'package:PiliPlus/models/common/dynamic/dynamics_type.dart';
|
||||
import 'package:PiliPlus/models/common/home_tab_type.dart';
|
||||
import 'package:PiliPlus/models/user/info.dart';
|
||||
@@ -27,15 +28,20 @@ import 'package:get/get.dart';
|
||||
|
||||
abstract class LoginUtils {
|
||||
static FutureOr setWebCookie([Account? account]) {
|
||||
if (Platform.isWindows || Platform.isLinux) {
|
||||
if (Platform.isLinux) {
|
||||
return null;
|
||||
}
|
||||
final cookies = (account ?? Accounts.main).cookieJar.toList();
|
||||
final webManager = web.CookieManager.instance();
|
||||
final webManager = web.CookieManager.instance(
|
||||
webViewEnvironment: webViewEnvironment,
|
||||
);
|
||||
final isWindows = Platform.isWindows;
|
||||
return Future.wait(
|
||||
cookies.map(
|
||||
(cookie) => webManager.setCookie(
|
||||
url: web.WebUri(cookie.domain ?? ''),
|
||||
url: web.WebUri(
|
||||
'${isWindows ? 'https://' : ''} ${cookie.domain}',
|
||||
),
|
||||
name: cookie.name,
|
||||
value: cookie.value,
|
||||
path: cookie.path ?? '/',
|
||||
@@ -117,7 +123,7 @@ abstract class LoginUtils {
|
||||
GrpcReq.updateHeaders(null);
|
||||
|
||||
await Future.wait([
|
||||
if (!Platform.isWindows) web.CookieManager.instance().deleteAllCookies(),
|
||||
if (!Platform.isLinux) web.CookieManager.instance().deleteAllCookies(),
|
||||
GStorage.userInfo.delete('userInfoCache'),
|
||||
]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user