Flutter for Web

简介

Flutter 目前支持MacOS, Windows, Liunx, Android,iOS和Web等平台,,其他平台都是操作系统,只有Web是运行在浏览器

Web应用的特殊性

因为Web应用运行在浏览器上,而浏览器是运行在操作系统上, 因此Web无法直接调用操作系统API, Web应用的能力取决于它的宿主-浏览器是否暴露了相关的操作系统API。

浏览器出于安全的考虑,会提供一个沙箱环境-开发一些安全,可控的系统能力, 同时限制一部分敏感的操作,具体表现

  • 浏览器允许Web应用访问网络, 但有严格的同源策略限制

同源策略: 浏览器出于安全考虑对Web应用访问网络的一套限制策略,同源表示一个网页中JavaScript发起网络请求的地址和当前网页地址中协议,域名,端口全部相同,如果有一个不同,则为非同源,如果不进行特殊处理,浏览器会禁止非同源请求

  • 浏览器允许JavaScript读取用户手动选择本地文件(文件上传),但不允许JavaScript主动访问本地文件系统, 同时在任何情况下,都不允许JavaScript直接往本地文件系统写文件,因此dart:io包在Web应用中不能用的

  • 浏览器对Web应用访问系统硬件权限有自身策略,比如访问Wifi,GPS,摄像头等

Web渲染器

Flutter提供了两种不同的渲染器来运行和构建Web应用,分别为HTML渲染器CanvasKit渲染器

HTML渲染器

由于浏览器有一套自身的布局标准(HTML+CSS),Flutter在生成Web 应用的时可以编译为符合浏览器标准的文件,包括使用HTML,CSS,Canvas和SVG元素来渲染

  • 优点: 应用体积较小

  • 缺点: 大多数UI并不是Flutter引擎绘制的,所以可能会存在跨浏览器UI不一致的情况

CanvasKit渲染器

WebAssembly是一种标准的,可移植的二进制文件格式规范,文件扩展名为.wasm`

其他语言(C/C++,Rust)按照WebAssembly规范编译的应用,可以在浏览器运行

Flutter支持将引擎编译成WebAssembly格式,并使用WebGL渲染,这种渲染方式称为CanvasKit渲染器

  • 优点: 跨端UI绘制的一致性,有更好的性能,降低不同浏览器渲染效果不一致的风险

  • 缺点: 增大应用的体积大小(2M)

在浏览器运行

命令行参数 --web-renderer可选参数为auto,html,canvaskit

  • auto: 自动选择渲染器,移动端浏览器使用HTML,桌面端浏览器使用CanvasKit

  • html: 强制使用html渲染器

  • canvaskit: 强制使用CanvasKit渲染器

css 复制代码
flutter run -d chrome --web-renderer html

flutter build web --web-renderer canvaskit

Flutter Web使用场景

Web开发已经有完整强大的开发和生态体系,Flutter Web并不适用Web开发的所有场景, 主要关注如下场景

  • 渐进式Web应用(Progressive Web App, PWA)

  • 单页应用(Single Page App, SPA),一个应用就一个HTML文件,只需进行一次加载,后续与服务端互传数据

  • 将现有Flutter应用拓展到Web,两个平台共享代码

Flutter 对于富文本和瀑布流类型的Web页面并不适合,例如博客

PWA

渐进式 Web 应用(Progressive Web App,PWA)使用 web 平台技术构建的应用程序,但它提供的用户体验就像一个特定平台的应用程序。

可以安装在设备上,可以离线和在后台运行,并且可以与设备和其他已安装的应用程序集成。

相关推荐
四眼肥鱼6 小时前
flutter 利用flutter_libserialport 实现SQ800 串口通信
前端·flutter
火柴就是我1 天前
让我们实现一个更好看的内部阴影按钮
android·flutter
王晓枫1 天前
flutter接入三方库运行报错:Error running pod install
前端·flutter
shankss1 天前
Flutter 下拉刷新库 pull_to_refresh_plus 设计与实现分析
flutter
willow1 天前
html5基础整理
html
忆江南2 天前
iOS 深度解析
flutter·ios
明君879972 天前
Flutter 实现 AI 聊天页面 —— 记一次 Markdown 数学公式显示的踩坑之旅
前端·flutter
恋猫de小郭2 天前
移动端开发稳了?AI 目前还无法取代客户端开发,小红书的论文告诉你数据
前端·flutter·ai编程
MakeZero2 天前
Flutter那些事-交互式组件
flutter
shankss2 天前
pull_to_refresh_simple
flutter