Я заставил его работать на Android, WebViewWidget
правильно отображается с содержимым html, без проблем.
Для iOS он просто отображает пустой/белый цвет. Я попробовал то, что я видел, предложенное людьми по всему Интернету, а именно добавить несколько строк в Info.plist, которые позволяют WKWebView в iOS загружать и отображать http (не безопасный, не только https):
<key>io.flutter.embedded_views_preview</key>
<string>YES</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
(^^ Я действительно не знаю, что делают эти строки по отдельности)
(^^ Я также пробовал строчные «yes
» и <true/>
в качестве значений для первого)
Я запускал flutter clean
, затем flutter pub get
, удалял Podfile.lock, запускал pod install
(в папке ios) кучу раз, но я все еще не могу заставить контент отображаться в веб-просмотре на iOS (он работает на Android), только пустой пробел, где должен появиться HTML-контент.
Важно отметить, что я получаю свой html ни с http, ни с https, но я загружаю строку (которая является html) и устанавливаю ее следующим образом:
String text = ...
await _controller.loadHtmlString(text);
Может быть, есть способ обмануть iOS, чтобы она думала, что html исходит от https?
Вот некоторые распространенные сообщения, которые я вижу распечатанными в консоли (не красным, а обычным цветом), и я получаю эти сообщения только при запуске приложения из студии Android, а не XCode (на реальном устройстве iOS):
[assertion] Error acquiring assertion: <Error Domain=RBSServiceErrorDomain Code=1 "target is not running or doesn't have entitlement com.apple.runningboard.assertions.webkit" UserInfo = {NSLocalizedFailureReason=target is not running or doesn't have entitlement com.apple.runningboard.assertions.webkit}>
[ProcessSuspension] 0x12d07df20 - ProcessAssertion::acquireSync Failed to acquire RBS assertion 'ConnectionTerminationWatchdog' for process with PID=47861, error: Error Domain=RBSServiceErrorDomain Code=1 "target is not running or doesn't have entitlement com.apple.runningboard.assertions.webkit" UserInfo = {NSLocalizedFailureReason=target is not running or doesn't have entitlement com.apple.runningboard.assertions.webkit}
и:
Could not signal service com.apple.WebKit.WebContent: 113: Could not find specified service
ОБНОВЛЕНИЕ: я узнал, что на iOS также отображается пустая/белая страница, даже когда я использую https, например _controller.loadRequest(Uri.parse('https://flutter.dev'));
.
реальное устройство, iPhone 13 Pro с iOS 16.2
Я решил проблему, это было неожиданно и не имело отношения к http/https материалам... См. комментарии в приведенном ниже коде для объяснения
_controller.setNavigationDelegate(
//...
onNavigationRequest: (NavigationRequest request) {
print('onNavigationRequest');
//I first had this line to prevent redirection to anywhere on the internet via hrefs
//but this prevented ANYTHING from being displayed
// return NavigationDecision.prevent;
return NavigationDecision.navigate; //changed it to this, and it works now
},
);
Я также удалил все эти строки из Info.plist
, и он все еще работает.
Вы используете физическое устройство или симулятор?