mirror of
https://github.com/haorendashu/nowser.git
synced 2025-12-17 09:54:19 +01:00
129 lines
4.1 KiB
Dart
129 lines
4.1 KiB
Dart
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';
|
|
import 'package:nowser/provider/web_provider.dart';
|
|
import 'package:nowser/util/router_util.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
import '../../component/webview/web_home_component.dart';
|
|
import '../../component/webview/webview_number_component.dart';
|
|
import 'web_control_component.dart';
|
|
|
|
class IndexWebComponent extends StatefulWidget {
|
|
WebInfo webInfo;
|
|
|
|
IndexWebComponent(this.webInfo, {required GlobalKey key}) : super(key: key);
|
|
|
|
@override
|
|
State<StatefulWidget> createState() {
|
|
return _IndexWebComponent();
|
|
}
|
|
}
|
|
|
|
class _IndexWebComponent extends State<IndexWebComponent> {
|
|
static const double BOTTOM_BTN_PADDING = 10;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
// print("indexWebComp initState ${widget.webInfo.id}");
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
super.dispose();
|
|
// print("indexWebComp dispose ${widget.webInfo.id}");
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
var mediaQuery = MediaQuery.of(context);
|
|
var padding = mediaQuery.padding;
|
|
var maxWidth = mediaQuery.size.width;
|
|
var titleWidth = maxWidth / 2;
|
|
|
|
var webInfo = widget.webInfo;
|
|
|
|
if (StringUtil.isBlank(webInfo.url)) {
|
|
return WebHomeComponent(webInfo);
|
|
}
|
|
|
|
Widget? webComp;
|
|
if (!Platform.isLinux) {
|
|
webComp = WebViewComponent(
|
|
webInfo,
|
|
(webInfo, controller) {
|
|
webInfo.controller = WebviewController(controller);
|
|
webProvider.updateWebInfo(webInfo);
|
|
},
|
|
onTitleChanged,
|
|
(webInfo, controller, url) {
|
|
var urlStr = url.toString();
|
|
if (urlStr.startsWith("https")) {
|
|
webInfo.isSecure = true;
|
|
} else {
|
|
webInfo.isSecure = false;
|
|
}
|
|
},
|
|
(webInfo, 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)) {
|
|
// if (url!.startsWith("https")) {
|
|
// webInfo.isSecure = true;
|
|
// } else {
|
|
// webInfo.isSecure = false;
|
|
// }
|
|
|
|
// 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);
|
|
// });
|
|
}
|
|
|
|
return Container(
|
|
padding: EdgeInsets.only(
|
|
top: padding.top,
|
|
),
|
|
child: webComp,
|
|
);
|
|
}
|
|
|
|
void onTitleChanged(
|
|
WebInfo webInfo, InAppWebViewController controller, String? title) {
|
|
webInfo.controller = WebviewController(controller);
|
|
webInfo.title = title;
|
|
webProvider.updateWebInfo(webInfo);
|
|
}
|
|
}
|