try to add linux webview support

This commit is contained in:
haorendashu
2025-02-08 19:05:31 +08:00
parent 725234ce98
commit beb20091ee
20 changed files with 689 additions and 40 deletions

View File

@@ -1,8 +1,13 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:nostr_sdk/utils/string_util.dart';
import 'package:nowser/component/webview/web_info.dart';
import 'package:nowser/component/webview/webview_component.dart';
import 'package:nowser/component/webview/webview_controller.dart';
import 'package:nowser/component/webview/webview_linux_component.dart';
import 'package:nowser/component/webview/webview_linux_controller.dart';
import 'package:nowser/const/base.dart';
import 'package:nowser/const/router_path.dart';
import 'package:nowser/main.dart';
@@ -53,17 +58,48 @@ class _IndexWebComponent extends State<IndexWebComponent> {
return WebHomeComponent(webInfo);
}
var webComp = WebViewComponent(
Widget? webComp;
if (!Platform.isLinux) {
webComp = WebViewComponent(
webInfo,
(webInfo, controller) {
webInfo.controller = controller;
webInfo.controller = WebviewController(controller);
webProvider.updateWebInfo(webInfo);
},
onTitleChanged,
(webInfo, controller) {
webInfo.controller = controller;
webInfo.controller = WebviewController(controller);
webProvider.onLoadStop(webInfo);
});
} else {
webComp = WebViewLinuxComponent(
webInfo,
(webInfo, controller) {
webInfo.controller = WebviewLinuxController(controller);
webProvider.updateWebInfo(webInfo);
},
(webInfo, controller, title) {
if (webInfo.controller is WebviewLinuxController && StringUtil.isNotBlank(title)) {
(webInfo.controller as WebviewLinuxController).setTitle(title!);
webInfo.title = title;
webProvider.updateWebInfo(webInfo);
}
},
(webInfo, controller, url) {
if (webInfo.controller is WebviewLinuxController && StringUtil.isNotBlank(url)) {
print("url change! $url");
(webInfo.controller as WebviewLinuxController).setUrl(url!);
webInfo.url = url;
}
},
(webInfo, controller) async {
webInfo.controller ??= WebviewLinuxController(controller);
var title = await webInfo.controller!.getTitle();
webInfo.title = title;
webProvider.onLoadStop(webInfo);
});
}
var main = webComp;
@@ -78,7 +114,7 @@ class _IndexWebComponent extends State<IndexWebComponent> {
void onTitleChanged(
WebInfo webInfo, InAppWebViewController controller, String? title) {
webInfo.controller = controller;
webInfo.controller = WebviewController(controller);
webInfo.title = title;
webProvider.updateWebInfo(webInfo);
}

View File

@@ -25,10 +25,10 @@ class _WebTabsSelectItemComponent extends State<WebTabsSelectItemComponent> {
Future<void> loadFavicon() async {
if (widget.webInfo.controller != null) {
var favicons = await widget.webInfo.controller!.getFavicons();
if (favicons.isNotEmpty) {
var favicon = await widget.webInfo.controller!.getFavicon();
if (StringUtil.isNotBlank(favicon)) {
setState(() {
faviconUrl = favicons.first.url.toString();
faviconUrl = favicon;
});
}
}