Compare commits

..

No commits in common. "master" and "受控" have entirely different histories.

3 changed files with 85 additions and 194 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,27 +4,14 @@ 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? addWebBlack;
Function? addAllWebBlack;
addMainController(WebviewController controller) { Function(WebviewController controller)? addWebControllerBlack;
addWebController(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 {
@ -37,135 +24,88 @@ 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();
widget.controller.addWebBlack = () { controllerInit();
addController();
};
widget.controller.addAllWebBlack = () {
addAllController();
};
} }
// ///
addController() async { Future controllerInit() async {
if (controllers.length >= 10) return;
var controller = WebviewController(); for (var i = 0; i< 10 ; i++) {
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 Stack( return GridView.builder(
children: [ gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
GridView.builder( crossAxisCount: 5, //
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisSpacing: 8.0, //
crossAxisCount: 5, // mainAxisSpacing: 8.0, //
crossAxisSpacing: 8.0, // childAspectRatio: 0.9),
mainAxisSpacing: 8.0, // itemBuilder: (BuildContext context, int index) {
childAspectRatio: 0.9), return Stack(
itemBuilder: (BuildContext context, int index) { children: [
return Stack( Webview(controllers[index]),
children: [ TextButton(
Webview(controllers[index]), style: ButtonStyle(
TextButton( overlayColor: MaterialStateProperty.resolveWith(
style: ButtonStyle( (states) => Colors.transparent)),
overlayColor: MaterialStateProperty.resolveWith( onPressed: () {
(states) => Colors.transparent)),
onPressed: () {
var controller = controllers[index];
// controller.executeScript(WindowsJs.zoom(100));
// showAnimationDialog( var controller = controllers[index];
// context: context, // controller.executeScript(WindowsJs.zoom(100));
// // barrierDismissible: false,
// child: ShowWebWidget(controller: controller,));
// Navigator.push(context, MaterialPageRoute(builder: (context)=> ShowWebWidget(controller: controller,) )); // showAnimationDialog(
// context: context,
// // barrierDismissible: false,
// child: ShowWebWidget(controller: controller,));
Navigator.of(context).push(PageRouteBuilder( // Navigator.push(context, MaterialPageRoute(builder: (context)=> ShowWebWidget(controller: controller,) ));
opaque: false, //
pageBuilder: (BuildContext context, _, __) => Navigator.of(context).push(PageRouteBuilder(
ShowWebWidget( opaque: false, //
controller: controller, pageBuilder: (BuildContext context, _, __) => ShowWebWidget(controller: controller,main: index == 0,),
main: index == 0, ));
allLoadUrl: (String url) {
controllers.forEach((controller) { },
controller.loadUrl(url); child: Container(),
}); )
}, ],
), );
)); },
}, 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( const ShowWebWidget({super.key, required this.controller, this.main = false});
{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
@ -173,11 +113,11 @@ class ShowWebWidget extends StatefulWidget {
} }
class _ShowWebWidgetState extends State<ShowWebWidget> { class _ShowWebWidgetState extends State<ShowWebWidget> {
///
TextEditingController urlController = TextEditingController();
/// ip ///
TextEditingController ipController = TextEditingController(); TextEditingController urlController = TextEditingController();
/// ip
TextEditingController ipController = TextEditingController();
@override @override
void dispose() { void dispose() {
@ -204,7 +144,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: [
@ -220,61 +160,34 @@ class _ShowWebWidgetState extends State<ShowWebWidget> {
} }
/// ///
input() { input(){
return Row( return Row(
children: [ children: [
SizedBox( SizedBox(width: 400, child: TextField(style: const TextStyle(fontSize: 14),controller: urlController,)),
width: 400, TextButton(onPressed: (){
child: TextField( String url = urlController.text;
style: const TextStyle(fontSize: 14), // if (!url.startsWith("https://") ) {
controller: urlController, // url = "https://$url";
)), // }
TextButton( widget.controller.loadUrl(url);
onPressed: () { }, child: const Text('跳转',style: TextStyle(fontSize: 14),))
String url = urlController.text;
// if (!url.startsWith("https://") ) {
// url = "https://$url";
// }
widget.controller.loadUrl(url);
},
child: const Text(
'跳转',
style: TextStyle(fontSize: 14),
)),
TextButton(
onPressed: () {
String url = urlController.text;
widget.allLoadUrl(url);
},
child: const Text(
'全部跳转',
style: TextStyle(fontSize: 14),
)),
], ],
); );
} }
ipSet() { ipSet(){
ipController.text = SocketUtils.getInstance().url; ipController.text = SocketUtils.getInstance().url;
return Row( return Row(
children: [ children: [
SizedBox( SizedBox(width: 100, child: TextField(style: const TextStyle(fontSize: 14),controller: ipController,)),
width: 100, TextButton(onPressed: (){
child: TextField( SocketUtils.getInstance().url = ipController.text;
style: const TextStyle(fontSize: 14), SocketUtils.getInstance().connect();
controller: ipController, }, child: const Text('保存服务器ip',style: TextStyle(fontSize: 14),))
)),
TextButton(
onPressed: () {
SocketUtils.getInstance().url = ipController.text;
SocketUtils.getInstance().connect();
},
child: const Text(
'保存服务器ip',
style: TextStyle(fontSize: 14),
))
], ],
); );
} }
} }

View File

@ -52,7 +52,7 @@ class _WindowsPageState extends State<WindowsPage> {
mainController.loadUrl('http://www.df6831.com/'); mainController.loadUrl('http://www.df6831.com/');
gridController.addMainController(mainController); gridController.addWebController(mainController);
setState(() { setState(() {
initDone = true; initDone = true;
@ -61,35 +61,13 @@ 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')],
),
),
],
),
); );
} }