- 四月
- 14
- load
- 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需求
原创文章,转载请注明出处