颤振: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
,而需要使用 InAppWebView
。
ChromeSafariBrowser
是 Flutter 外部的原生活动,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 的空白屏幕