快讯,Flutter PC 多窗口新进展,已在 Ubuntu/Canonical 展示
相信 Flutter 开发者对于 Flutter PC 多窗口的支持一直是「望眼欲穿」,而根据 #142845 相关内容展示, 在上月 27 号的 Ubuntu 峰会,Flutter 展示了多窗口相关进展。

事实上 Ubuntu 和 Flutter 的进一步合作关系应该是在 2021 年就开始了,当时在谈到 Canonical 对 Flutter 的贡献时,Ken 就指出过,Ubuntu 团队将努力在所有桌面平台上为 Flutter 提供完整的多窗口支持。

虽然是在 Ubuntu/Canonical 上发布,但是多窗口支持肯定是会把它带到所有平台的,只是需要从某个平台开始进行:

目前对应的支持草稿和 API 方案已经公布,例如:
- 需要一个类似
window.dart的 library 来让开发者可以通过它创建、更新和销毁窗口,提供了与窗口系统交互的全局方法,窗口小部件树必须包装在MultiWindowApp窗口小部件等。 - 需要一个
flutter/windowing的 MethodChannel API,位于 window.dart 和 embedder 之间协调交互 - 为多窗口运行环境增加对应的 runner 等
///举个例子:
void main() {runWidget(MultiWindowApp(initialWindows[j][k]: <Future<Window> Function(BuildContext)>[(BuildContext context) => createWindow(context: context,size: const Size(640, 480),builder: (BuildContext context) {return const MyApp();})]));
}

在大会上展示的多窗口支持 Window、Dialog、Satellites、Popup 等形式,还支持自定义定位器与约束调整的相关能力:

例如,最常规的多窗口场景,支持子窗口打开新窗口,窗口在任务管理中心可以看到:


支持多种 Dialogs 对话框模式,例如模态对话框、非模态对话框、作为对话框父级的对话框等:


支持 Satellites ,可以使用预设进行放置,显示随父级移动,在顶级窗口不活动时显示自动隐藏和显示 Satellites 父级对话框等:

支持 Popup 窗口,可以自定义定位器,可以锚定到视图、锚定到窗口等:

支持约束调整,可以滑动、翻转、调整大小:

根据设计文档显示,这些在 API 里也有类似支持,例如创建窗口的方法会返回与窗口原型相对应的特定子类,如: TopLevel、PopupWindow、DialogWindow、SatelliteWindow 和 TipWindow 等。
而在支持多窗口正常运行,就需要更改支持多窗口的每个平台的 runner 代码,对于单窗口应用,默认的 runner 代码将保持不变,但用户在运行 flutter create * 时应该能够选择加入多窗口 runner 。
同时,来自 Material API 的许多核心 Widget 和方法需要迁移以支持使用新的多窗口功能,例如是:
- showDialog
- showMenu
- MenuAnchor
- ····
可以看到,本次分享的 Flutter 多窗口支持从设计到例子已经比较完善了,虽然还不支持什么时候可以正式看到它,毕竟从实现上看它涉及的底层修改并不少,但是总体来看落地的希望还是很大的。
PS:除了现在可以在鸿蒙 next 手机端看到 Flutter 之后,也许你也有机会在以后的鸿蒙 PC 看到 Flutter ,目前 Flutter 在鸿蒙 next 支持上也有一些 App 上架了,例如在 ArkUI Inspector 下可以看到微信的朋友圈是 Flutter 实现:
更多可见:
-
https://docs.google.com/document/u/0/d/1eQG-IS7r4_S9_h50MY_hSGwUVtgSTRSLzu7MLzPNd2Y/mobilebasic?tab=t.0&_immersive_translate_auto_translate=1
-
https://github.com/flutter/flutter/pull/157525
-
https://github.com/flutter/flutter/issues/142845#issuecomment-2435738214
相关文章:
快讯,Flutter PC 多窗口新进展,已在 Ubuntu/Canonical 展示
相信 Flutter 开发者对于 Flutter PC 多窗口的支持一直是「望眼欲穿」,而根据 #142845 相关内容展示, 在上月 27 号的 Ubuntu 峰会,Flutter 展示了多窗口相关进展。 事实上 Ubuntu 和 Flutter 的进一步合作关系应该是在 2021 年就开始了&…...
BigDecimal 详解
阿里巴巴 Java 开发手册》中提到:“为了避免精度丢失,可以使用 BigDecimal 来进行浮点数的运算”。 浮点数的运算竟然还会有精度丢失的风险吗?确实会! 示例代码: float a 2.0f - 1.9f; float b 1.8f - 1.7f; Syst…...
ESP-HaloPanel:用 ESP32-C2 打造超低成本智能家居面板
项目简介 在生活品质日益提升的今天,智能家居系统已经走进了千家万户,并逐渐成为现代生活的一部份。与此同时,一款设计精致、体积轻盈、操作简便的全屋智能家居控制面板,已经成为众多家庭的新宠。这种高效、直观的智能化的解决方…...
CSS3新增盒子属性(三)
1、CSS3新增盒子属性 1.1 box-sizing 设置盒子的大小。 content-box:设置内容区的大小;border-box:设置盒子的总大小。 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><t…...
Manus在虚拟现实仿真模拟中的应用案例分享
Manus虚拟现实手套作为一种高精度的人机交互设备,在仿真模拟领域展现出了巨大的应用潜力。通过提供实时、准确的手指动作捕捉数据,Manus手套为多个行业带来了前所未有的仿真体验,推动了技术发展和应用创新。 技术特点 1. 高精度手指跟踪 Ma…...
大数据-201 数据挖掘 机器学习理论 - 决策树 局部最优 剪枝 分裂 二叉分裂
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
Scala 的trait
在Scala中,trait是一种特殊概念。trait可以作为接口,同时也可以定义抽象方法。类使用extends继承trait,在Scala中,无论继承类还是继承trait都用extends关键字。在Scala中, 类继承trait后必须实现其中的抽象方法&#x…...
vue3官方示例-简单的 markdown 编辑器。
官方示例不能直接粘贴使用,故自己补了些代码。方便初学者学习,节省时间,提高学习效率。 1、html代码: <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><meta nam…...
Linux标准I/O库汇总整理
Linux标准I/O库(Standard I/O Library)是C标准库的一部分,提供了一系列用于文件输入输出的高级接口。这些接口通常比低级别的系统调用更易于使用,但也可能带来额外的性能开销。下面是Linux标准I/O库的汇总整理,包括常见…...
BGP路由优选+EVPN
BGP 的路由优选规则是一套多步决策链,用来确定在多个可行路由中选择最优的路由。BGP 是一种路径向量协议,通过这些优选规则,网络管理员可以控制数据流量的流向,确保网络的稳定性和效率。下面以一个实例来详细说明 BGP 的优选规则及…...
牛客练习赛131(未补)
A-小H学语文 题意:木板数量为m,想让mmh(min)最大,找出这几块木板 分析:让木板从大到小排序,找到最大的体积,将之前的木板按序列输出 代码: #include<bits/stdc.h> using n…...
功能更新丨AI黑科技助燃VR全景新势能
随着VR全景市场需求不断扩大, 为更好地赋能合作商业务发展, 酷雷曼积极推进产品技术迭代, 融合VR虚拟现实和AI人工智能, 重磅推出6大AI黑科技, 让VR全景内容更丰富、创作更加高效! 新功能怎么用&#…...
JavaCV学习第一课
1、 JavaCV [1] 是一款基于JavaCPP [2]调用方式(JNI的一层封装),由多种开源计算机视觉库组成的包装库,封装了包含FFmpeg、OpenCV、tensorflow、caffe、tesseract、libdc1394、OpenKinect、videoInput和ARToolKitPlus等在内的计算…...
Java第二阶段---16字符串---第一节 String
1.特性介绍 String 类位于 java.lang 包中,无需引入,直接使用即可。 String 类是由 final 修饰的,表示String 类是一个最终类,不能够被继承。 String 类构建的对象不可再被更改 示例 package com.cyx.string;public class Ex…...
<十六>Ceph mon 运维
Ceph 集群有故障了,你执行的第一个运维命令是什么? 我猜测是ceph -s 。无论执行的第一个命令是什么,都肯定是先检查Mon。 在开始之前我们有必要介绍下Paxos协议,毕竟Mon就是靠它来实现数据唯一性。 一: Paxos 协议 1…...
【网络安全初识】——互联网发展史
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络安全】 本专栏旨在分享学习网络安全的一些学习笔记,欢迎大家在评论区交流讨论💌 ipconfig:显示当…...
Windows和Linux内存共享机制
Windows和Linux内存共享机制 引言1.Windows写操作读操作 2.Linux写操作读操作 3.Shell使用 tmux 运行 write 和 read说明 引言 在嵌入式开发领域,内存共享机制作为不同操作系统间实现高效数据交换的重要手段,尤其在对实时性和可靠性要求极高的环境中更为…...
windows@命令行中获取环境变量取值不展开取值(原值)
文章目录 命令行中获取环境变量取值获取不展开的值具体实现注解 封装为函数版本1版本2 命令行中获取环境变量取值 这里主要讨论获取未展开的值本来获取未展开的值应该作为默认选项,至少有合适的api方便直接调用,但是不知道微软怎么想的,让这个任务变得不直接 获取不展开的值 …...
如何找到多平台内容爆款进行批量复刻?
为了进一步扩大品牌社媒影响力,在消费者做决策的时候,能够第一时间出现在首选位置。持续在抖音、小红书、b站、公众号等各大社媒平台,产生连续的、正向的高质量品牌曝光,是非常重要的。如何进行这种多平台品牌影响力的提升呢&…...
【UML】- 用例图(结合银行案例解释其中的奥义)
目录 一、相关介绍 作用: 组成: 关系 二、使用具体银行案例解释各组成部分的含义 1、系统 2、参与者 3、用例 4、关联关系 5、扩展关系 6、泛化(继承)关系 三、成品 一、相关介绍 作用: 用例图可以描述一个…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
