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

Posted

技术标签:

【中文标题】颤振:SFSafariViewController 不像原生 iOS 模式那样打开【英文标题】:flutter: SFSafariViewController doesn't open like a native iOS modal 【发布时间】:2020-06-16 08:35:25 【问题描述】:

为了在我的 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。

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

【问题讨论】:

【参考方案1】:

您应该向flutter_inappwebview 提交问题。该包使用本机模式演示文稿,看起来它做得不正确。

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


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;
                    );
                  ,
                ),

【讨论】:

【参考方案2】:

这已在 v4.0.0 版本中得到修复,现在可以通过设置获得预期的行为

presentationStyle: IOSUIModalPresentationStyle.POPOVER

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

【讨论】:

以上是关于颤振:SFSafariViewController 不像原生 iOS 模式那样打开的主要内容,如果未能解决你的问题,请参考以下文章

使用 SFSafariViewController 下载文档

使用 SFSafariViewController 的主要优势是啥?

如何在 SwiftUI 中使用 SFSafariViewController?

SFSafariViewController 显示任何 URL 的空白屏幕

SFSafariViewController 关闭后的背景音频

检测 SFSafariViewController 中的 URL 更改