Open5

iOS15でFlutter Webが正常に表示できない問題について

kboykboy

iOS15のSafariやChromeでFlutterWebで作られたサイトを見ると、正常に表示できない問題があります。弊社のCodeboy ( codeboy.jp )やFlutter大学のwebページもFlutterWebですので、正常に表示できなくて困っています。

一応、以下のツイートや記事の方法で応急処置はできるようです。

https://twitter.com/nukotsuka/status/1440945703761580034?s=20

https://xn4.us/host-https-rils-k.hatenablog.com/entry/2021/10/16/095411

設定 > Safari > 詳細 > Experimental Features > GPU Process: Canvas Rendering」がデフォルトでオンになってて、これをオフにしたら正常に表示されるようになった

ただ、端末の設定をいじる必要があるので、全てのユーザーにやってもらうのは現実的ではありません。
日々アプデがあるかもしれないので、わかったことはこのスクラップにまとめます。

kboykboy

試したこと

すでにissueには上がっていて、解決策と思われるコメントがありましたので、以下を試しました。

https://github.com/flutter/flutter/issues/89655#issuecomment-942813217

<!-- Apple WebGL 2.0 fix (https://github.com/flutter/flutter/issues/89655#issuecomment-919685843) -->
<!-- TODO: Remove when https://github.com/flutter/engine/pull/29038 is merged to stable -->
<script src="https://unpkg.com/platform@1.3.5/platform.js"></script>
<script type="text/javascript">
   let isSafari = /^((?!chrome|android).)*safari/i.test(platform.ua);
   if (isSafari) {
      HTMLCanvasElement.prototype.getContext = function (orig) {
         return function (type) {
            return type !== "webgl2" ? orig.apply(this, arguments) : null
         }
      }(HTMLCanvasElement.prototype.getContext)
   }
</script>

これをindex.htmlに追記するというものです。

CodeBoyでやってみましたが、直りませんでした😭

kboykboy

https://github.com/flutter/flutter/issues/92655#issuecomment-957036747

このコメントによると、

Flutter 2.0.0 ... OK
Flutter 2.2.0 ... OK
Flutter 2.2.3 ... OK
Flutter 2.5.0 ... NG(Broken layout)
Flutter 2.5.3 ... NG(Broken layout)

とのことで、Flutter2.5だと起きる問題っぽい。2.2.3に戻せばいけそう?

2.2.3に戻してみたが、だめだった。
現状はまだユーザーに設定を変えてもらうしかない。

kboykboy

macの場合の応急処置対応はここの「GPU Process: Canvas Rendering」の設定を変更