How to use Skia / CanvasKit in Flutter Web?

自闭症网瘾萝莉.ら 提交于 2021-02-18 05:33:32

问题


I know that Flutter supports using Skia instead of DomCanvas in Flutter Web using WASM CanvasKit, i.e. "Skia + WebAssembly".

I have heard that this provides significant performance improvements, however, I do not know how to enable it.


回答1:


You can enable CanvasKit / Skia in Flutter Web by supplying a Dart environment constant:

flutter run -d chrome --dart-define=FLUTTER_WEB_USE_SKIA=true

The flutter tools now have a good shortcut for it:

flutter run -d chrome --web-renderer canvaskit

The --dart-define=FLUTTER_WEB_USE_SKIA=true parameter will set the constant to use Skia. You will also need to supply it to flutter build web:

flutter build web --web-renderer canvaskit

Learn more about web renderers in Flutter.

Options

There are three options for --web-renderer:

  • auto (default) - automatically chooses which renderer to use. This option chooses the HTML renderer when the app is running in a mobile browser, and CanvasKit renderer when the app is running in a desktop browser.
  • html - always use the HTML renderer.
  • canvaskit - always use the CanvasKit renderer.

See Choosing which option to use to decide about which option you should be using.

Alternatives

What I described above can be found in the flutter/engine/initialization.dart file. Make sure to check the master branch to see if the information is still up-to-date.

In there, you can see other options of configuring Flutter Web to use CanvasKit:

FLUTTER_WEB_AUTO_DETECT

--dart-define=FLUTTER_WEB_AUTO_DETECT=true

This can now also be done using:

--web-renderer auto

Supplying this constant will enable auto detect for the renderer detection:

  • CanvasKit will be used on desktop devices.
  • HTML will be used on mobile devices.

This only holds true if you do not specify window.flutterWebRenderer.

window.flutterWebRenderer

Iff you enable auto detect (see above), you can specify the renderer in your JavaScript code / HTML file dynamically:

  ...

  <script>
    window.flutterWebRenderer = 'canvaskit';
  </script>

  <script src="main.dart.js" type="application/javascript"></script>
  ...

Summary

After discovering the auto detect PR, I really appreciate the following summary of the current situation in there:

If auto detect is enabled (set by environment variable FLUTTER_WEB_AUTO_DETECT), developers will be allowed to set window.flutterWebRender to either canvaskit or html to select the rendering backend. If window.flutterWebRender is not set, flutter engine will use canvaskit for desktop device while using html for mobile device. If window.flutterWebRender is set to an invalid value (not canvaskit nor html), it will default to html.

If auto detect is disabled, it will check the value of environment variable FLUTTER_WEB_USE_SKIA. If true, use canvaksit. Otherwise, use html.




回答2:


As described in Web renderers documentation these are the valid commands to build/run web in canvaskit mode:

flutter build web --web-renderer canvaskit
flutter run -d chrome --web-renderer canvaskit

The --web-renderer command line option takes one of three values, auto, html, or canvaskit.

  • auto (default) - automatically chooses which renderer to use. This option chooses the HTML renderer when the app is running in a mobile browser, and CanvasKit renderer when the app is running in a desktop browser.
  • html - always use the HTML renderer.
  • canvaskit - always use the CanvasKit renderer.



回答3:


To run locally

with skia

flutter run -d Chrome --dart-define=FLUTTER_WEB_USE_SKIA=true --release

with canvas kit

flutter run -d Chrome --dart-define=FLUTTER_WEB_CANVASKIT_URL=true --release

flutter run -d Chrome --dart-define=FLUTTER_WEB_CANVASKIT_FORCE_CPU_ONLY=true --release



来源:https://stackoverflow.com/questions/64583461/how-to-use-skia-canvaskit-in-flutter-web

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!