当前位置: 首页 > news >正文

专业北京网站建设wordpress去掉google

专业北京网站建设,wordpress去掉google,网站图片移动怎么做,甘肃省引洮工程建设管理局官方网站目前越来越多的人用Flutter来做桌面程序的开发#xff0c;很多应用场景在Flutter开发端还不是很成熟#xff0c;有些场景目前还没有很好的插件来支持#xff0c;所以落地Flutter桌面版还是要慎重。 下面来说一下近期我遇到的一个问题#xff0c;之前遇到一个需要双屏展示的…目前越来越多的人用Flutter来做桌面程序的开发很多应用场景在Flutter开发端还不是很成熟有些场景目前还没有很好的插件来支持所以落地Flutter桌面版还是要慎重。 下面来说一下近期我遇到的一个问题之前遇到一个需要双屏展示的应用场景而且双屏还要有交互下面就介绍这种双屏的功能怎么实现。 首先介绍需要用到的插件 desktop_multi_window desktop_multi_window 用于实现一个应用可以打开多个窗口的功能主要适配macOS、Windows以及Linux系统。 window_size window_size 是google官方提供的一个插件用于获取系统所有屏幕的信息其中最重要的就是可以获取屏幕的位置这个功能的作用是在使用desktop_multi_window打开一个新窗口时通过window_size获取副屏的坐标位置然后直接将新窗口定位到副屏上。 下面贴代码 import dart:convert; import dart:ui;import package:collection/collection.dart; import package:desktop_lifecycle/desktop_lifecycle.dart; import package:desktop_multi_window/desktop_multi_window.dart; import package:flutter/material.dart; import package:flutter/rendering.dart; import package:flutter_multi_window_example/event_widget.dart; import package:device_info_plus/device_info_plus.dart; import package:window_size/window_size.dart;void main(ListString args) {if (args.firstOrNull multi_window) {final windowId int.parse(args[1]);final argument args[2].isEmpty? const {}: jsonDecode(args[2]) as MapString, dynamic;runApp(_ExampleSubWindow(windowController: WindowController.fromWindowId(windowId),args: argument,));} else {runApp(const _ExampleMainWindow());} }class _ExampleMainWindow extends StatefulWidget {const _ExampleMainWindow({Key? key}) : super(key: key);overrideState_ExampleMainWindow createState() _ExampleMainWindowState(); }class _ExampleMainWindowState extends State_ExampleMainWindow {overridevoid initState() {// TODO: implement initStatesuper.initState();}overrideWidget build(BuildContext context) {return const MaterialApp(home: App(),);} }class App extends StatefulWidget{const App({Key? key}) : super(key: key);overrideStateStatefulWidget createState() {return AppState();}} class AppState extends StateApp{ListScreen screenList[];overridevoid initState() {// TODO: implement initStatesuper.initState();initDevice();}void initDevice()async{screenListawait getScreenList();screenList.forEach((element) {print(element.frame);});}overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text(Plugin example app),),body: Column(children: [TextButton(onPressed: () async {final window await DesktopMultiWindow.createWindow(jsonEncode({args1: Sub window,args2: 100,args3: true,business: business_test,}));window..setFrame( screenList[screenList.length-1].frame)..setTitle(Another window)..show();},child: const Text(Create a new World!),),TextButton(child: const Text(Send event to all sub windows),onPressed: () async {final subWindowIds await DesktopMultiWindow.getAllSubWindowIds();for (final windowId in subWindowIds) {DesktopMultiWindow.invokeMethod(windowId,broadcast,Broadcast from main window,);}},),Expanded(child: EventWidget(controller: WindowController.fromWindowId(0)),)],),);}}class _ExampleSubWindow extends StatelessWidget {const _ExampleSubWindow({Key? key,required this.windowController,required this.args,}) : super(key: key);final WindowController windowController;final Map? args;overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: const Text(Plugin example app),),body: Column(children: [if (args ! null)Text(Arguments: ${args.toString()},style: const TextStyle(fontSize: 20),),ValueListenableBuilderbool(valueListenable: DesktopLifecycle.instance.isActive,builder: (context, active, child) {if (active) {return const Text(Window Active);} else {return const Text(Window Inactive);}},),TextButton(onPressed: () async {windowController.close();},child: const Text(Close this window),),Expanded(child: EventWidget(controller: windowController)),],),),);} } event_widget.dart import package:desktop_multi_window/desktop_multi_window.dart; import package:flutter/material.dart; import package:flutter/services.dart;class EventWidget extends StatefulWidget {const EventWidget({Key? key, required this.controller}) : super(key: key);final WindowController controller;overrideStateEventWidget createState() _EventWidgetState(); }class MessageItem {const MessageItem({this.content, required this.from, required this.method});final int from;final dynamic content;final String method;overrideString toString() {return $method($from): $content;}overrideint get hashCode Object.hash(from, content, method);overridebool operator (Object other) {if (identical(this, other)) {return true;}if (other.runtimeType ! runtimeType) {return false;}final MessageItem typedOther other as MessageItem;return typedOther.from from typedOther.content content;} }class _EventWidgetState extends StateEventWidget {final messages MessageItem[];final textInputController TextEditingController();final windowInputController TextEditingController();overridevoid initState() {super.initState();DesktopMultiWindow.setMethodHandler(_handleMethodCallback);}overridedispose() {DesktopMultiWindow.setMethodHandler(null);super.dispose();}Futuredynamic _handleMethodCallback(MethodCall call, int fromWindowId) async {if (call.arguments.toString() ping) {return pong;}setState(() {messages.insert(0,MessageItem(from: fromWindowId,method: call.method,content: call.arguments,),);});}overrideWidget build(BuildContext context) {void submit() async {final text textInputController.text;if (text.isEmpty) {return;}final windowId int.tryParse(windowInputController.text);textInputController.clear();final result await DesktopMultiWindow.invokeMethod(windowId!, onSend, text);debugPrint(onSend result: $result);}return Column(children: [Expanded(child: ListView.builder(itemCount: messages.length,reverse: true,itemBuilder: (context, index) _MessageItemWidget(item: messages[index]),),),Row(children: [SizedBox(width: 100,child: TextField(controller: windowInputController,decoration: const InputDecoration(labelText: Window ID,),inputFormatters: [FilteringTextInputFormatter.digitsOnly],),),Expanded(child: TextField(controller: textInputController,decoration: const InputDecoration(hintText: Enter message,),onSubmitted: (text) submit(),),),IconButton(icon: const Icon(Icons.send),onPressed: submit,),],),],);} }class _MessageItemWidget extends StatelessWidget {const _MessageItemWidget({Key? key, required this.item}) : super(key: key);final MessageItem item;overrideWidget build(BuildContext context) {return ListTile(title: Text(${item.method}(${item.from})),subtitle: Text(item.content.toString()),);} } 重点代码位置 void main(ListString args) {if (args.firstOrNull multi_window) {final windowId int.parse(args[1]);final argument args[2].isEmpty? const {}: jsonDecode(args[2]) as MapString, dynamic;runApp(_ExampleSubWindow(windowController: WindowController.fromWindowId(windowId),args: argument,));} else {runApp(const _ExampleMainWindow());} }这块是判断显示副屏还是主屏副屏创建也会走main函数。 void initDevice()async{screenListawait getScreenList();screenList.forEach((element) {print(element.frame);});} 这个是用window_size 插件中的getScreenList(),获取系统的所有屏幕信息。 TextButton(onPressed: () async {final window await DesktopMultiWindow.createWindow(jsonEncode({args1: Sub window,args2: 100,args3: true,business: business_test,}));window..setFrame( screenList[screenList.length-1].frame)..setTitle(Another window)..show();},child: const Text(Create a new World!),),这块是开启新窗口的代码其中setFrame( screenList[screenList.length-1].frame)是将副屏的frame给到窗口这样创建出来的窗口就是直接在副屏的位置同时是全屏的状态。
http://www.ho-use.cn/article/10822401.html

相关文章:

  • 广州花都网站开发wordpress七牛视频教程
  • 好的h5制作网站模板下载茂南网站建设公司
  • 八旬老太做直播 什么网站品牌策划是做什么的
  • 免费做网站模板在哪里做福田深圳网站建设
  • 福建网站开发wordpress英文版切换中文
  • 小说网站开发l河北省住房城乡建设厅网站首页
  • 荥阳市建设局 网站机械设备东莞网站建设
  • 做图表网站河源做网站优化
  • 文登建设局网站建筑考试培训网
  • 网站开发国外研究状况做设计比较好的网站推荐
  • 有网络网站打不开怎么回事wordpress菜单跳转页面跳转
  • 全球最好的黄页网站app 网站开发
  • 建筑网站设计大全网络营销网站源码
  • 线上海报设计网站番禺区保安服务公司
  • 大连网站制作哪家最好学生个人网页设计主题
  • 网站到期续费通知江门论坛建站模板
  • 北京建设工程质量总站网站如何做贷款网站推广
  • 黑群晖建设个人网站深圳2024新冠最新情况
  • php做数据网站网业端云服务
  • 做汽车团购网站html做的网站图片横着摆放
  • 基于wordpress个人博客网站论文做网站视频用哪个视频编辑软件
  • 上海嘉定网站市场营销八大营销模式
  • 汕头网站专业制作外贸网站是什么意思
  • 义乌网站建设优化排名开个网站卖机器怎么做
  • 网站改版提交技术支持 沧州网站建设
  • 男女做那个的网站是什么找做玻璃的网站
  • 东莞市长安网站建设公司jsp做门户网站
  • 简单的app开发制作南昌网站seo
  • 演出票务网站建设福建住房城乡建设部网站
  • wordpress个人博客网站游戏开发软件工具