flutter:SFSafariViewController 不像原生 iOS 模式那样打开

flutter: SFSafariViewController doesn't open like a native iOS modal

为了在我的 Flutter 应用程序中使用 SFSafariViewController,我使用了这个包:flutter_inappwebview: ^3.3.0+3

虽然这有效,但在显示 SFSafariViewController 的动画中存在错误。

注意这个:

实际行为

预期行为

请注意在第二个 GIF 中,应用程序本身是如何被推回的,而在第一个 GIF 中,我们可以看到创建了一个半透明视图,而不是应用程序的本机推回动画。

这是我使用的代码:

final ChromeSafariBrowser browser =
              MyChromeSafariBrowser(MyInAppBrowser());
          await browser.open(
              url: 'https://google.com',
              options: ChromeSafariBrowserClassOptions(
                  ios: IOSSafariOptions(
                      barCollapsingEnabled: true,
                      presentationStyle: IOSUIModalPresentationStyle.POPOVER)));

这是 MyChromeSafariBrowser 和 MyInAppBrowser Gist class。

你能帮我解决这个问题吗?

您应该向 flutter_inappwebview 提交问题。该软件包使用本机模态演示,但看起来没有正确执行。

如果您想使用 modal_bottom_sheet 包作为您附加的 gif,则不能使用 ChromeSafariBrowser,您需要使用 InAppWebViewChromeSafariBrowser 是 Fl​​utter 外部的原生 activity 而 InAppWebView 是 Fl​​utter 内部包装的原生视图。


InAppWebView(
                  initialUrl: "https://flutter.dev/",
                  initialHeaders: {},
                  initialOptions: InAppWebViewGroupOptions(
                    crossPlatform: InAppWebViewOptions(
                        debuggingEnabled: true,
                    )
                  ),
                  onWebViewCreated: (InAppWebViewController controller) {
                    webView = controller;
                  },
                  onLoadStart: (InAppWebViewController controller, String url) {
                    setState(() {
                      this.url = url;
                    });
                  },
                  onLoadStop: (InAppWebViewController controller, String url) async {
                    setState(() {
                      this.url = url;
                    });
                  },
                  onProgressChanged: (InAppWebViewController controller, int progress) {
                    setState(() {
                      this.progress = progress / 100;
                    });
                  },
                ),

这已在 v4.0.0 版中修复,现在可以通过设置

获得预期的行为
presentationStyle: IOSUIModalPresentationStyle.POPOVER

这里有更多信息:https://pub.dev/packages/flutter_inappwebview#-changelog-tab-