我有一个显示在电子邮件客户端中打开的html文件的应用程序。我正在使用MethodChannel将发送数据从MainActivity / AppDelegate发送到main.dart,将文件保存到存储中并在其中打开webview。我的main.dart在这里https://github.com/akravets/sandbox/blob/master/main.dart。
html文件很大-20至30 MB。打开附件时,一切正常,但是在关闭应用程序并尝试打开附件后,出现黑屏。之后我可以打开另一个文件,但是关闭应用程序后第一次打开总是失败。
相关代码可以在这里:
String fileName = data.substring(0, indexOfSeparator);
String content = data.substring(indexOfSeparator + 3);
if (_fileName != fileName) {
setState(() {
_fileName = fileName;
writeLog("Setting fileName in state: $fileName");
});
}
final file = await _localFile(fileName);
writeData(file, content).then((f) {
writeLog("File write OK, reloading webView with file ${file.path}");
flutterWebviewPlugin.reloadUrl('file://${file.path}');
}
任何想法在这里可能是什么问题?
答案 0 :(得分:0)
这里的问题是我正在设置状态并调用flutterWebviewPlugin.reloadUrl('file:// $ {file.path}');之后。我怀疑发生的事情是状态会改变,构建会被调用,但是webView的重新加载不会正确发生-出现计时问题。解决问题的方法是更改webView侦听器的状态,以便在所有数据准备就绪后触发构建
flutterWebviewPlugin.onUrlChanged.listen((String url) {
setState(() {
_fileName = fileName;
writeLog("Setting fileName in state: $fileName");
});
});