hot fix crash app on android when loading webview

This commit is contained in:
ManhNTX
2022-07-20 09:47:55 +07:00
committed by Dat H. Pham
parent 3e9b7cbbb7
commit e143481739
3 changed files with 50 additions and 12 deletions
@@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:io';
import 'package:core/core.dart';
import 'package:flutter/cupertino.dart';
@@ -43,6 +44,7 @@ class _HtmlContentViewState extends State<HtmlContentViewer> {
late double actualHeight;
double minHeight = 100;
double minWidth = 300;
final double maxHeightForAndroid = 6000;
String? _htmlData;
late WebViewController _webViewController;
bool _isLoading = true;
@@ -99,18 +101,23 @@ class _HtmlContentViewState extends State<HtmlContentViewer> {
widget.onCreated?.call(controller);
},
onPageFinished: (url) async {
final scrollHeightText = await _webViewController.runJavascriptReturningResult('document.body.scrollHeight');
final scrollHeight = double.tryParse(scrollHeightText);
developer.log('onPageFinished(): scrollHeightText: $scrollHeightText', name: 'HtmlContentViewer');
if ((scrollHeight != null) && mounted) {
final scrollHeightWithBuffer = scrollHeight + 30.0;
if (scrollHeightWithBuffer > minHeight) {
setState(() {
actualHeight = scrollHeightWithBuffer;
_isLoading = false;
});
final scrollHeightText = await _webViewController.runJavascriptReturningResult('document.body.scrollHeight');
final scrollHeight = double.tryParse(scrollHeightText);
developer.log('onPageFinished(): scrollHeightText: $scrollHeightText', name: 'HtmlContentViewer');
if ((scrollHeight != null) && mounted) {
final scrollHeightWithBuffer = scrollHeight + 30.0;
if (scrollHeightWithBuffer > minHeight) {
setState(() {
//TODO: It hotfix for web_view crash on android device and waiting lib web_view update to fix this issue
if(Platform.isAndroid && scrollHeightWithBuffer > maxHeightForAndroid){
actualHeight = maxHeightForAndroid;
} else {
actualHeight = scrollHeightWithBuffer;
}
_isLoading = false;
});
}
}
}
if (mounted && _isLoading) {
setState(() {
_isLoading = false;
@@ -1,4 +1,4 @@
# 8. Unable to save data to indexedDB in onBeforeUnload state of web
# 9. Unable to save data to indexedDB in onBeforeUnload state of web
Date: 2022-07-11
@@ -0,0 +1,31 @@
# 10. Crash app when open web_view on android device
Date: 2022-07-20
## Status
Open
## Context
- When using a webview inside of a scrollview,
some content renders a completely distorted page and some content even crashes the app.
This problem only affects Android the same app, on iOS the same code results in a correclty rendered web page.
Rendering the same content also works fine on Android, when not embedding the webview inside of a scrollview.
- Flutter version has problem: 3.0.3
## Decision
- When using a webview inside of a scrollview,
some content renders a completely distorted page and some content even crashes the app.
This problem only affects Android the same app, on iOS the same code results in a correclty rendered web page.
Rendering the same content also works fine on Android, when not embedding the webview inside of a scrollview.
## Consequences
- From now we waiting web_view lib update and for android device if content of web_view has max height is 6000,
## Reference
- [Issue detail](https://github.com/flutter/flutter/issues/104889)