• 四月
  • 14
  • load

你的业务场景是否适合使用flutter for web? 2022-04-14 21:35:26

本文以flutter 2.10,android studio4.1进行编写,可能未来版本会修复以下问题。

兼容性:

我相信这是所有开发者都会关心的问题,可惜这个兼容性非常糟糕。

在IE下,没有一个版本是兼容的,如果你的业务需要兼容IE,建议放弃。

安卓4兼容性极差,也不是渲染不出来,只是交互性极差,输入框几乎点不动,建议放弃。

支持两种渲染模式,一种是html渲染,另一种则是canvaskit渲染。前者兼容性会更好,后者性能和渲染力会更强,但需要加载更大的包。

如果你的业务要求兼容安卓6以下(不包括安卓6),那么这个html渲染,你必须适配,因为在安卓6以下不支持wasm,使用canvaskit渲染,会自动转为html渲染

web目录下的index.html使用的不是es5语法,这意味着在安卓6以下会报错,改成es5就行,修改后代码如下:

main.dart.js使用了Map对象,在安卓6以下原生不自带,可以自己实现一个出来并引入即可(上面代码可见,引入了fix.js),这是别人写的代码,我忘了在哪抄回来了。

发布前,搜索main.dart.js的【-apple-system, 】去掉,在ios15下,这东西会导致白屏

如果你的代码使用了ImageFilter.blur,最好移除,在html渲染下,会变成一坨黑块。

如果你使用了webview,小心跨域问题。

编译:

如果你使用的是canvaskit渲染,且业务面向于国内,那么建议切换镜像,否则加载速度会很慢:

flutter build web

--dart-define=FLUTTER_WEB_CANVASKIT_URL=https://unpkg.zhimg.com/canvaskit-wasm@0.28.1/bin/

html 渲染:

flutter build web --web-renderer html

使用体验:

和移动端一样,不管是canvaskit还是html,都是在canvas上渲染,与移动端不同的是,页面是一堆canvas。

 

canvaskit渲染并没有你想象中的优秀,字体加载问题,可能会产生大量的方块,html渲染则没有这个问题。

canvaskit渲染需要额外加载一个canvaskit.wasm,可以理解是一个运行库,大概6M左右。

编译一个hello world出来大概会占用1.2M左右。

 

个人感觉,flutter做网站,属于下位选择,需要满足3个条件:

1.只需兼容高版本浏览器

2.有app开发需求

3.没有SEO需求

 

原创文章,转载请注明出处

正在加载评论...

0 / 240

警告

确定