将网页的初始化修改为 按钮添加 控制网页数量

This commit is contained in:
WoNiu 2024-04-07 16:05:10 +08:00
parent ad9e833aba
commit 172e30b2a3
3 changed files with 148 additions and 66 deletions

View File

@ -24,10 +24,10 @@ class SynchronizationWebTool{
/// js
setChildController(List<WebviewController> childControllers){
for (var controller in childControllers) {
controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs);
// controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(90));
}
// for (var controller in childControllers) {
// controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs);
// // controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(90));
// }
_childControllers = childControllers;

View File

@ -4,14 +4,27 @@ import 'package:web_synchronization_tool/windows/synchronization_web_tool.dart';
import 'package:webview_windows/webview_windows.dart';
class WebGridController {
Function(WebviewController controller)? addWebControllerBlack;
Function? addWebBlack;
Function? addAllWebBlack;
addWebController(WebviewController controller) {
addMainController(WebviewController controller) {
if (addWebControllerBlack != null) {
addWebControllerBlack!(controller);
}
}
addWeb() {
if (addWebBlack != null) {
addWebBlack!();
}
}
addAllWeb() {
if (addAllWebBlack != null) {
addAllWebBlack!();
}
}
}
class WebGridWidget extends StatefulWidget {
@ -24,41 +37,56 @@ class WebGridWidget extends StatefulWidget {
}
class _WebGridWidgetState extends State<WebGridWidget> {
List<WebviewController> controllers = [];
bool initDone = false;
@override
void initState() {
super.initState();
controllerInit();
widget.controller.addWebBlack = () {
addController();
};
widget.controller.addAllWebBlack = () {
addAllController();
};
}
///
Future controllerInit() async {
//
addController() async {
if (controllers.length >= 10) return;
for (var i = 0; i< 10 ; i++) {
var controller = WebviewController();
await controller.initialize();
controller.loadUrl('https://www.df6831.com/');
// controller.executeScript(WindowsJs.zoom(35));
// controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(35));
controllers.add(controller);
SynchronizationWebTool.getInstance().setChildController(controllers);
setState(() {});
}
SynchronizationWebTool.getInstance().setChildController(controllers);
// 10
addAllController() async {
final num = 10 - controllers.length;
if (num < 1) return;
setState(() {
initDone = true;
});
for (int i = 0; i < num; i++) {
var controller = WebviewController();
await controller.initialize();
controller.loadUrl('https://www.df6831.com/');
controllers.add(controller);
}
SynchronizationWebTool.getInstance().setChildController(controllers);
setState(() {});
}
@override
Widget build(BuildContext context) {
return GridView.builder(
return Stack(
children: [
GridView.builder(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 5, //
crossAxisSpacing: 8.0, //
@ -73,7 +101,6 @@ class _WebGridWidgetState extends State<WebGridWidget> {
overlayColor: MaterialStateProperty.resolveWith(
(states) => Colors.transparent)),
onPressed: () {
var controller = controllers[index];
// controller.executeScript(WindowsJs.zoom(100));
@ -86,26 +113,59 @@ class _WebGridWidgetState extends State<WebGridWidget> {
Navigator.of(context).push(PageRouteBuilder(
opaque: false, //
pageBuilder: (BuildContext context, _, __) => ShowWebWidget(controller: controller,main: index == 0,),
pageBuilder: (BuildContext context, _, __) =>
ShowWebWidget(
controller: controller,
main: index == 0,
allLoadUrl: (String url) {
controllers.forEach((controller) {
controller.loadUrl(url);
});
},
),
));
},
child: Container(),
),
Container(
alignment: Alignment.topRight,
child: TextButton(
style: TextButton.styleFrom(padding: const EdgeInsets.all(0)),
onPressed: () {
controllers.removeAt(index);
SynchronizationWebTool.getInstance()
.setChildController(controllers);
setState(() {});
},
child: Container(
width: 50,
height: 50,
color: Colors.blue[100],
alignment: Alignment.center,
child: const Icon(Icons.clear)),
),
)
],
);
},
itemCount: controllers.length, // 20
)
],
);
}
}
class ShowWebWidget extends StatefulWidget {
const ShowWebWidget({super.key, required this.controller, this.main = false});
const ShowWebWidget(
{super.key,
required this.controller,
this.main = false,
required this.allLoadUrl});
final WebviewController controller;
final Function(String url) allLoadUrl;
final bool main;
@override
@ -113,9 +173,9 @@ class ShowWebWidget extends StatefulWidget {
}
class _ShowWebWidgetState extends State<ShowWebWidget> {
///
TextEditingController urlController = TextEditingController();
/// ip
TextEditingController ipController = TextEditingController();

View File

@ -52,7 +52,7 @@ class _WindowsPageState extends State<WindowsPage> {
mainController.loadUrl('http://www.df6831.com/');
gridController.addWebController(mainController);
gridController.addMainController(mainController);
setState(() {
initDone = true;
@ -61,13 +61,35 @@ class _WindowsPageState extends State<WindowsPage> {
@override
Widget build(BuildContext context) {
if (initDone == false) return Container();
return Scaffold(
body: WebGridWidget(
controller: gridController,
),
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
onPressed: (){
gridController.addWeb();
},
heroTag: 1,
tooltip: '添加网页',
child: const Icon(Icons.add),
),
const SizedBox(width: 20,)
,
FloatingActionButton(
onPressed: (){
gridController.addAllWeb();
},
heroTag: 2,
tooltip: '添加10个网页',
child: const Row(
children: [Icon(Icons.add),Text('10')],
),
),
],
),
);
}