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

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 /// js
setChildController(List<WebviewController> childControllers){ setChildController(List<WebviewController> childControllers){
for (var controller in childControllers) { // for (var controller in childControllers) {
controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs); // controller.addScriptToExecuteOnDocumentCreated(WindowsJs.clickEventJs);
// controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(90)); // // controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(90));
} // }
_childControllers = childControllers; _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'; import 'package:webview_windows/webview_windows.dart';
class WebGridController { class WebGridController {
Function(WebviewController controller)? addWebControllerBlack; Function(WebviewController controller)? addWebControllerBlack;
Function? addWebBlack;
Function? addAllWebBlack;
addWebController(WebviewController controller) { addMainController(WebviewController controller) {
if (addWebControllerBlack != null) { if (addWebControllerBlack != null) {
addWebControllerBlack!(controller); addWebControllerBlack!(controller);
} }
} }
addWeb() {
if (addWebBlack != null) {
addWebBlack!();
}
}
addAllWeb() {
if (addAllWebBlack != null) {
addAllWebBlack!();
}
}
} }
class WebGridWidget extends StatefulWidget { class WebGridWidget extends StatefulWidget {
@ -24,88 +37,135 @@ class WebGridWidget extends StatefulWidget {
} }
class _WebGridWidgetState extends State<WebGridWidget> { class _WebGridWidgetState extends State<WebGridWidget> {
List<WebviewController> controllers = []; List<WebviewController> controllers = [];
bool initDone = false; bool initDone = false;
@override @override
void initState() { void initState() {
super.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/');
controllers.add(controller);
SynchronizationWebTool.getInstance().setChildController(controllers);
setState(() {});
}
// 10
addAllController() async {
final num = 10 - controllers.length;
if (num < 1) return;
for (int i = 0; i < num; i++) {
var controller = WebviewController(); var controller = WebviewController();
await controller.initialize(); await controller.initialize();
controller.loadUrl('https://www.df6831.com/'); controller.loadUrl('https://www.df6831.com/');
// controller.executeScript(WindowsJs.zoom(35));
// controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(35));
controllers.add(controller); controllers.add(controller);
} }
SynchronizationWebTool.getInstance().setChildController(controllers); SynchronizationWebTool.getInstance().setChildController(controllers);
setState(() {});
setState(() {
initDone = true;
});
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GridView.builder( return Stack(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( children: [
crossAxisCount: 5, // GridView.builder(
crossAxisSpacing: 8.0, // gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
mainAxisSpacing: 8.0, // crossAxisCount: 5, //
childAspectRatio: 0.9), crossAxisSpacing: 8.0, //
itemBuilder: (BuildContext context, int index) { mainAxisSpacing: 8.0, //
return Stack( childAspectRatio: 0.9),
children: [ itemBuilder: (BuildContext context, int index) {
Webview(controllers[index]), return Stack(
TextButton( children: [
style: ButtonStyle( Webview(controllers[index]),
overlayColor: MaterialStateProperty.resolveWith( TextButton(
(states) => Colors.transparent)), style: ButtonStyle(
onPressed: () { overlayColor: MaterialStateProperty.resolveWith(
(states) => Colors.transparent)),
onPressed: () {
var controller = controllers[index];
// controller.executeScript(WindowsJs.zoom(100));
var controller = controllers[index]; // showAnimationDialog(
// controller.executeScript(WindowsJs.zoom(100)); // context: context,
// // barrierDismissible: false,
// child: ShowWebWidget(controller: controller,));
// showAnimationDialog( // Navigator.push(context, MaterialPageRoute(builder: (context)=> ShowWebWidget(controller: controller,) ));
// context: context,
// // barrierDismissible: false,
// child: ShowWebWidget(controller: controller,));
// Navigator.push(context, MaterialPageRoute(builder: (context)=> ShowWebWidget(controller: controller,) )); Navigator.of(context).push(PageRouteBuilder(
opaque: false, //
Navigator.of(context).push(PageRouteBuilder( pageBuilder: (BuildContext context, _, __) =>
opaque: false, // ShowWebWidget(
pageBuilder: (BuildContext context, _, __) => ShowWebWidget(controller: controller,main: index == 0,), controller: controller,
)); main: index == 0,
allLoadUrl: (String url) {
}, controllers.forEach((controller) {
child: Container(), controller.loadUrl(url);
) });
], },
); ),
}, ));
itemCount: controllers.length, // 20 },
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 { 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 WebviewController controller;
final Function(String url) allLoadUrl;
final bool main; final bool main;
@override @override
@ -113,11 +173,11 @@ class ShowWebWidget extends StatefulWidget {
} }
class _ShowWebWidgetState extends State<ShowWebWidget> { class _ShowWebWidgetState extends State<ShowWebWidget> {
///
TextEditingController urlController = TextEditingController();
/// /// ip
TextEditingController urlController = TextEditingController(); TextEditingController ipController = TextEditingController();
/// ip
TextEditingController ipController = TextEditingController();
@override @override
void dispose() { void dispose() {
@ -144,7 +204,7 @@ class _ShowWebWidgetState extends State<ShowWebWidget> {
); );
} }
Widget getTitleWidget(){ Widget getTitleWidget() {
if (widget.main == false) return input(); if (widget.main == false) return input();
return Row( return Row(
children: [ children: [

View File

@ -52,7 +52,7 @@ class _WindowsPageState extends State<WindowsPage> {
mainController.loadUrl('http://www.df6831.com/'); mainController.loadUrl('http://www.df6831.com/');
gridController.addWebController(mainController); gridController.addMainController(mainController);
setState(() { setState(() {
initDone = true; initDone = true;
@ -61,13 +61,35 @@ class _WindowsPageState extends State<WindowsPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (initDone == false) return Container();
return Scaffold( return Scaffold(
body: WebGridWidget( body: WebGridWidget(
controller: gridController, 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')],
),
),
],
),
); );
} }